本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon ECR 中的私有注册表身份验证
可以使用 Amazon Web Services Management Console、Amazon CLI 或 Amazon 开发工具包来创建和管理私有存储库。也可以使用这些方法对镜像执行某些操作,例如列出或删除镜像。这些客户端使用标准 Amazon 身份验证方法。尽管在技术上可以使用 Amazon ECR API 推送和提取镜像,但您更有可能使用 Docker CLI 或特定语言的 Dockerf 库。
Docker CLI 不支持本机 IAM 身份验证方法。必须执行其他步骤, 以便 Amazon ECR 可以对 Docker 推送和提取请求进行身份验证和授权。
我们提供以下各节详细介绍的注册表身份验证方法。
使用 Amazon ECR 凭证辅助程序
Amazon ECR 提供了 Docker 凭证辅助程序,这使得在 Amazon ECR 中推送和提取镜像时更容易存储和使用 Docker 凭证。有关安装和配置步骤,请参阅 Amazon ECR Docker 凭证辅助程序
注意
目前,Amazon ECR Docker 凭证助手不支持多重身份验证 (MFA)。
使用授权令牌
授权令牌的权限范围与用于检索身份验证令牌的 IAM 委托人的权限范围相匹配。身份验证令牌用于访问您的 IAM 委托人有权访问且有效期为 12 小时的任何 Amazon ECR 注册表。要获得授权令牌,您必须使用 GetAuthorizationToken API 操作来检索包含用户名 AWS
和编码密码的 base64 编码授权令牌。该 Amazon CLI get-login-password
命令可以通过检索和解码授权令牌来简化此操作,然后您可以将授权令牌传送到 docker
login 命令中进行身份验证。
使用 get-login 针对 Amazon ECR 私有注册表验证 Docker
要使用 get-login-password 针对 Amazon ECR 注册表验证 Docker,请运行 aws ecr get-login-password 命令。将身份验证令牌传递给 docker login 命令时,将值
AWS
用作用户名,并指定要对其进行身份验证的 Amazon ECR 注册表 URI。如果对多个注册表进行身份验证,则必须针对每个注册表重复该命令。重要
如果收到错误,请安装或更新到最新版本的 Amazon CLI。有关更多信息,请参阅Amazon Command Line Interface《用户指南》中的安装 Amazon Command Line Interface。
-
get-login-password (Amazon CLI)
aws ecr get-login-password --region
region
| docker login --username AWS --password-stdin
.dkr.ecr.aws_account_id
region
.amazonaws.com -
Get-ECRLoginCommand (Amazon Tools for Windows PowerShell)
(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin
.dkr.ecr.aws_account_id
region
.amazonaws.com
-
使用 HTTP API 身份验证
Amazon ECR 支持 Docker 注册表 HTTP API-H
选项来添加 HTTP 授权标头,以传递由 get-authorization-token Amazon CLI 命令提供的授权令牌。
使用 Amazon ECR HTTP API 进行身份验证
-
使用 Amazon CLI 检索授权令牌并将其设置为环境变量。
TOKEN=$(aws ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken')
-
要向 API 进行身份验证,可将
$TOKEN
变量传递到 curl 命令的-H
选项。例如,以下命令会列出 Amazon ECR 存储库中的镜像标签。有关更多信息,请参阅 Docker 注册表 HTTP API参考文档。 curl -i -H "Authorization: Basic $TOKEN" https://
aws_account_id
.dkr.ecr.region
.amazonaws.com/v2/amazonlinux
/tags/list您可以在一个 (扩展) 代码行中执行所有这些操作:
HTTP/1.1 200 OK Content-Type: text/plain; charset=utf-8 Date: Thu, 04 Jan 2018 16:06:59 GMT Docker-Distribution-Api-Version: registry/2.0 Content-Length: 50 Connection: keep-alive {"name":"amazonlinux","tags":["2017.09","latest"]}