API Gateway のアクセスログを Firehose に直接送信する構成で CMK を使用する場合、kms 権限はどこに付与すればいいですか
困っていた内容
API Gateway のアクセスログの送信先として Amazon Data Firehose を直接指定しています。
Firehose ストリームにカスタマーマネージド KMS キー(SSE-CMK)を設定しており、PutRecord / PutRecordBatch の呼び出し元に kms:GenerateDataKey および kms:Decrypt を付与する必要があります。
この構成での呼び出し元となるプリンシパルが何か、また権限をどこに付与すればよいかが分かりません。
どう対応すればいいの?
呼び出し元となるプリンシパル
API Gateway のアクセスログを Firehose に直接送信する構成では、Firehose への PutRecord / PutRecordBatch の呼び出し元は AWSServiceRoleForAPIGateway というサービスリンクロールとなります。
ステージで Firehose アクセスログ記録を有効にすると、API Gateway はアカウントにサービスリンクロールを作成します (ロールがまだ存在しない場合)。このロールは AWSServiceRoleForAPIGateway という名前で、APIGatewayServiceRolePolicy マネージドポリシーがロールにアタッチされます。
権限をどこに付与すればよいか
Firehose ストリームに設定した CMK のキーポリシーに、AWSServiceRoleForAPIGateway の ARN を Principal として直接指定して kms:GenerateDataKey および kms:Decrypt を付与します。
指定する ARN のフォーマットは以下のとおりです。
arn:aws:iam::AWS_ACCOUNT_ID:role/aws-service-role/apigateway.amazonaws.com/AWSServiceRoleForAPIGateway
Firehose で SSE-CMK を使用するには、呼び出し元の IAM ポリシーと KMS キーポリシーの両方でこれらのアクションを許可する必要があります。
ただし、AWSServiceRoleForAPIGateway はサービスリンクロールであるため、アタッチされている IAM ポリシーはユーザー側で変更できません。
IAM ポリシーは変更できないため、KMS キーポリシーに直接権限を付与するようにご対応ください。
To successfully use CUSTOMER_MANAGED_CMK, both the caller's IAM policy and the KMS key policy must allow kms:GenerateDataKey and kms:Decrypt operations.
参考訳:
CUSTOMER_MANAGED_CMK を正常に使用するには、呼び出し元の IAM ポリシーと KMS キーポリシーの両方が kms:GenerateDataKey および kms:Decrypt オペレーションを許可する必要があります。
参考情報







