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 凭证签署其 AWS API 请求,并且此功能提供了一种管理凭证的策略以供您的应用程序使用,类似于 Amazon EC2 实例配置文件向 EC2 实例提供凭证的方式。您可以将 IAM 角色与 ECS 任务定义或 RunTask API 操作相关联,而不是创建 AWS 凭证并将其分发到容器或使用 EC2 实例的角色。然后,任务容器中的应用程序可以使用 AWS 开发工具包或 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
自动 ECR 登录