私有注册表验证 - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

私有注册表验证

您可以将Amazon Web Services Management Console,Amazon CLI,或Amazon软件开发工具包,用于创建和管理私有存储库。也可以使用这些方法对映像执行某些操作,例如列出或删除映像。这些客户端使用标准 Amazon 身份验证方法。尽管您可以使用 Amazon ECR API 推送和拉取映像,但您更有可能使用 Docker CLI 或特定语言的 Docker 库。

Docker CLI 不支持本机 IAM 身份验证方法。必须执行其他步骤,以便 Amazon ECR 可以对 Docker 推送和拉取请求进行身份验证和授权。

这些注册表身份验证方法将在以下各节详细介绍。

使用亚马逊 ECR 凭据帮助程序

Amazon ECR 提供了 Docker 凭据辅助程序,这使得在推送和拉取映像时更容易存储和使用 Docker 凭据。有关安装和配置步骤,请参阅 Amazon ECR Docker 凭据辅助程序

使用授权令牌

授权令牌的权限范围与用于检索身份验证令牌的 IAM 委托人的权限范围相匹配。身份验证令牌用于访问您的 IAM 委托人有权访问且有效期为 12 小时的任何 Amazon ECR 注册表。要获得授权令牌,您必须使用 GetAuthorizationToken API 操作来检索包含用户名 AWS 和编码密码的 base64 编码授权令牌。该 Amazon CLI get-login-password 命令可以通过检索和解码授权令牌来简化此操作,然后您可以将授权令牌传送到 docker login 命令中进行身份验证。

使用 get-login-password 针对 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 aws_account_id.dkr.ecr.region.amazonaws.com
  • Get-ECRLoginCommand (Amazon Tools for Windows PowerShell)

    (Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

使用 get-login 针对 Amazon ECR 私有注册表验证 Docker

使用Amazon CLI版本 1.17.10 之前的版本,get-login命令可用于向您的 Amazon ECR 注册表进行身份验证。可以使用 aws --version 命令查看 Amazon CLI 版本。

  1. 运行 aws ecr get-login 命令。以下示例适用于与创建请求的账户关联的默认注册表。要访问其他账户注册表,请使用 --registry-ids aws_account_id 选项。有关更多信息,请参阅 。获取登录中的Amazon CLI命令参考

    aws ecr get-login --region region --no-include-email

    生成的输出是docker login命令,此命令可用于对 Amazon ECR 镜像仓库验证 Docker 客户端。

    docker login -u AWS -p password https://aws_account_id.dkr.ecr.region.amazonaws.com
  2. docker login 命令复制并粘贴到终端,授权您的 Docker CLI 访问注册表。此命令提供一个授权令牌,此令牌在 12 小时内对指定注册表有效。

    注意

    如果使用的是 Windows PowerShell,复制并粘贴这样的长字符串将不起作用。请使用以下命令。

    Invoke-Expression -Command (Get-ECRLoginCommand -Region region).Command
    重要

    在您执行此 docker login 命令时,系统上的其他用户可以在进程列表 (ps -e) 显示中看到该命令字符串。由于 docker login 命令包含身份验证凭证,因此系统上的其他用户可按此方式查看凭证会带来风险。他们可能会使用凭证获取对您的存储库的推送和拉取访问权限。如果您不在安全系统上,则应使用上述的 ecr get-login-password 命令。

使用 HTTP API 身份验证

Amazon ECR 支持Docker 注册表 HTTP API。但是,由于 Amazon ECR 是私有镜像仓库,因此您必须为每个 HTTP 请求提供授权令牌。您可以通过使用 curl-H 选项来添加 HTTP 授权标头,以传递由 get-authorization-token Amazon CLI 命令提供的授权令牌。

使用 Amazon ECR HTTP API 进行身份验证

  1. 使用 Amazon CLI 检索授权令牌并将其设置为环境变量。

    TOKEN=$(aws ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken')
  2. 要向 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"]}