在AWS CodeBuild中运行时Boto3使用了哪些凭据?

时间:2018-05-18 08:40:21

标签: amazon-web-services boto3 aws-codebuild

所以我编写了一组在CodeBuild中运行的部署脚本,并使用Boto3将一些dockerised应用程序部署到ECS。我遇到的问题是当我想部署到我们的单独生产帐户时。

如果我从开发帐户运行CodeBuild项目但想要在生产帐户中创建资源,我的理解是我应该在目标帐户中设置一个角色,允许codebuild角色承担它,然后调用:

sts_client.assume_role( RoleArn=arn_of_a_role_I_set_up, RoleSessionName=some_name )

这将返回访问密钥,密钥和会话令牌。这可以起作用并返回我期望的内容。

然后我想要做的就是将这些值分配给这些环境变量: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN

这是因为根据此处的文档:http://boto3.readthedocs.io/en/latest/guide/configuration.html如果您没有在客户端或会话方法中显式设置这些变量,则Boto3应该遵循。

但是,当我这样做时,资源仍然在同一个开发帐户中创建。

此外,如果我在脚本尝试设置环境变量之前在printenv的第一部分中调用buildspec.yml,那么这些AWS键/机密/令牌变量不会出现在所有。

因此,当它在CodeBuild中运行时,Boto3从哪里获取其凭据? 解决方案是将密钥/秘密/令牌传递给每个boto3.client()调用以完全确定吗?

1 个答案:

答案 0 :(得分:1)

CodeBuild环境中的凭据来自与CodeBuild项目关联的服务角色。 Boto和botocore将使用" ContainerProvider"自动在CodeBuild环境中获取这些凭据。