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 구성 방법
- Azure 포털에 로그인합니다.
- 홈 > 앱 등록으로 이동하여 등록된 애플리케이션을 선택하거나 아직 애플리케이션을 만들지 않은 경우 애플리케이션을 등록합니다.
- 애플리케이션을 등록하려면 앱 등록 섹션에서 새 등록을 클릭합니다.
- 이름 필드에 애플리케이션의 표시 이름을 입력합니다.
- 지원되는 계정 유형 섹션에서 애플리케이션을 사용하거나 API에 액세스할 수 있는 사용자를 지정하는 데 필요한 옵션을 선택합니다.
- 등록을 클릭합니다.
- 개요 페이지로 이동하여 Google Security Operations 피드를 구성하는 데 필요한 애플리케이션 (클라이언트) ID와 디렉터리(테넌트) ID를 복사합니다.
- API 권한을 클릭합니다.
- 권한 추가를 클릭한 다음 새 창에서 Microsoft Graph를 선택합니다.
- 애플리케이션 권한을 클릭합니다.
- AuditLog.Read.All, Directory.Read.All, SecurityEvents.Read.All 권한을 선택합니다. 권한이 위임된 권한이 아닌 애플리케이션 권한인지 확인합니다.
- 기본 디렉터리에 대한 관리자 동의 부여를 클릭합니다. 동의 프로세스의 일환으로 사용자 또는 관리자가 권한을 부여하면 애플리케이션이 API를 호출할 수 있습니다.
- 설정 > 관리로 이동합니다.
- 인증서 및 보안 비밀을 클릭합니다.
- '새 클라이언트 암호'를 클릭합니다. 값 필드에 클라이언트 보안 비밀이 표시됩니다.
- 클라이언트 보안 비밀번호 값을 복사합니다. 이 값은 생성 시에만 표시되며 Azure 앱 등록 및 Google Security Operations 피드 구성에 필요합니다.
피드 설정
Google SecOps 플랫폼에서 피드를 설정하는 방법은 두 가지입니다.
- SIEM 설정 > 피드
- 콘텐츠 허브 > 콘텐츠 팩
SIEM 설정 > 피드에서 피드 설정
이 제품군 내에서 다양한 로그 유형에 대해 여러 피드를 구성하려면 제품별 피드 구성을 참고하세요.
단일 피드를 구성하려면 다음 단계를 따르세요.
- SIEM 설정> 피드로 이동합니다.
- 새 피드 추가를 클릭합니다.
- 다음 페이지에서 단일 피드 구성을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예: Azure AD 컨텍스트 로그).
- 소스 유형으로 서드 파티 API를 선택합니다.
- 로그 유형으로 Azure AD 조직 컨텍스트를 선택합니다.
- 다음을 클릭합니다.
- 다음 필수 입력 매개변수를 구성합니다.
- OAuth 클라이언트 ID: 이전에 가져온 클라이언트 ID를 지정합니다.
- OAUTH 클라이언트 보안 비밀번호: 이전에 가져온 클라이언트 보안 비밀번호를 지정합니다.
- 테넌트 ID: 이전에 가져온 테넌트 ID를 지정합니다.
- 다음을 클릭한 후 제출을 클릭합니다.
Google Security Operations 피드에 대한 자세한 내용은 Google Security Operations 피드 문서를 참조하세요. 각 피드 유형의 요구사항은 유형별 피드 구성을 참조하세요. 피드를 만들 때 문제가 발생하면 Google Security Operations 지원팀에 문의하세요.
콘텐츠 허브에서 피드 설정하기
다음 필드의 값을 지정합니다.
- OAuth 클라이언트 ID: 이전에 가져온 클라이언트 ID를 지정합니다.
- OAUTH 클라이언트 보안 비밀번호: 이전에 가져온 클라이언트 보안 비밀번호를 지정합니다.
- 테넌트 ID: 이전에 가져온 테넌트 ID를 지정합니다.
고급 옵션
- 피드 이름: 피드를 식별하는 미리 채워진 값입니다.
- 소스 유형: Google SecOps로 로그를 수집하는 데 사용되는 방법입니다.
- 애셋 네임스페이스: 피드와 연결된 네임스페이스입니다.
- 수집 라벨: 이 피드의 모든 이벤트에 적용되는 라벨입니다.
필드 매핑 참조
이 파서 코드는 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 | RFC 3339 형식을 사용하여 원시 로그의 createdDateTime 필드에서 타임스탬프로 변환되었습니다. |
부서 | user.department | 원시 로그의 department 필드에서 직접 매핑됩니다. 여러 부서가 추출되어 별도의 항목으로 매핑됩니다. |
displayName | user.user_display_name | 원시 로그의 displayName 필드에서 직접 매핑됩니다. |
employeeId | user.employee_id | 원시 로그의 employeeId 필드에서 직접 매핑됩니다. employeeId 가 비어 있으면 extension_employeeNumber 에서 값을 가져옵니다. |
employeeType | user.attribute.labels.value (key: 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 (key: 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 (key: extension_wfc_orgDescription) | 원시 로그의 extension_wfc_orgDescription 필드에서 직접 매핑되고 키 extension_wfc_orgDescription 가 있는 라벨로 추가됩니다. |
givenName | user.first_name | 원시 로그의 givenName 필드에서 직접 매핑됩니다. |
gopher-devices | event.idm.entity.relations | gopher-devices 배열의 각 기기는 별도의 관계 항목에 매핑됩니다. deviceId 은 product_object_id 에 매핑되고, operatingSystem 와 operatingSystemVersion 는 결합되어 platform_version 을 형성하며, model 은 직접 매핑되고, createdDateTime 은 타임스탬프로 변환되어 created_timestamp 에 매핑됩니다. 관계는 OWNS 로 설정되고 방향은 UNIDIRECTIONAL 로 설정됩니다. |
gopher-groups | event.idm.entity.relations | gopher-groups 배열의 각 그룹은 별도의 관계 항목에 매핑됩니다. id 는 product_object_id 에 매핑되고 displayName 는 group_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.country 과 gopher-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 | manager 및 gopher-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) | signInType 은 signInType 키가 있는 라벨로 매핑됩니다. signInType 및 userPrincipalName 가 비어 있지 않으면 결합되어 키 userPrincipalName 이 있는 라벨로 매핑됩니다. |
jobTitle | user.title | 원시 로그의 jobTitle 필드에서 직접 매핑됩니다. |
user.email_addresses | 원시 로그의 mail 필드에서 직접 매핑됩니다. mail 이 'svc-'로 시작하면 user_role.type 이 SERVICE_ACCOUNT 로 설정됩니다. |
|
mailNickname | user.attribute.labels.value (key: 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.country 과 manager.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-manager 및 manager.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 (key: onPremisesDistinguishedName), user.attribute.labels.value (key: onPremisesDistinguishedName-OU data) | 전체 고유 이름은 키가 onPremisesDistinguishedName 인 라벨로 매핑됩니다. 고유 이름의 OU 부분이 추출되어 키 onPremisesDistinguishedName-OU data 가 있는 라벨로 매핑됩니다. OU 부분에 'Admin'이 포함된 경우 user_role.type 이 ADMINISTRATOR 로 설정됩니다. '서비스 계정'이 포함된 경우 user_role.type 이 SERVICE_ACCOUNT 로 설정됩니다. |
onPremisesDomainName | user.group_identifiers, user.attribute.labels.value (key: onPremisesDomainName) | user.group_identifiers 에 직접 매핑되고 onPremisesDomainName 키가 있는 라벨로 추가됩니다. |
onPremisesImmutableId | user.attribute.labels.value (key: onPremisesImmutableId) | 원시 로그의 onPremisesImmutableId 필드에서 직접 매핑되고 키 onPremisesImmutableId 가 있는 라벨로 추가됩니다. |
onPremisesSamAccountName | user.userid, user.attribute.labels.value (key: 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 (key: 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.type 이 SERVICE_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.type 이 ADMINISTRATOR 로 설정됩니다. '서비스 계정'이 포함된 경우 user_role.type 이 SERVICE_ACCOUNT 로 설정됩니다. |
userPrincipalName | user_role.type | userPrincipalName 이 'svc-'로 시작하면 user_role.type 이 SERVICE_ACCOUNT 로 설정됩니다. |
empmanager-src.onPremisesDistinguishedName | manager_role.type | gopher-manager 이 비어 있고 관리자의 고유 이름의 OU 부분에 'Users'가 포함되어 있으면 manager_role.type 이 ADMINISTRATOR 로 설정됩니다. '서비스 계정'이 포함된 경우 manager_role.type 이 SERVICE_ACCOUNT 로 설정됩니다. |
empmanager-src.userPrincipalName | manager_role.type | gopher-manager 이 비어 있고 empmanager-src.userPrincipalName 이 'svc-'로 시작하면 manager_role.type 이 SERVICE_ACCOUNT 로 설정됩니다. |
user_role.type | mail 이 'svc-'로 시작하면 user_role.type 이 SERVICE_ACCOUNT 로 설정됩니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.