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

はじめに

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

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

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

経緯

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

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

解決方法

こちらのドキュメントにズバリの情報が書かれていました。こちらのバケットポリシーを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バケットの場合は注意する点も多いですね。この記事がどなたかのお役に立てば幸いです。