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
的第一部分,那么这些 AWS 密钥/秘密/令牌变量根本不存在。buildspec.yml
那么当它在 CodeBuild 中运行时,Boto3 从哪里获取其凭据?解决方案是否只是将密钥/秘密/令牌传递给每个boto3.client()
呼叫以完全确定?
解决方案
CodeBuild 环境中的凭证来自与您的 CodeBuild 项目关联的服务角色。Boto 和 botocore 将自动使用“ ContainerProvider ”在 CodeBuild 环境中获取这些凭据。
推荐阅读
- untagged - 缺少必需的参数“event_type”(字符串)
- node.js - NodeJS路由在本地主机上工作但在服务器上不工作
- rest - 获取访问令牌抛出错误“请求正文必须包含以下参数:'grant_type'”
- ios - 如何使用swift将数据从一个以上的本地JSON文件加载到表格视图中的标签
- excel - 如果 3 列重复且 1 列为空白,则删除整行
- python - 如何在 Python 中将开始时间和结束时间拆分为多分钟的行间隔?
- javascript - 为什么以下代码在使用 URL.pathname 时没有按预期设置路径名?
- jquery - error_log 内容的 Ajax GET 在本地工作,但在服务器上返回 403
- jenkins - 从命令行提交 Jenkins 作业并获取作业状态
- javascript - 在不重新启动图像元素的情况下更改图像 src