Microsoft Azure AD 컨텍스트 로그 수집

다음에서 지원:

이 문서에서는 Google Security Operations 피드를 설정하여 Microsoft Azure Active Directory (AD) 로그를 수집하는 방법을 설명합니다.

Azure Active Directory (AZURE_AD)의 이름이 이제 Microsoft Entra ID로 변경되었습니다. Azure AD 감사 로그(AZURE_AD_AUDIT)가 이제 Microsoft Entra ID 감사 로그로 변경되었습니다.

자세한 내용은 Google Security Operations에 데이터 수집을 참조하세요.

수집 라벨은 원시 로그 데이터를 구조화된 UDM 형식으로 정규화하는 파서를 식별합니다.

시작하기 전에

이 페이지의 태스크를 완료하려면 다음이 있어야 합니다.

  • 로그인할 수 있는 Azure 구독입니다.
  • 전역 관리자 또는 Azure AD 관리자 역할
  • Azure의 Azure AD (테넌트)

Azure AD 구성

  1. Azure 포털에 로그인합니다.
  2. > 앱 등록으로 이동하여 등록된 애플리케이션을 선택하거나 아직 애플리케이션을 만들지 않은 경우 애플리케이션을 등록합니다.
  3. 애플리케이션을 등록하려면 앱 등록 섹션에서 새 등록을 클릭합니다.
  4. 이름 필드에 애플리케이션의 표시 이름을 입력합니다.
  5. 지원되는 계정 유형 섹션에서 필요한 옵션을 선택하여 애플리케이션을 사용하거나 API에 액세스할 수 있는 사용자를 지정합니다.
  6. 등록을 클릭합니다.
  7. 개요 페이지로 이동하여 Google Security Operations 피드를 구성하는 데 필요한 애플리케이션 (클라이언트) ID와 디렉터리(테넌트) ID를 복사합니다.
  8. API 권한을 클릭합니다.
  9. 권한 추가를 클릭한 다음 새 창에서 Microsoft Graph를 선택합니다.
  10. 애플리케이션 권한을 클릭합니다.
  11. AuditLog.Read.All, Directory.Read.All, SecurityEvents.Read.All 권한을 선택합니다. 권한이 위임된 권한이 아닌 애플리케이션 권한인지 확인합니다.
  12. 기본 디렉터리에 대한 관리자 동의 허용을 클릭합니다. 동의 절차의 일환으로 사용자 또는 관리자가 애플리케이션에 권한을 부여하면 애플리케이션은 API를 호출할 수 있습니다.
  13. 설정 > 관리로 이동합니다.
  14. 인증서 및 보안 비밀을 클릭합니다.
  15. '새 클라이언트 암호'를 클릭합니다. 필드에 클라이언트 보안 비밀이 표시됩니다.
  16. 클라이언트 보안 비밀번호 값을 복사합니다. 이 값은 생성 시점에만 표시되며 Azure 앱 등록 및 Google Security Operations 피드 구성에 필요합니다.

Azure AD 컨텍스트 로그를 수집하도록 Google Security Operations에서 피드 구성

  1. SIEM 설정 > 피드를 선택합니다.
  2. 새로 추가를 클릭합니다.
  3. 피드 이름에 고유한 이름을 입력합니다.
  4. 소스 유형으로 서드 파티 API를 선택합니다.
  5. 로그 유형으로 Azure AD Organizational Context를 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 필수 입력 매개변수를 구성합니다.
    • OAUTH 클라이언트 ID: 이전에 가져온 클라이언트 ID를 지정합니다.
    • OAUTH 클라이언트 보안 비밀: 이전에 가져온 클라이언트 보안 비밀을 지정합니다.
    • 테넌트 ID: 이전에 가져온 테넌트 ID를 지정합니다.
  8. 다음을 클릭한 후 제출을 클릭합니다.

Google Security Operations 피드에 대한 자세한 내용은 Google Security Operations 피드 문서를 참조하세요. 각 피드 유형의 요구사항은 유형별 피드 구성을 참조하세요. 피드를 만들 때 문제가 발생하면 Google Security Operations 지원팀에 문의하세요.

필드 매핑 참조

