Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services CodeBuild使用ACL将构建工件上载到S3_Amazon Web Services_Amazon S3_Acl_Aws Codebuild - Fatal编程技术网

Amazon web services CodeBuild使用ACL将构建工件上载到S3

Amazon web services CodeBuild使用ACL将构建工件上载到S3,amazon-web-services,amazon-s3,acl,aws-codebuild,Amazon Web Services,Amazon S3,Acl,Aws Codebuild,我有两个AWS账户。比如说A和B 帐户A使用CodeBuild生成工件并将其上载到B拥有的S3存储桶。B帐户已为该存储桶设置ACL权限,以便将写入权限授予A 工件文件已成功上载到S3存储桶。但是,B帐户对该文件没有任何权限,因为该文件归A所有 帐户A可以通过运行 aws s3api put-object-acl --bucket bucket-name --key key-name --acl bucket-owner-full-control 但这必须在每次从帐户生成后手动运行。如何通过代码

我有两个AWS账户。比如说A和B

帐户A使用CodeBuild生成工件并将其上载到B拥有的S3存储桶。B帐户已为该存储桶设置ACL权限,以便将写入权限授予A

工件文件已成功上载到S3存储桶。但是,B帐户对该文件没有任何权限,因为该文件归A所有

帐户A可以通过运行

aws s3api put-object-acl --bucket bucket-name --key key-name --acl bucket-owner-full-control
但这必须在每次从帐户生成后手动运行。如何通过代码构建过程向帐户B授予权限?或者帐户B如何覆盖此所有权权限错误

代码构建会自动从web挂钩开始,我的构建规范如下:

 version: 0.2
 env:
 phases:
  install:
    runtime-versions:
      java: openjdk8
    commands:
      - echo Entered the install phase...
  build:
    commands:
      - echo Entered the build phase...
  post_build:
    commands:
      - echo Entered the post_build phase...
artifacts:
  files:
    - 'myFile.txt'

我是在构建阶段使用aws cli命令完成的

version: 0.2
phases:
  build:
    commands:
      - mvn install...
      - aws s3 cp my-file s3://bucketName --acl bucket-owner-full-control
我正在使用构建阶段,因为即使构建不成功,也会执行post_构建


编辑:使用示例更新了答案。

我在构建阶段使用aws cli命令完成了编辑

version: 0.2
phases:
  build:
    commands:
      - mvn install...
      - aws s3 cp my-file s3://bucketName --acl bucket-owner-full-control
我正在使用构建阶段,因为即使构建不成功,也会执行post_构建


编辑:使用示例更新答案。

CodeBuild本机不支持将工件写入其他帐户,因为它没有在跨帐户对象上设置正确的ACL。这就是在CodePipeline文档中调用以下限制的原因:

以下操作类型不支持跨帐户操作:

  • 詹金斯建立行动
  • 代码构建或测试操作

一种解决方法是在代码构建中自己设置工件上的ACL:

version: 0.2
phases:
  post_build:
    commands:
      - aws s3api list-objects --bucket testingbucket --prefix CFNtest/OutputArti >> $CODEBUILD_SRC_DIR/objects.json
      - |
        for i in $(jq -r '.Contents[]|.Key' $CODEBUILD_SRC_DIR/objects.json); do
          echo $i
          aws s3api put-object-acl --bucket testingbucket --key $i --acl bucket-owner-full-control
        done

CodeBuild本机不支持将工件写入其他帐户,因为它没有在跨帐户对象上设置正确的ACL。这就是在CodePipeline文档中调用以下限制的原因:

以下操作类型不支持跨帐户操作:

  • 詹金斯建立行动
  • 代码构建或测试操作

一种解决方法是在代码构建中自己设置工件上的ACL:

version: 0.2
phases:
  post_build:
    commands:
      - aws s3api list-objects --bucket testingbucket --prefix CFNtest/OutputArti >> $CODEBUILD_SRC_DIR/objects.json
      - |
        for i in $(jq -r '.Contents[]|.Key' $CODEBUILD_SRC_DIR/objects.json); do
          echo $i
          aws s3api put-object-acl --bucket testingbucket --key $i --acl bucket-owner-full-control
        done

谢谢最后我做了类似的事情。然而,在我的情况下,我必须在每次新构建时上传一个新的工件。因此,我必须找到一种方法,用正确的ACL上传工件。我认为上面的解决方案,只是改变了ACL。后期构建发生在工件上传步骤之前。谢谢。最后我做了类似的事情。然而,在我的情况下,我必须在每次新构建时上传一个新的工件。因此,我必须找到一种方法,用正确的ACL上传工件。我认为上面的解决方案,只是改变了ACL。后期构建发生在工件上传步骤之前。