別のアカウント DEV で CloudFormation を介してリソースをデプロイするアカウント CI で実行されているクロスアカウント パイプラインがあります。デプロイ後、アーティファクトの出力を JSON ファイルとして保存し、CodeBuild を介して別のパイプライン アクションでアクセスしたいと考えています。CodeBuild はフェーズ DOWNLOAD_SOURCE で失敗し、次のメッセージが表示されます。
CLIENT_ERROR: AccessDenied: Access Denied ステータスコード: 403、リクエスト ID: 123456789、ホスト ID: xxxxx/yyyy/zzzz/xxxx= プライマリソースおよびソースバージョン arn:aws:s3:::my-bucket/my-pipeline/DeployArti /XcUNqOP
問題は、CloudFormation が別のアカウントで実行されると、パイプライン自体とは異なるキーでアーティファクトを暗号化する可能性があります。
アーティファクトを暗号化するための明示的な KMS キーを CloudFormation に与えることは可能ですか、またはパイプラインでそれらのアーティファクトにアクセスする他の方法はありますか?
単一のアカウント内から実行すると、すべてが機能します。
これが私のコードスニペットです(CIアカウントにデプロイされています):
MyCodeBuild:
Type: AWS::CodeBuild::Project
Properties:
Artifacts:
Type: CODEPIPELINE
Environment: ...
Name: !Sub "my-codebuild"
ServiceRole: !Ref CodeBuildRole
EncryptionKey: !GetAtt KMSKey.Arn
Source:
Type: CODEPIPELINE
BuildSpec: ...
CrossAccountCodePipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
Name: "my-pipeline"
RoleArn: !GetAtt CodePipelineRole.Arn
Stages:
- Name: Source
...
- Name: StagingDev
Actions:
- Name: create-stack-in-DEV-account
InputArtifacts:
- Name: SourceArtifact
OutputArtifacts:
- Name: DeployArtifact
ActionTypeId:
Category: Deploy
Owner: AWS
Version: "1"
Provider: CloudFormation
Configuration:
StackName: "my-dev-stack"
ChangeSetName: !Sub "my-changeset"
ActionMode: CREATE_UPDATE
Capabilities: CAPABILITY_NAMED_IAM
# this is the artifact I want to access from the next action
# within this CI account pipeline
OutputFileName: "my-DEV-output.json"
TemplatePath: !Sub "SourceArtifact::stack/my-stack.yml"
RoleArn: !Sub "arn:aws:iam::${DevAccountId}:role/dev-cloudformation-role"
RoleArn: !Sub "arn:aws:iam::${DevAccountId}:role/dev-cross-account-role"
RunOrder: 1
- Name: process-DEV-outputs
InputArtifacts:
- Name: DeployArtifact
ActionTypeId:
Category: Build
Owner: AWS
Version: "1"
Provider: CodeBuild
Configuration:
ProjectName: !Ref MyCodeBuild
RunOrder: 2
ArtifactStore:
Type: S3
Location: !Ref S3ArtifactBucket
EncryptionKey:
Id: !GetAtt KMSKey.Arn
Type: KMS