이 파서 코드는 Azure Active Directory의 원시 JSON 형식 로그를 통합 데이터 모델 (UDM)로 변환합니다. 이 도구는 속성, 역할, 관계, 라벨을 비롯한 사용자 및 관리자 정보를 추출하는 동시에 다양한 데이터 불일치를 처리하고 표준화된 필드로 출력을 보강합니다.

UDM 매핑 표

로그 필드 UDM 매핑 논리
businessPhones user.phone_numbers 원시 로그의 businessPhones 필드에서 직접 매핑됩니다. 여러 전화번호가 추출되어 별도의 항목으로 매핑됩니다.
city user.personal_address.city 원시 로그의 city 필드에서 직접 매핑됩니다.
companyName user.company_name 원시 로그의 companyName 필드에서 직접 매핑됩니다.
국가 user.personal_address.country_or_region 원시 로그의 country 필드에서 직접 매핑됩니다. country가 비어 있으면 usageLocation에서 값을 가져옵니다.
createdDateTime user.attribute.creation_time RFC3339 형식을 사용하여 원시 로그의 createdDateTime 필드에서 타임스탬프로 변환됩니다.
부서 user.department 원시 로그의 department 필드에서 직접 매핑됩니다. 여러 부서가 추출되어 별도의 항목으로 매핑됩니다.
displayName user.user_display_name 원시 로그의 displayName 필드에서 직접 매핑됩니다.
employeeId user.employee_id 원시 로그의 employeeId 필드에서 직접 매핑됩니다. employeeId가 비어 있으면 extension_employeeNumber에서 값을 가져옵니다.
employeeType user.attribute.labels.value (키: employeeType) 원시 로그의 employeeType 필드에서 직접 매핑되고 employeeType 키가 있는 라벨로 추가되었습니다.
extension_employeeNumber user.employee_id employeeId가 비어 있으면 user.employee_id에 매핑됩니다.
extension_wfc_AccountType event.idm.entity.entity.labels.value (키: wfc_AccountType) 원시 로그의 extension_wfc_AccountType 필드에서 직접 매핑되고 wfc_AccountType 키가 있는 라벨로 추가되었습니다.
extension_wfc_AccountingUnitName event.idm.entity.entity.labels.value (key: extension_wfc_AccountingUnitName) 원시 로그의 extension_wfc_AccountingUnitName 필드에서 직접 매핑되고 extension_wfc_AccountingUnitName 키가 있는 라벨로 추가되었습니다.
extension_wfc_execDescription event.idm.entity.entity.labels.value (키: extension_wfc_execDescription) 원시 로그의 extension_wfc_execDescription 필드에서 직접 매핑되고 extension_wfc_execDescription 키가 있는 라벨로 추가되었습니다.
extension_wfc_groupDescription event.idm.entity.entity.labels.value (키: extension_wfc_groupDescription) 원시 로그의 extension_wfc_groupDescription 필드에서 직접 매핑되고 extension_wfc_groupDescription 키가 있는 라벨로 추가되었습니다.
extension_wfc_orgDescription event.idm.entity.entity.labels.value (키: extension_wfc_orgDescription) 원시 로그의 extension_wfc_orgDescription 필드에서 직접 매핑하고 extension_wfc_orgDescription 키로 라벨로 추가했습니다.
givenName user.first_name 원시 로그의 givenName 필드에서 직접 매핑됩니다.
gopher-devices event.idm.entity.relations gopher-devices 배열의 각 기기는 별도의 관계 항목에 매핑됩니다. deviceIdproduct_object_id에 매핑되고, operatingSystemoperatingSystemVersion는 결합되어 platform_version를 형성하며, model는 직접 매핑되고, createdDateTime는 타임스탬프로 변환되어 created_timestamp에 매핑됩니다. 관계는 OWNS로 설정되고 방향은 UNIDIRECTIONAL로 설정됩니다.
gopher-groups event.idm.entity.relations gopher-groups 배열의 각 그룹은 별도의 관계 항목에 매핑됩니다. idproduct_object_id에 매핑되고 displayNamegroup_display_name에 매핑됩니다. 관계는 MEMBER로 설정되고 방향은 UNIDIRECTIONAL로 설정됩니다.
gopher-manager.businessPhones empmanager.phone_numbers manager가 비어 있으면 empmanager.phone_numbers에 매핑됩니다.
gopher-manager.country empmanager.personal_address.country_or_region manager가 비어 있으면 empmanager.personal_address.country_or_region에 매핑됩니다. gopher-manager.countrygopher-manager.usageLocation가 모두 비어 있으면 필드가 비워집니다.
gopher-manager.department empmanager.department manager가 비어 있으면 empmanager.department에 매핑됩니다.
gopher-manager.displayName empmanager.user_display_name manager가 비어 있으면 empmanager.user_display_name에 매핑됩니다.
gopher-manager.employeeId empmanager.employee_id manager가 비어 있고 gopher-manager.employeeId가 비어 있지 않은 경우 empmanager.employee_id에 매핑됩니다.
gopher-manager.extension_employeeNumber empmanager.employee_id managergopher-manager.employeeId가 비어 있고 gopher-manager.extension_employeeNumber가 비어 있지 않으면 empmanager.employee_id에 매핑됩니다.
gopher-manager.givenName empmanager.first_name manager가 비어 있으면 empmanager.first_name에 매핑됩니다.
gopher-manager.id empmanager.product_object_id manager가 비어 있으면 empmanager.product_object_id에 매핑됩니다.
gopher-manager.jobTitle empmanager.title manager가 비어 있으면 empmanager.title에 매핑됩니다.
gopher-manager.mail empmanager.email_addresses manager가 비어 있으면 empmanager.email_addresses에 매핑됩니다.
gopher-manager.onPremisesImmutableId user.attribute.labels.value (키: gopher-manager onPremisesImmutableId) gopher-manager onPremisesImmutableId 키로 라벨로 매핑됩니다.
gopher-manager.onPremisesSamAccountName empmanager.userid manager가 비어 있으면 empmanager.userid에 매핑됩니다.
gopher-manager.onPremisesSecurityIdentifier empmanager.windows_sid manager가 비어 있으면 empmanager.windows_sid에 매핑됩니다.
gopher-manager.proxyAddresses empmanager.email_addresses, empmanager.group_identifiers manager가 비어 있으면 gopher-manager.proxyAddresses 배열의 각 주소는 'smtp'로 시작하는지 또는 'SMTP'로 시작하는지에 따라 empmanager.email_addresses 또는 empmanager.group_identifiers에 매핑됩니다.
gopher-manager.refreshTokensValidFromDateTime empmanager.attribute.labels.value (키: refreshTokensValidFromDateTime) manager가 비어 있으면 refreshTokensValidFromDateTime 키로 라벨로 매핑됩니다.
gopher-manager.streetAddress empmanager.personal_address.name manager가 비어 있으면 empmanager.personal_address.name에 매핑됩니다.
gopher-manager.surname empmanager.last_name manager가 비어 있으면 empmanager.last_name에 매핑됩니다.
gopher-manager.usageLocation user.attribute.labels.value (키: manager_src_usageLocation) manager_src_usageLocation 키로 라벨로 매핑됩니다.
gopher-manager.userType empmanager.attribute.roles.name manager가 비어 있으면 empmanager.attribute.roles.name에 매핑됩니다.
id user.product_object_id 원시 로그의 id 필드에서 직접 매핑됩니다.
ID user.attribute.labels.value (키: signInType), user.attribute.labels.value (키: userPrincipalName) signInTypesignInType 키를 가진 라벨로 매핑됩니다. signInTypeuserPrincipalName가 비어 있지 않으면 결합되어 userPrincipalName 키가 있는 라벨로 매핑됩니다.
jobTitle user.title 원시 로그의 jobTitle 필드에서 직접 매핑됩니다.
mail user.email_addresses 원시 로그의 mail 필드에서 직접 매핑됩니다. mail가 'svc-'로 시작하면 user_role.typeSERVICE_ACCOUNT로 설정됩니다.
mailNickname user.attribute.labels.value (키: mailNickname) 원시 로그의 mailNickname 필드에서 직접 매핑하고 mailNickname 키가 있는 라벨로 추가했습니다.
manager.businessPhones empmanager.phone_numbers gopher-manager가 비어 있으면 empmanager.phone_numbers에 매핑됩니다.
manager.city empmanager.personal_address.city gopher-manager가 비어 있으면 empmanager.personal_address.city에 매핑됩니다.
manager.companyName empmanager.company_name gopher-manager가 비어 있으면 empmanager.company_name에 매핑됩니다.
manager.country empmanager.personal_address.country_or_region gopher-manager가 비어 있으면 empmanager.personal_address.country_or_region에 매핑됩니다. manager.countrymanager.usageLocation가 모두 비어 있으면 필드가 비워집니다.
manager.department empmanager.department gopher-manager가 비어 있으면 empmanager.department에 매핑됩니다.
manager.displayName empmanager.user_display_name gopher-manager가 비어 있으면 empmanager.user_display_name에 매핑됩니다.
manager.employeeId empmanager.employee_id gopher-manager가 비어 있고 manager.employeeId가 비어 있지 않은 경우 empmanager.employee_id에 매핑됩니다.
manager.extension_employeeNumber empmanager.employee_id gopher-managermanager.employeeId가 비어 있고 manager.extension_employeeNumber가 비어 있지 않으면 empmanager.employee_id에 매핑됩니다.
manager.givenName empmanager.first_name gopher-manager가 비어 있으면 empmanager.first_name에 매핑됩니다.
manager.id empmanager.product_object_id gopher-manager가 비어 있으면 empmanager.product_object_id에 매핑됩니다.
manager.jobTitle empmanager.title gopher-manager가 비어 있으면 empmanager.title에 매핑됩니다.
manager.mail empmanager.email_addresses gopher-manager가 비어 있으면 empmanager.email_addresses에 매핑됩니다.
manager.onPremisesSamAccountName empmanager.userid gopher-manager가 비어 있으면 empmanager.userid에 매핑됩니다.
manager.onPremisesSecurityIdentifier empmanager.windows_sid gopher-manager가 비어 있으면 empmanager.windows_sid에 매핑됩니다.
manager.proxyAddresses empmanager.email_addresses, empmanager.group_identifiers gopher-manager가 비어 있으면 manager.proxyAddresses 배열의 각 주소는 'smtp'로 시작하는지 또는 'SMTP'로 시작하는지에 따라 empmanager.email_addresses 또는 empmanager.group_identifiers에 매핑됩니다.
manager.refreshTokensValidFromDateTime empmanager.attribute.labels.value (키: refreshTokensValidFromDateTime) gopher-manager가 비어 있으면 refreshTokensValidFromDateTime 키로 라벨로 매핑됩니다.
manager.state empmanager.personal_address.state gopher-manager가 비어 있으면 empmanager.personal_address.state에 매핑됩니다.
manager.streetAddress empmanager.personal_address.name gopher-manager가 비어 있으면 empmanager.personal_address.name에 매핑됩니다.
manager.surname empmanager.last_name gopher-manager가 비어 있으면 empmanager.last_name에 매핑됩니다.
manager.usageLocation user.attribute.labels.value (키: manager_src_usageLocation), empmanager.personal_address.country_or_region manager_src_usageLocation 키로 라벨로 매핑됩니다. manager.country가 비어 있으면 값도 empmanager.personal_address.country_or_region에 매핑됩니다.
manager.userType empmanager.attribute.roles.name gopher-manager가 비어 있으면 empmanager.attribute.roles.name에 매핑됩니다.
onPremisesDistinguishedName user.attribute.labels.value (키: onPremisesDistinguishedName), user.attribute.labels.value (키: onPremisesDistinguishedName-OU 데이터) 전체 구분된 이름은 onPremisesDistinguishedName 키가 있는 라벨로 매핑됩니다. 고유 이름의 OU 부분이 추출되어 onPremisesDistinguishedName-OU data 키가 있는 라벨로 매핑됩니다. OU 부분에 'Admin'이 포함된 경우 user_role.typeADMINISTRATOR로 설정됩니다. '서비스 계정'이 포함된 경우 user_role.typeSERVICE_ACCOUNT로 설정됩니다.
onPremisesDomainName user.group_identifiers, user.attribute.labels.value (키: onPremisesDomainName) user.group_identifiers에 직접 매핑되고 onPremisesDomainName 키로 라벨로 추가되었습니다.
onPremisesImmutableId user.attribute.labels.value (키: onPremisesImmutableId) 원시 로그의 onPremisesImmutableId 필드에서 직접 매핑되고 onPremisesImmutableId 키가 있는 라벨로 추가되었습니다.
onPremisesSamAccountName user.userid, user.attribute.labels.value (키: onPremisesSamAccountName) sAMAccountName가 비어 있으면 user.userid에 매핑됩니다. onPremisesSamAccountName 키로 라벨로도 추가됩니다.
onPremisesSecurityIdentifier user.windows_sid 원시 로그의 onPremisesSecurityIdentifier 필드에서 직접 매핑됩니다.
proxyAddresses user.email_addresses, user.group_identifiers proxyAddresses 배열의 각 주소는 'smtp'로 시작하는지 또는 'SMTP'로 시작하는지에 따라 user.email_addresses 또는 user.group_identifiers에 매핑됩니다. 주소가 'smtp' 또는 'SMTP'로 시작하면 'smtp:' 또는 'SMTP:' 접두사가 삭제되고 나머지 이메일 주소가 추출되어 user.email_addresses에 매핑됩니다.
refreshTokensValidFromDateTime user.attribute.labels.value (키: refreshTokensValidFromDateTime) 원시 로그의 refreshTokensValidFromDateTime 필드에서 직접 매핑되고 refreshTokensValidFromDateTime 키가 있는 라벨로 추가되었습니다.
sAMAccountName user.userid 원시 로그의 sAMAccountName 필드에서 직접 매핑됩니다.
state user.personal_address.state 원시 로그의 state 필드에서 직접 매핑됩니다.
streetAddress user.personal_address.name 원시 로그의 streetAddress 필드에서 직접 매핑됩니다.
user.last_name 원시 로그의 surname 필드에서 직접 매핑됩니다.
usageLocation user.personal_address.country_or_region country가 비어 있으면 값이 user.personal_address.country_or_region에 매핑됩니다.
userPrincipalName user.email_addresses 원시 로그의 userPrincipalName 필드에서 직접 매핑됩니다. userPrincipalName가 'svc-'로 시작하면 user_role.typeSERVICE_ACCOUNT로 설정됩니다.
userType user.attribute.roles.name 원시 로그의 userType 필드에서 직접 매핑되어 user.attribute.roles.name에 추가됩니다.
파서 로직 UDM 매핑 로직
해당 사항 없음 event.idm.entity.metadata.vendor_name 'Microsoft'로 설정합니다.
해당 사항 없음 event.idm.entity.metadata.product_name 'Azure Active Directory'로 설정합니다.
해당 사항 없음 event.idm.entity.metadata.entity_type 'USER'로 설정합니다.
해당 사항 없음 event.idm.entity.metadata.collected_timestamp 원시 로그의 create_time 필드로 설정합니다.
accountEnabled user.user_authentication_status, user.attribute.labels.value (key: accountEnabled) accountEnabled가 true이면 user.user_authentication_status가 'ACTIVE'로 설정되고 키가 accountEnabled이고 값이 'true'인 라벨이 추가됩니다. 그렇지 않으면 키가 accountEnabled이고 값이 'false'인 라벨이 추가됩니다.
empmanager-src.accountEnabled user.user_authentication_status, user.attribute.labels.value (key: accountEnabled) manager가 비어 있고 empmanager-src.accountEnabled가 'true'이면 user.user_authentication_status가 'ACTIVE'로 설정되고 키가 accountEnabled이고 값이 'true'인 라벨이 추가됩니다. 그렇지 않으면 키가 accountEnabled이고 값이 'false'인 라벨이 추가됩니다.
onPremisesDistinguishedName user_role.type 고유 이름의 OU 부분에 'Admin'이 포함된 경우 user_role.typeADMINISTRATOR로 설정됩니다. '서비스 계정'이 포함된 경우 user_role.typeSERVICE_ACCOUNT로 설정됩니다.
userPrincipalName user_role.type userPrincipalName가 'svc-'로 시작하면 user_role.typeSERVICE_ACCOUNT로 설정됩니다.
empmanager-src.onPremisesDistinguishedName manager_role.type gopher-manager가 비어 있고 관리자의 고유 이름의 OU 부분에 '사용자'가 포함된 경우 manager_role.typeADMINISTRATOR로 설정됩니다. '서비스 계정'이 포함된 경우 manager_role.typeSERVICE_ACCOUNT로 설정됩니다.
empmanager-src.userPrincipalName manager_role.type gopher-manager가 비어 있고 empmanager-src.userPrincipalName가 'svc-'로 시작하면 manager_role.typeSERVICE_ACCOUNT로 설정됩니다.
mail user_role.type mail가 'svc-'로 시작하면 user_role.typeSERVICE_ACCOUNT로 설정됩니다.

