CodeBuild загрузить артефакт сборки на S3 с ACL - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть 2 AWS аккаунтов. Допустим, A и B.

Учетная запись A использует CodeBuild для создания и загрузки артефактов в корзину S3, принадлежащую B. Учетная запись B установила разрешение ACL для корзины, чтобы предоставить разрешения на запись для A.

Файл артефакта успешно загружен в корзину S3. Однако учетная запись B не имеет каких-либо разрешений на файл, поскольку файл принадлежит A.

Учетная запись A может изменить владельца, выполнив

aws s3api put-object-acl --bucket bucket-name --key key-name --acl bucket-owner-full-control

Но это нужно запустить вручную после каждой сборки из аккаунта. Как я могу предоставить разрешения учетной записи B с помощью процедуры CodeBuild? Или как учетная запись B может переопределить эту ошибку прав собственности.

CodeBuild запускается автоматически с помощью веб-хуков, и мой buildspe c такой:

 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'

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

CodeBuild изначально не поддерживает запись артефакта в другую учетную запись, поскольку не устанавливает надлежащий ACL для объекта кросс-учетной записи. По этой причине в документации CodePipeline вызываются следующие ограничения:

Действия между учетными записями не поддерживаются для следующих типов действий:

  • Jenkins действия по сборке
  • действия по сборке или тестированию CodeBuild

https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create-cross-account.html

Один из способов - включить ACL сам артефакт в CodeBuild:

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
0 голосов
/ 07 февраля 2020

Я сделал это, используя aws команды cli на этапе сборки.

version: 0.2
phases:
  build:
    commands:
      - mvn install...
      - aws s3 cp my-file s3://bucketName --acl bucket-owner-full-control

Я использую фазу сборки, так как post_build будет выполняться, даже если сборка не удалась.

edit: обновленный ответ с образцом.

...