从jenkins docker ecs容器中访问ecr图像

时间:2019-01-01 03:06:44

标签: docker jenkins amazon-ecs amazon-ecr

Hello Jenkins / Docker专家-

有效的东西:

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

不是的东西

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分: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": "*"
    }]
}

因此,不要将上述策略角色分配给您的 ECS任务,而无需使用〜/ .docker / config.json,而您的Docker容器服务将能够从ECR推送提取图像。 / p>

IAM的任务角色

  

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

使用IAM角色执行任务的好处

  

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

     

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

     

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

但是您必须如上所述运行此命令以获取Auth令牌。

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

您将获得

之类的回复
  

登录成功

现在,一旦您从ECR获得身份验证令牌,就可以推送拉式图像。

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

Automate ECR login