Kinesis Data Firehose クロスアカウントS3 への配信

AWS,Kinesis,S3,terraform

概要

  • 本記事は、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 から確認可能です。

 

参考資料

AWS,Kinesis,S3,terraform

Posted by takaaki