📖

AWS CDK で Cross-Region CodePipeline デプロイ時に発生した KMS の…

2025/03/06に公開

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-2cdk bootstrap を適用することで、CodePipeline の IAM ロールが適切に設定され、KMS の Invalid Principal エラーが解消されます。

cdk bootstrap aws://[PipelineアカウントID]/us-east-2

ポイント:

  • ap-northeast-1cdk bootstrap を実行していても、デプロイ先 (**) でも **** を実行する必要がある**。
  • cdk bootstrap によって、デプロイ先の クロスリージョン S3 バケット、KMS キー、IAM ロール などが適切に作成される。

✅ 2. `` 実行後に確認すべきこと

1. S3 バケットが作成されているか確認

aws s3 ls s3://cdk-bootstrap-[PipelineアカウントID]-us-east-2

バケットが存在しない場合、cdk bootstrapus-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