私有登錄檔身分驗證 - Amazon ECR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

私有登錄檔身分驗證

您可以使用 AWS Management Console AWS CLI、或 AWS SDK 來建立和管理私有存放庫。您可以使用這些方法來在映像上執行部分動作,例如列清單或刪除。這些用戶端使用標準 AWS 驗證方法。即使您可以使用 Amazon ECR API 推送並提取映像,您仍較有可能使用 Docker CLI 或依語言而定的 Docker 資料庫。

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 登錄檔。若要取得授權權杖,您必須使用 GetAuthorizationTokenAPI 作業擷取包含使用者名稱AWS和編碼密碼的 base64 編碼授權權杖。該 AWS CLI get-login-password命令通過檢索並解碼授權令牌來簡化此操作,然後您可以將其傳輸到docker login命令中進行身份驗證。

若要使用 CLI 向 Amazon ECR 私有登錄檔驗證 Docker

若要使用向 Amazon ECR 登錄驗證碼頭視窗 get-login-password,請執行命令。aws ecr get-login-password將身分驗證字符傳遞給 docker login 命令時,使用 AWS 的值作為使用者名稱並指定您要驗證的 Amazon ECR 登錄檔 URI。如果是向多個登錄進行驗證,您必須針對每個登錄重複此命令。

重要

若您收到錯誤,請安裝或升級至最新版本的 AWS CLI。如需詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝 AWS Command Line Interface

  • get-login-password (AWS CLI)

    aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
  • 取得 ECR () LoginCommandAWS Tools for Windows PowerShell

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

使用 HTTP API 身分驗證

Amazon ECR 支援 Docker 登錄檔 HTTP API。但是,因 Amazon ECR 為私有登錄檔,您必須使用每個 HTTP 請求來提供驗證字符。您可以使用 for -H 選項新增 HTTP 授權標頭,curl並傳遞命get-authorization-token AWS CLI 令提供的授權權杖。

使用 Amazon ECR HTTP API 進行身分驗證
  1. 使用擷取授權權杖, AWS CLI 並將其設定為環境變數。

    TOKEN=$(aws ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken')
  2. $TOKEN 變數傳遞到 curl-H 選項來向 API 驗證身分。例如,下列命令會列出在 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"]}