

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

# Amazon ECR 中的私有登錄檔身分驗證
<a name="registry_auth"></a>

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

Docker CLI 不支援原生的 IAM 驗證方法。必須採取額外的步驟，Amazon ECR 才能驗證及授權 Docker 推送與提取請求。

下列各節詳述的登錄檔驗證方法可用。

## 使用 Amazon ECR 憑證協助程式
<a name="registry-auth-credential-helper-reg"></a>

Amazon ECR 提供 Docker 憑證協助程式，可在推送和提取映像至 Amazon ECR 時更容易儲存和使用 Docker 憑證。如要了解安裝和設定步驟，請參閱 [Amazon ECR Docker 憑證協助程式](https://github.com/awslabs/amazon-ecr-credential-helper)。

**注意**  
Amazon ECR Docker 憑證協助程式目前不支援多重要素驗證 (MFA)。

## 使用授權字符
<a name="registry-auth-token"></a>

授權字符的許可權範圍與用來擷取身分驗證字符之 IAM 委託人的許可範圍相符。身分驗證字符是用來存取 IAM 委託人有權存取且有效期為 12 小時的任何 Amazon ECR 登錄檔。若要取得身分驗證字符，您必須使用 [GetAuthorizationToken](https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_GetAuthorizationToken.html) 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](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。
  + [get-login-password](https://docs.aws.amazon.com/cli/latest/reference/ecr/get-login-password.html) (AWS CLI)

    ```
    aws ecr get-login-password --region {{region}} | docker login --username AWS --password-stdin {{{{aws_account_id}}}}.dkr.ecr.{{region}}.amazonaws.com
    ```
  + [Get-ECRLoginCommand](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ECRLoginCommand.html) (AWS Tools for Windows PowerShell)

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

## 使用 HTTP API 身分驗證
<a name="registry_auth_http"></a>

Amazon ECR 支援 [Docker 登錄檔 HTTP API](https://docs.docker.com/registry/spec/api/)。但是，因 Amazon ECR 為私有登錄檔，您必須使用每個 HTTP 請求來提供驗證字符。您可以使用 的 `-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')
   ```

1. 將 `$TOKEN` 變數傳遞到 **curl** 的 ` -H` 選項來向 API 驗證身分。例如，下列命令會列出在 Amazon ECR 儲存庫中的映像標籤。如需詳細資訊，請參閱 [Docker 登錄檔 HTTP API](https://docs.docker.com/registry/spec/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"]}
   ```