Построение кода с использованием SAM CLI Cross Account S3 - PullRequest
0 голосов
/ 03 октября 2019

У меня есть настройка нескольких учетных записей в моей текущей компании. Я использую CodeBuild в учетной записи B, я запускаю buildspec, который загружает преобразованный шаблон sam в корзину s3 в учетной записи A. Таким образом, пакет Cloudformation загружает сборку кода sam в «account-a-bucket». Задание успешно загружает преобразованный шаблон, как определено в разделе артефактов, в корзину в учетной записи B. Проблема возникает при попытке развернуть шаблон в учетной записи C. Поскольку codebuild создает артефакт лямбда-кода на этапе сборки и записывает объект введро за пределами счета. Когда вы посмотрите на фактический лямбда-артефакт, хранящийся в корзине, так что s3 :: // account-a-bucket / e309uofijokasjdfokajsllsk, вы увидите в разрешении объекта, что он не принадлежит ни одной учетной записи. Поэтому никто не может получить к нему доступ. Как заставить codebuild создать объект в другом сегменте учетной записи, чтобы он принадлежал учетной записи?

Кроме того, я уже настроил политику Bucket, чтобы предоставить доступ к account-a-bucket всемучетные записи в моей организации, а также канонические идентификаторы учетных записей для разрешений. Так что я точно знаю, что лямбда-артефакт создан без владельца канонического аккаунта, однако загруженный артефакт (в разделе артефактов buildspec) создается под каноническим идентификатором аккаунта.

Я знаю, что вы можетеиспользуйте, если, например, я загружал в фазе сборки, используя

aws s3api copy-object --bucket destination_awsexammplebucket --key source_awsexamplebucket / myobject --acl bucket-owner-owner-full-control

Я мог бы использовать --acl bucket-owner-full-control, но это не поддерживаемый флаг с пакетом облачной информации aws.

env:
  variables:
      RELEASE_NUMBER: ""
      MINOR_NUMBER: "value"

 phases:
  install:
    runtime-versions:
       docker: 18
  build:
    commands:
      - echo Building Release Version $RELEASE_NUMBER
      - pip install --user aws-sam-cli
      - USER_BASE_PATH=$(python -m site --user-base)
      - export PATH=$PATH:$USER_BASE_PATH/bin
      - sam build -t template.yaml
      - aws cloudformation package --template-file template.yaml --s3-bucket account-a-bucket --output-template-file TransformedTemplate.yaml

artifacts:
    files:
       - TransformedTemplate.yaml
    discard-paths: yes

1 Ответ

2 голосов
/ 04 октября 2019

У команды «aws cloudformation package» нет опции «--acl», которая является причиной проблемы, с которой вы столкнулись. Это открытый вопрос [1], но у него нет тяги.

Пока, я думаю, вы можете проанализировать ключ объекта S3 из TransformedTemplate.yaml, а затем выполнить следующую командув вашей сборочной спецификации для помещения ACL на объект S3:

$ aws s3api put-object-acl --bucket account-a-bucket --key keyname --acl bucket-owner-full-control

Для анализа файла json, jq, вероятно, лучшая утилита. Поскольку вы используете Yaml, yq [2], кажется, вариант, хотя я никогда не проверял его сам.

Ref:
[1] https://github.com/aws/aws-cli/issues/2681
[2] https://yq.readthedocs.io/en/latest/

...