AWS Control Tower 로그 수집
이 문서에서는 AWS Control Tower 로그를 Google Security Operations로 수집하는 방법을 설명합니다. AWS Control Tower를 사용하면 여러 AWS 계정에서 거버넌스, 규정 준수, 보안 모니터링을 할 수 있습니다. 이 통합을 통해 AWS Control Tower의 로그를 분석하여 가시성과 보안 상태를 개선할 수 있습니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- AWS에 대한 권한이 있는지 확인합니다.
Amazon S3 버킷 구성
- 버킷 만들기 사용자 가이드에 따라 Amazon S3 버킷을 만듭니다.
- 나중에 사용할 수 있도록 버킷 이름 및 리전을 저장합니다.
- IAM 사용자 만들기 사용자 가이드에 따라 사용자를 만듭니다.
- 만든 사용자를 선택합니다.
- 보안 사용자 인증 정보 탭을 선택합니다.
- 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
- 사용 사례로 서드 파티 서비스를 선택합니다.
- 다음을 클릭합니다.
- 선택사항: 설명 태그를 추가합니다.
- 액세스 키 만들기를 클릭합니다.
- CSV 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키 및 비밀 액세스 키를 저장합니다.
- 완료를 클릭합니다.
- 권한 탭을 선택합니다.
- 권한 정책 섹션에서 권한 추가를 클릭합니다.
- 권한 추가를 선택합니다.
- Attach policies directly(정책 직접 연결)를 선택합니다.
- AmazonS3FullAccess 및 CloudWatchLogsFullAccess 정책을 검색하여 선택합니다.
- 다음을 클릭합니다.
- 권한 추가를 클릭합니다.
AWS Control Tower에서 CloudTrail 구성
- AWS 관리 콘솔에 로그인합니다.
- AWS Control Tower로 이동합니다.
- 검색창에 CloudTrail을 입력하고 서비스 목록에서 선택합니다.
트레일 만들기를 클릭하여 새 트레일을 만듭니다.
트레일 설정 지정:
- 트레일 이름: 트레일의 의미 있는 이름을 지정합니다 (예: ControlTowerTrail).
- 모든 지역에 무료 체험판 적용: 모든 지역에 무료 체험판 적용에 예를 선택해야 합니다.
- 관리 이벤트: 읽기/쓰기 이벤트가 모두로 설정되어 있는지 확인합니다.
- 선택사항: 데이터 이벤트: S3 데이터 이벤트 및 Lambda 데이터 이벤트를 사용 설정하여 자세한 데이터 활동을 캡처합니다.
- 선택사항: 로그 파일 검증: 이 옵션을 사용 설정하면 로그 파일이 저장된 후 조작되지 않습니다.
이벤트 선택기에서 관리 이벤트 및 데이터 이벤트를 로깅하도록 선택합니다.
로그를 S3 버킷으로 전송하도록 CloudTrail 구성
- AWS IAM 콘솔로 이동합니다.
- 역할을 클릭합니다.
- CloudTrail에서
AWSServiceRoleForCloudTrail
를 사용하는 역할을 검색합니다 (CloudTrail을 설정할 때 역할이 자동으로 생성됨). - 역할의 권한 탭에서 정책 연결을 클릭합니다.
CloudTrailS3DeliveryPolicy
을 검색합니다.CloudTrailS3DeliveryPolicy
정책 옆의 체크박스를 선택합니다.- Attach policy(정책 연결)를 클릭합니다.
- AWS CloudTrail 콘솔로 이동합니다.
- 저장소 위치 섹션에서 로그 파일의 대상으로 S3를 선택합니다.
- 이전에 만든 S3 버킷을 선택합니다.
- 선택한 버킷에 로그를 쓸 수 있는 CloudTrail 권한을 부여하라는 메시지가 표시되면 허용을 클릭합니다.
- 설정을 검토하고 만들기를 클릭합니다 (기존 트레일을 수정하는 경우 변경사항 저장).
AWS Control Tower 로그를 수집하도록 Google SecOps에서 피드 구성
- SIEM 설정 > 피드로 이동합니다.
- 새로 추가를 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다 (예: AWS Control Tower Logs).
- 소스 유형으로 Amazon S3를 선택합니다.
- 로그 유형으로 AWS Control Tower를 선택합니다.
- 다음을 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
- 리전: Amazon S3 버킷이 있는 리전입니다.
- S3 URI: 버킷 URI입니다.
s3://your-log-bucket-name/
your-log-bucket-name
을 버킷의 실제 이름으로 바꿉니다.
- URI: 디렉터리 또는 하위 디렉터리가 포함된 디렉터리를 선택합니다.
소스 삭제 옵션: 원하는 삭제 옵션을 선택합니다.
액세스 키 ID: S3 버킷에 대한 액세스 권한이 있는 사용자 액세스 키입니다.
보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
애셋 네임스페이스: 애셋 네임스페이스입니다.
수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
다음을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
awsAccountId | target.user.group_identifiers | 이벤트와 연결된 AWS 계정 ID입니다. |
digestPublicKeyFingerprint | target.file.sha1 | 다이제스트에 서명하는 데 사용되는 공개 키의 지문입니다. |
digestPublicKeyFingerprint | target.resource.attribute.labels.value | 다이제스트에 서명하는 데 사용되는 공개 키의 지문입니다. |
digestS3Bucket | target.resource.name | 다이제스트가 저장된 S3 버킷의 이름입니다. |
digestS3Object | target.file.full_path | S3 버킷의 다이제스트 객체 경로입니다. |
digestSignatureAlgorithm | network.tls.cipher | 다이제스트에 서명하는 데 사용되는 알고리즘입니다. |
digestSignatureAlgorithm | target.resource.attribute.labels.value | 다이제스트에 서명하는 데 사용되는 알고리즘입니다. |
digestStartTime | metadata.event_timestamp | 다이제스트 기간의 시작 시간입니다. eventTime을 사용할 수 없는 경우 이벤트 시간으로 사용됩니다. |
eventCategory | security_result.category_details | 이벤트의 카테고리입니다. |
eventID | metadata.product_log_id | 이벤트의 고유 ID입니다. |
eventName | metadata.product_event_type | 이벤트 이름입니다. |
eventName | security_result.summary | 보안 결과 요약을 생성하는 데 사용되는 이벤트 이름입니다. |
eventSource | target.application | 이벤트의 소스입니다. |
eventTime | metadata.event_timestamp | 이벤트가 발생한 시간입니다. |
eventType | additional.fields.value.string_value | 이벤트 유형입니다. |
logFiles.hashValue | about.file.sha256 | 로그 파일의 SHA-256 해시입니다. |
logFiles.s3Bucket | about.resource.name | 로그 파일이 저장된 S3 버킷의 이름입니다. |
logFiles.s3Object | about.file.full_path | S3 버킷의 로그 파일 객체 경로입니다. |
previousDigestHashValue | target.file.sha256 | 이전 다이제스트의 SHA-256 해시입니다. |
recipientAccountId | target.resource.attribute.labels.value | 이벤트 수신자의 AWS 계정 ID입니다. |
Records.awsRegion | principal.location.name | 이벤트가 발생한 AWS 리전입니다. |
Records.errorCode | security_result.rule_id | 요청과 연결된 오류 코드(있는 경우)입니다. |
Records.errorMessage | security_result.description | 요청과 연결된 오류 메시지(있는 경우) |
Records.eventCategory | security_result.category_details | 이벤트의 카테고리입니다. |
Records.eventID | metadata.product_log_id | 이벤트의 고유 ID입니다. |
Records.eventName | metadata.product_event_type | 이벤트 이름입니다. |
Records.eventName | security_result.summary | 보안 결과 요약을 생성하는 데 사용되는 이벤트의 이름입니다. |
Records.eventSource | target.application | 이벤트의 소스입니다. |
Records.eventTime | metadata.event_timestamp | 이벤트가 발생한 시간입니다. |
Records.eventType | additional.fields.value.string_value | 이벤트 유형입니다. |
Records.requestID | target.resource.attribute.labels.value | 요청의 ID입니다. |
Records.requestParameters.groupName | target.group.group_display_name | 요청과 연결된 그룹의 이름입니다(있는 경우). |
Records.requestParameters.userName | src.user.userid | 요청과 연결된 사용자의 이름입니다(있는 경우). |
Records.requestParameters.userName | src.user.user_display_name | 요청과 연결된 사용자의 이름입니다(있는 경우). |
Records.responseElements.ConsoleLogin | security_action | 콘솔 로그인 시도의 결과입니다. |
Records.responseElements.ConsoleLogin | security_result.summary | 보안 결과 요약을 생성하는 데 사용되는 콘솔 로그인 시도 결과입니다. |
Records.sourceIPAddress | principal.hostname | 주 구성원의 IP 주소입니다. 유효한 IP가 아닌 경우 호스트 이름으로 사용됩니다. |
Records.sourceIPAddress | principal.ip | 주 구성원의 IP 주소입니다. |
Records.tlsDetails.cipherSuite | network.tls.cipher | TLS 연결에 사용되는 암호화 모음입니다. |
Records.tlsDetails.tlsVersion | network.tls.version | 연결에 사용된 TLS 버전입니다. |
Records.userAgent | network.http.user_agent | 요청의 사용자 에이전트입니다. |
Records.userIdentity.accessKeyId | additional.fields.value.string_value | 요청에 사용된 액세스 키 ID입니다. |
Records.userIdentity.accountId | principal.user.group_identifiers | 사용자의 AWS 계정 ID입니다. |
Records.userIdentity.arn | principal.user.attribute.labels.value | 사용자의 ARN입니다. |
Records.userIdentity.arn | target.user.userid | 사용자의 ARN입니다. userName을 사용할 수 없는 경우 userid로 사용됩니다. |
Records.userIdentity.principalId | principal.user.product_object_id | 사용자의 기본 ID입니다. |
Records.userIdentity.sessionContext.attributes.mfaAuthenticated | principal.user.attribute.labels.value | 요청에 MFA가 사용되었는지 여부입니다. |
Records.userIdentity.sessionContext.sessionIssuer.userName | principal.user.userid | 세션을 발급한 사용자의 사용자 이름입니다. |
Records.userIdentity.type | principal.resource.type | 요청에 사용된 ID 유형입니다. |
Records.userIdentity.userName | target.user.userid | 사용자의 이름입니다. |
- | extensions.auth.mechanism | '원격'으로 설정합니다. |
- | metadata.event_type | eventName에 따라 'STATUS_UPDATE', 'USER_RESOURCE_ACCESS', 'USER_LOGIN' 또는 'GENERIC_EVENT'로 설정합니다. |
- | metadata.log_type | 'AWS_CONTROL_TOWER'로 설정합니다. |
- | metadata.product_name | 'AWS Control Tower'로 설정합니다. |
- | metadata.vendor_name | 'AWS'로 설정합니다. |
- | principal.asset.attribute.cloud.environment | 'AMAZON_WEB_SERVICES'로 설정합니다. |
- | security_result.action | errorCode에 따라 '허용' 또는 '차단'으로 설정합니다. |
- | security_result.severity | 'INFORMATIONAL'(정보)로 설정합니다. |
변경사항
2024-03-17
- 개선사항:
- 'req.userIdentity.arn' 및 'req.userIdentity.userName'이 'target.user.userid'에 매핑되었습니다.
2023-01-04
- 개선사항:
- For 루프에서 데이터가 복제되지 않도록 변수를 초기화했습니다.
2022-12-15
- 개선사항:
- 'metadata.vendor_name'을 'AWS'에 매핑했습니다.
- 'metadata.product_name'을 'AWS Control Tower'에 매핑했습니다.
- 'eventName'이 'ConsoleLogin'인 경우 'metadata.event_type'이 'USER_LOGIN'에 매핑되었습니다.
- 'eventName'이 'ConsoleLogin'인 경우 'security_result.severity'가 'INFORMATIONAL'로 매핑되었습니다.
2022-11-17
- 개선사항:
- 'req.userIdentity.userName' 및 'req.userIdentity.sessionContext.sessionIssuer.userName'이 'target.user.id'에 매핑되었습니다.
- 'ConsoleLogin:Success'가 'security_result.action'에 매핑되었습니다.
- 'sourceIPAddress'에서 'principal.port'로 포트 정보를 매핑했습니다.
2022-10-31
- 파서를 새로 만들었습니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가의 답변을 받으세요.