こんにちは!技術2課、濱岡です。
最近、ものすごく暑いですが、皆様いかがお過ごしでしょうか?
私は暑くなると無性にカレーが食べたくなります。
しかもスパイシーなカレーが食べたくなる、、、暑さには変えられない、、、、
さて、今回はAmazon Redshiftの監査ログを別アカウントのS3へ設定する方法をやってみます。
どうやるの?
コンソール画面からだと自分のAWSアカウントのS3バケットしか選ぶごとができませんが、AWS CLIを利用すると別アカウントのS3を設定することができます。
以下の順序でやれば設定が可能です。
監査ログを送りたいS3バケットのバケットポリシーを編集
AWS CLIを利用して監査ログの送信先を設定
それではやってみます。
S3バケットのバケットポリシーを編集
以下のドキュメントにもありますがS3のバケットポリシーを書く必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Put bucket policy needed for audit logging", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountId:user/logs" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::BucketName/*" }, { "Sid": "Get bucket policy needed for audit logging ", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountID:user/logs" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::BucketName" } ] }
AccuuntIDはリージョンによって違うためドキュメントを参照して設定してください。
これだけだと権限が足りず設定できません。
ドキュメントには以下の記載があります。
s3:PutObject サービスは、ログをアップロードするため、put object のアクセス許可が必要です。また、ログ記録を有効にする IAM ユーザーまたは IAM ロールには、Amazon S3 バケットへの s3:PutObject アクセス許可を持っている必要があります。ログがアップロードされるたびに、サービスは現在のバケット所有者がログ作成に有効になったときのバケット所有者と一致するかどうかを判定します。これらの所有者が一致しない場合は、エラーが発生します。
今回は別アカウントのRedshiftのログ記録を有効にするIAMユーザに対して権限が必要なため、以下のバケットポリシーを書く必要があります。
{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountID:user/IAMUserName" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::BucketName/*" }
こちらの設定も追記しましたらS3バケットのバケットポリシーの設定は完了です。
AWS CLIを利用して監査ログの送信先を設定
以下コマンドを実行すれば設定は完了です。
aws redshift enable-logging \ --cluster-identifier ClusterName \ --bucket-name BucketName \ --s3-key-prefix "Prefix" \
まとめ
Redshiftの監査ログを別アカウントのS3バケットに設定してみました!
皆様の参考になれば幸いです。