AWS CDK で Cross-Region CodePipeline デプロイ時に発生した KMS の…
AWS CDK で Cross-Region CodePipeline デプロイ時に発生した KMS の "Invalid Principal" エラーとその解決方法
発生したエラー
AWS CDK を使用して、 ** で CodePipeline を実行し、**
** にデプロイ** する構成を構築しました。
しかし、デプロイ実行時に AWS::KMS::Key
の作成で以下のエラーが発生しました。
depploy-pipeline-stack-support-us-east-2 | CREATE_FAILED | AWS::KMS::Key | cross-region-stack-522814699203:us-east-2/Default/CrossRegionCodePipelineReplicationBucketEncryptionKey
Resource handler returned message: "Policy contains a statement with one or more invalid principals."
エラーの原因
デプロイ先 (us-east-2
) の AWS::KMS::Key
のポリシーに ``** の CodePipeline の IAM ロールが含まれていなかった** ことが原因でした。
CDK は bootstrap
を実行することで、クロスリージョン用の KMS キー、S3 バケット、IAM ロール などを作成します。
しかし、 ** で **
** を実行していなかったため、必要な KMS の設定が適用されず、エラーが発生** しました。
解決方法
** をデプロイ先 (**
) にも実行する
✅ 1. us-east-2
に cdk bootstrap
を適用することで、CodePipeline の IAM ロールが適切に設定され、KMS の Invalid Principal
エラーが解消されます。
cdk bootstrap aws://[PipelineアカウントID]/us-east-2
ポイント:
-
ap-northeast-1
でcdk bootstrap
を実行していても、デプロイ先 (**) でも **
** を実行する必要がある**。 -
cdk bootstrap
によって、デプロイ先の クロスリージョン S3 バケット、KMS キー、IAM ロール などが適切に作成される。
✅ 2. `` 実行後に確認すべきこと
1. S3 バケットが作成されているか確認
aws s3 ls s3://cdk-bootstrap-[PipelineアカウントID]-us-east-2
バケットが存在しない場合、cdk bootstrap
が us-east-2
に正しく適用されていない可能性があります。
2. KMS キーポリシーを確認
AWS マネジメントコンソールの KMS 設定を開き、以下のような Principal
がポリシーに含まれているか確認します。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[PipelineアカウントID]:role/cdk-hnb659fds-deploy-role"
},
"Action": "kms:Decrypt",
"Resource": "*"
}
3. IAM ロールの信頼関係を確認
IAM コンソールで cdk-hnb659fds-deploy-role-[デプロイ先アカウントID]-us-east-2
の 信頼関係 (Trust Policy) を確認し、以下が含まれているかチェック。
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[PipelineアカウントID]:role/cdk-hnb659fds-deploy-role"
},
"Action": "sts:AssumeRole"
}
まとめ
✅ ** を **
** で実行していなかったため、KMS の ** エラーが発生**\ ✅
を実行することで解決**
✅ ブートストラップ後、S3 バケット、KMS ポリシー、IAM ロールの信頼関係を確認し、CodePipeline を再実行
クロスリージョンの CodePipeline デプロイでは、両方のリージョンで `` を実行する必要がある ことを忘れずに! 🚀
Discussion