변경사항

2024-04-29

  • 'officeLocation'이 'entity.location.name'에 매핑되었습니다.
  • 'extension_wfc_groupDescription', 'extension_wfc_execDescription', 'extension_wfc_orgDescription', 'extension_wfc_AccountingUnitName', 'extension_wfc_AccountType'이 'entity.labels'에 매핑되었습니다.

2024-05-02

버그 수정:

  • 올바른 값을 'entity.user.attribute.labels.value' 필드로 파싱하는 'accountEnabled' 필드 검사를 추가했습니다.

2024-03-14

  • 'onPremisesImmutableId'가 'entity.user.attribute.labels'에 매핑되었습니다.
  • 'gopher-manager.onPremisesImmutableId'가 'entity.user.attribute.labels'에 매핑되었습니다.

2024-01-12

버그 수정:

  • 'empmanager-src.usageLocation' 매핑이 'entity.user.personal_address.country_or_region'에서 'entity.user.attribute.labels'로 변경되었습니다.

2023-11-24

개선

  • 'employeeType' 속성이 'entity.user.attribute.labels'로 매핑되었습니다.
  • 'TAG_MALFORMED_MESSAGE' 태그가 있는 잘못된 형식의 JSON 로그가 삭제되었습니다.

2023-10-25

버그 수정

  • null 검사 및 누락된 값에 대한 'on_error' 검사가 추가되었습니다.

