本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon ECR 中的私有登錄檔身分驗證
您可以使用 AWS Management Console、 AWS CLI或 AWS SDKs來建立和管理私有儲存庫。您可以使用這些方法來在映像上執行部分動作,例如列清單或刪除。這些用戶端使用標準 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 登錄檔。若要取得身分驗證字符,您必須使用 GetAuthorizationToken API 操作,才能擷取包含使用者名稱 AWS
和編碼密碼的 base64 編碼授權字符。 AWS 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。如果是向多個登錄進行驗證,您必須針對每個登錄重複此命令。重要
若您收到錯誤,請安裝或升級至最新版本的 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
.dkr.ecr.aws_account_id
region
.amazonaws.com -
Get-ECRLoginCommand (AWS 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 授權標頭,curl並傳遞 get-authorization-token AWS CLI 命令提供的授權字符。
使用 Amazon ECR HTTP API 進行身分驗證
-
使用 擷取授權字符, AWS CLI 並將其設定為環境變數。
TOKEN=$(aws ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken')
-
將
$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"]}