Kinesis Data Firehose クロスアカウントS3 への配信
概要
- 本記事は、AWS コンソールを利用したKinesis Data Firehose を作成時の注意事項です。Kinesis Data Firehose のDestination に「S3」を選択し、S3 bucketにバケットを指定します。以下の画面となります。
- 上記S3 bucket の指定に、クロスアカウントのS3 を指定した場合、"This S3 bucket doesn’t exist." のエラーとなります。AWSコンソールは、クロスアカウントのS3 を設定することができません。
Kinesis Data Firehose にクロスアカウントのS3 を指定する
- Terraform を利用して、Kinesis Data Firehose を作成します。本記事では、Terraform を利用したデプロイ方法は省略します。Terraform のドキュメントを参照ください。
- Kinesis Data Firehose にクロスアカウントのS3 を指定する場合に、ハマるポイントが2箇所あります。
- 1つ目は、Kinesis Data Firehose に設定するIAM Role は、ポリシーのAction に “s3:PutObjectAcl" が必要となります。
- 2つ目は、Destination に設定するクロスアカウントのS3 にバケットポリシーを設定します。
- Kinesis Data Firehose があるアカウント番号、IAM Role名を指定します。
- こちらもAction に “s3:PutObjectAcl" が必要となります。
{
"Version": "2012-10-17",
"Id": "PolicyID",
"Statement": [
{
"Sid": "StmtID",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::accountA-id:role/iam-role-name"
},
"Action": [
"s3:AbortMultipartUpload",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"
]
}
]
}
Destination error logs にAccess was denied検出
- Kinesis Data Firehose のDestination error logs に下記のエラーメッセージが出力された場合は、Kinesis Data Firehose に設定するIAM Role あるいはS3 のバケットポリシーに不足があります。再度、ポリシーのAction に “s3:PutObjectAcl" が設定されていることを確認下さい。
Access was denied. Ensure that the trust policy for the provided IAM role allows Firehose to assume the role, and the access policy allows access to the S3 bucket.
- Kinesis Data Firehose のDestination error logs は、Kinesis Data Firehose のコンソール or CloudWatch Logs から確認可能です。