【问题标题】:access ecr images from within jenkins docker ecs container从 jenkins docker ecs 容器中访问 ecr 图像
【发布时间】:2019-05-28 07:14:02
【问题描述】:

你好 Jenkins / Docker 专家 -

有效的东西:

使用建议的方法here,我能够让 Jenkins docker 映像在 AWS ECS 集群中运行。为 docker socket (/var/run/docker.sock) 和 docker (/usr/bin/docker) 使用 -v 卷挂载,我也可以从 Jenkins 容器内部访问 docker 进程。

不是的东西:

我面临的最后一个问题是从 AWS ECR Registry 拉取/推送图像。当我尝试执行 docker pull / push 命令时,我得到了 - no basic auth credentials

我偶然发现了这个link explaining my problem。但是,我无法使用此处建议的解决方案,因为主机中没有 ~/.docker/config.json 可以与 Jenkins docker 容器共享。

有什么建议吗?

【问题讨论】:

    标签: docker jenkins amazon-ecs amazon-ecr


    【解决方案1】:

    Amazon ECR 用户需要权限才能调用 ecr:GetAuthorizationToken 在他们可以向注册表进行身份验证并推送或拉取任何图像之前 来自任何 Amazon ECR 存储库。 Amazon ECR 提供了多种托管 在不同级别控制用户访问的策略;更多 信息见ecr_managed_policies

    AmazonEC2ContainerRegistryPowerUser

    此托管策略允许高级用户访问 Amazon ECR,它允许对存储库进行读写访问,但不允许用户删除存储库或更改应用到它们的策略文档。

    {
        "Version": "2012-10-17",
        "Statement": [{
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetRepositoryPolicy",
                "ecr:DescribeRepositories",
                "ecr:ListImages",
                "ecr:DescribeImages",
                "ecr:BatchGetImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:PutImage"
            ],
            "Resource": "*"
        }]
    }
    

    因此,不要使用 ~/.docker/config.json 这个,而是将上述策略角色分配给您的 ECS 任务,您的 docker 容器服务将能够从 ECR 推送拉取图像。

    任务的 IAM 角色

    使用 Amazon ECS 任务的 IAM 角色,您可以指定一个 IAM 角色 可以被任务中的容器使用。申请必须签署他们的 AWS API 请求使用 AWS 凭证,此功能提供了一个 管理您的应用程序使用的凭据的策略, 类似于 Amazon EC2 实例配置文件提供的方式 EC2 实例的凭据。而不是创建和分发 您的 AWS 凭证到容器或使用 EC2 实例的 角色,您可以将 IAM 角色与 ECS 任务定义相关联,或者 RunTask API 操作。任务容器中的应用程序可以 然后使用 AWS 开发工具包或 CLI 向授权的 AWS 发出 API 请求 服务。

    将 IAM 角色用于任务的好处

    凭据隔离:容器只能检索以下凭据 在任务定义中定义的 IAM 角色 属于;容器永远无法访问预期的凭据 对于属于另一个任务的另一个容器。

    授权:未经授权的容器无法访问 IAM 角色 为其他任务定义的凭据。

    可审计性:可通过 CloudTrail 获得访问和事件日志记录 确保追溯审计。任务凭据的上下文为 taskArn 附加到会话,因此 CloudTrail 日志显示哪个 任务正在使用哪个角色。

    但您必须如上所述运行此命令才能获取身份验证令牌。

    eval $(aws ecr get-login --no-include-email)
    

    你会得到类似的回应

    登录成功

    现在,从 ECR 获取身份验证令牌后,您将推送图像。

    docker push xxxxxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/nodejs:test
    

    Automate ECR login

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 2016-05-30
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 2020-10-31
      • 2021-09-23
      相关资源
      最近更新 更多