在 AWS CodeBuild 中 运行 时,Boto3 使用什么凭证?
What credentials does Boto3 use when running in AWS CodeBuild?
所以我在 CodeBuild 中编写了一组部署脚本 运行 并使用 Boto3 将一些 dockerised 应用程序部署到 ECS。我遇到的问题是当我想部署到我们单独的生产帐户时。
如果我运行从开发帐户中创建 CodeBuild 项目但想在生产帐户中创建资源,我的理解是我应该在目标帐户中设置一个角色,允许代码构建角色承担它,然后调用:
sts_client.assume_role(
RoleArn=arn_of_a_role_I_set_up,
RoleSessionName=some_name
)
此 returns 访问密钥、秘密密钥和会话令牌。这行得通并且 returns 符合我的预期。
然后我要做的就是将这些值分配给这些环境变量:
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
这是因为根据此处的文档:http://boto3.readthedocs.io/en/latest/guide/configuration.html如果您没有在客户端或会话方法中显式设置这些变量,Boto3 应该遵循。
但是,当我这样做时,资源仍然在同一个开发帐户中创建。
此外,如果我在我的 buildspec.yml
的第一部分调用 printenv
,然后我的脚本尝试设置环境变量,那些 AWS key/secret/token 变量 aren完全不在场。
那么当它在 CodeBuild 中 运行ning 时,Boto3 从哪里获取其凭据?
解决方案是否只是将 key/secret/token 传递给每个 boto3.client()
调用以确保完全确定?
CodeBuild 环境中的凭据来自与您的 CodeBuild 项目关联的服务角色。 Boto 和 botocore 将自动使用“ContainerProvider”在 CodeBuild 环境中获取这些凭据。
所以我在 CodeBuild 中编写了一组部署脚本 运行 并使用 Boto3 将一些 dockerised 应用程序部署到 ECS。我遇到的问题是当我想部署到我们单独的生产帐户时。
如果我运行从开发帐户中创建 CodeBuild 项目但想在生产帐户中创建资源,我的理解是我应该在目标帐户中设置一个角色,允许代码构建角色承担它,然后调用:
sts_client.assume_role(
RoleArn=arn_of_a_role_I_set_up,
RoleSessionName=some_name
)
此 returns 访问密钥、秘密密钥和会话令牌。这行得通并且 returns 符合我的预期。
然后我要做的就是将这些值分配给这些环境变量:
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
这是因为根据此处的文档:http://boto3.readthedocs.io/en/latest/guide/configuration.html如果您没有在客户端或会话方法中显式设置这些变量,Boto3 应该遵循。
但是,当我这样做时,资源仍然在同一个开发帐户中创建。
此外,如果我在我的 buildspec.yml
的第一部分调用 printenv
,然后我的脚本尝试设置环境变量,那些 AWS key/secret/token 变量 aren完全不在场。
那么当它在 CodeBuild 中 运行ning 时,Boto3 从哪里获取其凭据?
解决方案是否只是将 key/secret/token 传递给每个 boto3.client()
调用以确保完全确定?
CodeBuild 环境中的凭据来自与您的 CodeBuild 项目关联的服务角色。 Boto 和 botocore 将自动使用“ContainerProvider”在 CodeBuild 环境中获取这些凭据。