【发布时间】:2020-02-02 01:44:34
【问题描述】:
我在当前公司有一个多帐户设置。我在账户 B 中使用 CodeBuild,我正在运行一个构建规范,将转换后的 sam 模板上传到账户 A 中的 s3 存储桶。因此,Cloudformation 包将代码的 sam 构建上传到“account-a-bucket”。该作业成功地将工件部分中定义的转换后的模板上传到账户 B 中的存储桶。尝试在账户 C 中部署模板时出现问题。因为 codebuild 在构建步骤中创建 lambda 代码工件并将对象写入帐户之外的存储桶。当您查看存储在存储桶中的实际 lambda 工件时,例如 s3:://account-a-bucket/e309uofijokasjdfokajsllsk ,您将在对象权限中看到它不属于任何帐户。因此没有人可以访问它。如何让 codebuild 在另一个帐户存储桶中创建对象,使其归一个帐户所有?
另外需要注意的是,我已经将存储桶策略配置为向我组织中的所有帐户授予对帐户存储桶的访问权限,此外还授予帐户的规范 ID 以获取权限。所以我知道一个事实是 lambda 工件是在没有规范帐户所有者的情况下创建的,但是上传的工件(在 buildspec 的工件部分中)是在帐户规范 ID 下创建的。
我知道你可以使用,例如我在构建阶段使用
aws s3api 复制对象 --bucket destination_awsexammplebucket --key source_awsexamplebucket/myobject --acl bucket-owner-full-control
我可以使用 --acl bucket-owner-full-control,但这不是 aws cloudformation 包支持的标志。
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
【问题讨论】:
标签: amazon-web-services amazon-s3 amazon-iam aws-codebuild aws-sam-cli