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容器共享。
有什么建议吗?
答案 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