1

別のアカウント 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
4

4 に答える 4

-1

CloudFormation は、パイプラインのアーティファクト ストア定義で提供される KMS 暗号化キーを使用する必要があります: https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_ArtifactStore.html#CodePipeline-Type-ArtifactStore-encryptionKey

したがって、そこでカスタムキーを指定し、他のアカウントでもそのキーを使用できるようにする限り、機能するはずです。

これは主にこのドキュメントで説明されています: https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create-cross-account.html

于 2019-01-15T00:24:15.237 に答える