viv*_*d4v 2 amazon-web-services amazon-iam aws-codepipeline aws-codebuild
在 CodeBuild 项目上配置的角色在运行时环境中运行良好,但在我们从容器内部运行命令时不起作用,它显示“无法找到凭据”。
让我知道我们如何在容器内开箱即用地使用角色。
您可以使用凭证源“EcsContainer”无缝承担角色,而无需在 buildspec.yml 中导出新凭证。
credential_source - 用于获取初始假定角色调用的凭据的凭据提供程序。此参数不能与 source_profile 一起提供。有效值为:
- 从环境变量中提取源凭据的环境。
- Ec2InstanceMetadata 使用 EC2 实例角色作为源凭证。
- EcsContainer 使用 ECS 容器凭据作为源凭据。
来自:https : //docs.aws.amazon.com/cli/latest/topic/config-vars.html
脚步:
第 0 步:创建一个新角色“arn:aws:iam::0000000000:role/RoleToBeAssumed”并附加所需的策略以提供您在构建期间运行的命令所需的权限。
步骤 1:将 sts:assumeRole 权限添加到您的 CodeBuild 服务角色。这是一个示例策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "sts:*",
"Resource": "arn:aws:iam::0000000000:role/RoleToBeAssumed"
}
]
}
Run Code Online (Sandbox Code Playgroud)
第 2 步:配置您的构建容器以使用凭证元数据作为承担角色的来源。这是一个构建规范示例:
version: 0.2
phases:
install:
runtime-versions:
nodejs: 8
commands:
- aws sts get-caller-identity
- mkdir ~/.aws/ && touch ~/.aws/config
- echo "[profile buildprofile]" > ~/.aws/config
- echo "role_arn = arn:aws:iam::0000000000:role/RoleToBeAssumed" >> ~/.aws/config
- echo "credential_source = EcsContainer" >> ~/.aws/config
- aws sts get-caller-identity --profile buildprofile
Run Code Online (Sandbox Code Playgroud)
如果您需要在构建环境中运行 Docker 容器,并且该容器需要 AWS 凭证,则必须将凭证从构建环境传递到容器。
docker run -e AWS_DEFAULT_REGION -e AWS_CONTAINER_CREDENTIALS_RELATIVE_URI your-image-tag aws s3 ls
Run Code Online (Sandbox Code Playgroud)
https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html#troubleshooting-versions
| 归档时间: |
|
| 查看次数: |
2137 次 |
| 最近记录: |