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