在 Docker 容器内传递 AWS CodeBuild IAM 角色 [无法找到凭证]

viv*_*d4v 2 amazon-web-services amazon-iam aws-codepipeline aws-codebuild

在 CodeBuild 项目上配置的角色在运行时环境中运行良好,但在我们从容器内部运行命令时不起作用,它显示“无法找到凭据”。
让我知道我们如何在容器内开箱即用地使用角色。

sha*_*aws 5

您可以使用凭证源“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)


Moh*_*rei 5

如果您需要在构建环境中运行 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