GuardDuty 委任管理アカウントから別アカウントの S3 へ GuardDuty ログをエクスポート
概要
やりたいこと
GuardDuty 委任管理者アカウントから別アカウントの S3 バケットへ GuardDuty ログをエクスポートしたい。
過去に全リージョンの GuardDuty ログを東京リージョンの S3 バケットにエクスポートした。
GuardDuty 委任管理者の指定は以下で行った。
別アカウントへログエクスポート
アカウントごとに作成しなければらならい AWS リソースは以下。
- アカウントA : GuardDuty 委任管理アカウント
- アカウントB : S3 バケット
問題は KMS キーをどこに作成するかだが、今回は GuardDuty 委任管理アカウントに作成することとした。
CloudFormation
- アカウント A : 1111222233333
- アカウント B : 4444555566666
KMSキー
GuardDuty 委任管理アカウントに作成する。
AWSTemplateFormatVersion: 2010-09-09 Description: GuardDuty KMS Resources: KmsKey: Type: AWS::KMS::Key Properties: Description: "Key for GuardDuty" EnableKeyRotation: true KeyPolicy: Version: "2012-10-17" Id: "kms-guardduty" Statement: - Sid: "Enable IAM User Permissions" Effect: "Allow" Principal: AWS: !Sub "arn:aws:iam::${AWS::AccountId}:root" Action: "kms:*" Resource: "*" - Sid: "Allow GuardDuty to use the key" Effect: "Allow" Principal: Service: "guardduty.amazonaws.com" Action: - "kms:GenerateDataKey" Resource: "*" PendingWindowInDays: 7 KmsKeyAlias: Type: AWS::KMS::Alias Properties: AliasName: "alias/KMS-GuardDuty" TargetKeyId: Ref: KmsKey
デプロイ。
aws cloudformation deploy \ --profile account_a \ --stack-name guardduty-kms \ --template-file guardduty_kms.yaml
作成された KMS キーの Arn をメモしておく。
S3 バケット作成
委任管理アカウントとは別のアカウントにバケットを作成する。
AWSTemplateFormatVersion: 2010-09-09 Description: Create S3 bucket for AWS GuardDuty Parameters: BucketName: Type: String OrganizationId: Type: String KmsKey: Type: String Resources: GuardDutyBucket: DeletionPolicy: Retain Type: AWS::S3::Bucket Properties: BucketName: !Ref BucketName VersioningConfiguration: Status: Enabled LifecycleConfiguration: Rules: - Id: 365days-All-LifeCycleRule Status: Enabled ExpirationInDays: 365 NoncurrentVersionExpirationInDays: 10 AccessControl: Private PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true GuardDutyBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref GuardDutyBucket PolicyDocument: Version: 2012-10-17 Statement: - Sid: "Allow GetBucketLocation" Action: 's3:GetBucketLocation' Effect: "Allow" Resource: - !Join ['', ['arn:aws:s3:::', !Ref GuardDutyBucket]] Principal: Service: - guardduty.amazonaws.com - Sid: "Allow PutObject" Action: 's3:PutObject' Effect: "Allow" Resource: - !Join ['', ['arn:aws:s3:::', !Ref GuardDutyBucket,'/*']] Principal: Service: - guardduty.amazonaws.com - Sid: "Deny unencrypted object uploads" Action: 's3:PutObject' Effect: "Deny" Resource: - !Join ['', ['arn:aws:s3:::', !Ref GuardDutyBucket,'/*']] Principal: Service: - guardduty.amazonaws.com Condition: StringNotEquals: s3:x-amz-server-side-encryption: "aws:kms" - Sid: "Deny incorrect encryption header" Action: 's3:PutObject' Effect: "Deny" Resource: - !Join ['', ['arn:aws:s3:::', !Ref GuardDutyBucket,'/*']] Principal: Service: - guardduty.amazonaws.com Condition: StringNotEquals: s3:x-amz-server-side-encryption-aws-kms-key-id: !Sub "${KmsKey}" - Sid: "Deny non-HTTPS access" Action: 's3:*' Effect: "Deny" Resource: - !Sub "arn:aws:s3:::${BucketName}/*" Principal: "*" Condition: Bool: aws:SecureTransport: "false"
バケット名と KMS キーの ARN を指定してデプロイ。
aws cloudformation deploy \ --profile account_b \ --stack-name guardduty-bucket \ --template-file guardduty_s3.yaml \ --parameter-overrides BucketName=guardduty-bucket-name KmsKey=arn:aws:kms:ap-northeast-1:1111222233333:key/39d20b7b-621d-45d6-ab1e-5b4b8e09fd92
S3 へエクスポート
GuardDuty コンソールで操作する。
- 既存のバケット(別アカウント内)
- S3 バケットの ARN
- KMS キーの ARN

以上を全リージョンで繰り返す。
複数アカウント、複数リージョンからログが出力されていること。

ディスカッション
コメント一覧
まだ、コメントがありません