[小ネタ]Redshiftの監査ログ出力に必要なS3バケットポリシー

Redshiftクラスターの監査ログ出力時のS3バケットポリシーを設定してみました。

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、AWS事業本部のニシヤマです。はいマスキュラー。

Redshiftの監査ログをS3バケットに出力する際に必要なバケットポリシーの調べたのでご紹介します。

Amazon Redshiftでデータベース監査ログをS3に出力する

経緯

Redshiftの監査ログは、AWSコンソールのRedshiftの一覧画面からも簡単に設定ができます。

今回、Redshiftの監査ログを事前に作成済みのS3バケットに出力する必要があったのですが、そのままでは出力先に以下のエラーが出て指定することができませんでした。

解決方法

2023/07/05追記

本日時点でバケットポリシーのPrincipalにはAWSアカウントIDではなくサービスプリンシパル名を使用するのが推奨されていますので最新のバケットポリシーの設定は以下を参照してください。

https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/db-auditing.html#db-auditing-bucket-permissions

こちらのドキュメントにズバリの情報が書かれていました。こちらのバケットポリシーをS3に設定する必要がありました。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Put bucket policy needed for audit logging",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::<アカウントID>:user/logs"
			},
			"Action": "s3:PutObject",
			"Resource": "arn:aws:s3:::<S3バケット名>/*"
		},
		{
			"Sid": "Get bucket policy needed for audit logging ",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::<アカウントID>:user/logs"
			},
			"Action": "s3:GetBucketAcl",
			"Resource": "arn:aws:s3:::<S3バケット名>"
		}
	]
}

アカウントIDの部分にはリージョンごとに以下のアカウントID、S3バケット名に関しては監査ログ出力先のS3バケット名に置き換えてください。

リージョン名 リージョン アカウント ID
米国東部 (バージニア北部) リージョン us-east-1 193672423079
米国東部 (オハイオ) リージョン us-east-2 391106570357
米国西部 (北カリフォルニア) リージョン us-west-1 262260360010
米国西部 (オレゴン) リージョン us-west-2 902366379725
アジアパシフィック (香港) リージョン ap-east-1 313564881002
アジアパシフィック (ムンバイ) リージョン ap-south-1 865932855811
アジアパシフィック (大阪: ローカル) リージョン ap-northeast-3 090321488786
アジアパシフィック (ソウル) リージョン ap-northeast-2 760740231472
アジアパシフィック (シンガポール) リージョン ap-southeast-1 361669875840
アジアパシフィック (シドニー) リージョン ap-southeast-2 762762565011
アジアパシフィック (東京) リージョン ap-northeast-1 404641285394
カナダ (中部) リージョン ca-central-1 907379612154
欧州 (フランクフルト) リージョン eu-central-1 053454850223
欧州 (アイルランド) リージョン eu-west-1 210876761215
欧州 (ロンドン) リージョン eu-west-2 307160386991
EU (パリ) リージョン eu-west-3 915173422425
欧州 (ストックホルム) リージョン eu-north-1 729911121831
中東 (バーレーン) リージョン me-south-1 013126148197
南米 (サンパウロ) リージョン sa-east-1 075028567923

今回は出力先が東京リージョンのS3バケットだったので以下のバケットポリシーになりました。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Put bucket policy needed for audit logging",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::404641285394:user/logs"
			},
			"Action": "s3:PutObject",
			"Resource": "arn:aws:s3:::<S3バケット名>/*"
		},
		{
			"Sid": "Get bucket policy needed for audit logging ",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::404641285394:user/logs"
			},
			"Action": "s3:GetBucketAcl",
			"Resource": "arn:aws:s3:::<S3バケット名>"
		}
	]
}

こちらのポリシーをS3バケットのバケットポリシーの画面で設定します。

こちらのポリシーを設定することによりRedshiftの監査ログの出力設定が可能になります。設定後はS3バケットにテストファイルが出力されていれば完了です!

また、複数のRedshiftクラスターの監査ログの出力先が同じ場合などには、出力設定時にS3キープレフィックスを変えることでS3バケット内にフォルダが作成されるのでクラスターごとのログを区別することも可能です!

おわりに

新規にバケットポリシーを作成する場合は、S3バケットの作成と一緒にバケットポリシーも設定してくるのですが、既存のS3バケットの場合は注意する点も多いですね。この記事がどなたかのお役に立てば幸いです。