2023-09-25

개선

  • 'group.displayName'이 'relation_entity.entity.group.group_display_name'에 매핑되도록 교체 대신 이름 변경 함수가 추가되었습니다.
  • 'country'가 'user.personal_address.country_or_region'에 매핑되었습니다. 'country'가 없는 경우 'usageLocation'이 'user.personal_address.country_or_region'에 매핑되었습니다.

2023-02-09

개선

  • 'onPremisesDistinguishedName' 필드의 데이터를 매핑하기 전에 null 검사가 추가되었습니다.
  • 'proxyAddresses' 필드에서 이메일 주소를 추출하는 gsub가 추가되었습니다.

2023-01-23

  • 'onPremisesExtensionAttributes.extensionAttribute4'가 'Employee'인 경우 'onPremisesExtensionAttributes.extensionAttribute4'가 'entity.entity.user.attribute.labels'로 매핑되었습니다.
  • 추가 백슬래시가 삭제되도록 'onPremisesDistinguishedName'의 gsub가 추가되었습니다.

2022-12-15

버그 수정:

  • 'mailNickname'이 'entity.user.attribute.labels'에 매핑되었습니다.
  • 'empmanager-src.usageLocation'이 null인 경우 'country_n_code'만 'user.manager.personal_address.country_or_region'에 매핑되었습니다.

2022-09-19

  • 버그 수정:
  • OU에 'Admin'이 포함된 'ADMINISTRATOR'에 'entity.user.attribute.roles'가 매핑되었습니다.

2022-08-11

  • 'accountEnabled'가 'user.attribute.labels'에 매핑되었습니다.

2022-05-16

  • 다음 필드에 대한 매핑이 추가되었습니다.
  • 'createdDateTime'이 'entity.user.attribute.creation_time'에 매핑되었습니다.
  • 'accountEnabled'가 'entity.user.user_authentication_status'에 매핑되었습니다.

2022-05-09

  • 개선사항- 로그의 어커런스에 따라 extension_GUID_sbuxXXXXXXX로 시작하는 필드가 user.attribute.labels 또는 manager.attribute.labels로 매핑되었습니다.

2022-03-24

  • 개선사항- 누락된 필드가 몇 개 추가되었습니다.
  • onPremisesSamAccountName, onPremisesDomainName, onPremisesDistinguishedName이 entity.user.attribute.labels에 매핑되었습니다.
  • signInType의 경우 userPrincipalName이 entity.user.attribute.labels에 매핑되었습니다.