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 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키와 비밀 액세스 키를 저장합니다.
- 완료를 클릭합니다.
- 권한 탭을 선택합니다.
- 권한 정책 섹션에서 권한 추가를 클릭합니다.
- 권한 추가를 선택합니다.
- 정책 직접 연결을 선택합니다.
- AmazonS3FullAccess 및 CloudWatchLogsFullAccess 정책을 검색하여 선택합니다.
- 다음을 클릭합니다.
- 권한 추가를 클릭합니다.
AWS Control Tower에서 CloudTrail 구성
- AWS 관리 콘솔에 로그인합니다.
- AWS Control Tower로 이동합니다.
- 검색창에 CloudTrail을 입력하고 서비스 목록에서 선택합니다.
트레일 만들기를 클릭하여 새 트레일을 만듭니다.
트레일 설정을 지정합니다.
- 트레일 이름: 트레일에 의미 있는 이름을 입력합니다 (예: ControlTowerTrail).
- 모든 리전에 트레일 적용: 모든 리전에 트레일 적용에 예를 선택해야 합니다.
- 관리 이벤트: 읽기/쓰기 이벤트가 모두로 설정되어 있는지 확인합니다.
- 선택사항: 데이터 이벤트: S3 데이터 이벤트와 Lambda 데이터 이벤트를 사용 설정하여 상세한 데이터 활동을 캡처합니다.
- 선택사항: 로그 파일 검증: 로그 파일이 저장된 후 조작되지 않도록 하려면 이 옵션을 사용 설정하세요.
이벤트 선택기에서 관리 이벤트 및 데이터 이벤트를 로깅하도록 선택합니다.
CloudTrail 구성 방법
- AWS IAM 콘솔로 이동합니다.
- 역할을 클릭합니다.
- CloudTrail에서 사용하는 역할을 검색합니다 (역할은 CloudTrail을 설정할 때 자동으로 생성됨).
AWSServiceRoleForCloudTrail
- 역할의 권한 탭에서 정책 연결을 클릭합니다.
CloudTrailS3DeliveryPolicy
을 검색합니다.CloudTrailS3DeliveryPolicy
정책 옆에 있는 체크박스를 선택합니다.- Attach policy(정책 연결)를 클릭합니다.
- AWS CloudTrail 콘솔로 이동합니다.
- 스토리지 위치 섹션에서 로그 파일의 대상으로 S3를 선택합니다.
- 이전에 만든 S3 버킷을 선택합니다.
- 선택한 버킷에 로그를 쓸 수 있는 CloudTrail 권한을 부여하라는 메시지가 표시되면 허용을 클릭합니다.
- 설정을 검토하고 만들기를 클릭합니다 (기존 트레일을 수정하는 경우 변경사항 저장).
피드 설정
Google SecOps 플랫폼에서 피드를 설정하는 방법은 두 가지입니다.
- SIEM 설정 > 피드 > 새 피드 추가
- 콘텐츠 허브 > 콘텐츠 팩 > 시작하기
AWS Control Tower 피드를 설정하는 방법
- Amazon Cloud Platform 팩을 클릭합니다.
- AWS Control Tower 로그 유형을 찾습니다.
다음 필드에 값을 지정합니다.
- 소스 유형: Amazon SQS V2
- Queue Name: 읽어올 SQS 큐 이름
- S3 URI: 버킷 URI입니다.
s3://your-log-bucket-name/
your-log-bucket-name
을 실제 S3 버킷 이름으로 바꿉니다.
소스 삭제 옵션: 수집 환경설정에 따라 삭제 옵션을 선택합니다.
최대 파일 기간: 지난 일수 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
SQS 대기열 액세스 키 ID: 20자리 영숫자 문자열인 계정 액세스 키입니다.
SQS 대기열 보안 비밀 액세스 키: 40자로 된 영숫자 문자열인 계정 액세스 키입니다.
고급 옵션
- 피드 이름: 피드를 식별하는 미리 채워진 값입니다.
- 애셋 네임스페이스: 피드와 연결된 네임스페이스입니다.
- 수집 라벨: 이 피드의 모든 이벤트에 적용되는 라벨입니다.
피드 만들기를 클릭합니다.
이 제품군 내에서 다양한 로그 유형에 대해 여러 피드를 구성하는 방법에 관한 자세한 내용은 제품별 피드 구성을 참고하세요.
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 | 'REMOTE'로 설정합니다. |
- | 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에 따라 'ALLOW' 또는 'BLOCK'으로 설정됩니다. |
- | security_result.severity | 'INFORMATIONAL'로 설정합니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.