

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

# 受管簽署
<a name="managed-signing"></a>

將映像推送至 Amazon ECR 時，Amazon ECR 受管簽署會使用 [AWS Signer](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html) 產生密碼編譯簽章，以自動簽署您的容器映像。這不需要安裝和設定用戶端工具，並可讓您集中管理做為登錄組態的簽署。

## 先決條件
<a name="managed-signing-prerequisites"></a>

若要設定受管簽署，您可以使用參考一或多個簽署者簽署描述檔的 Amazon ECR 建立簽署組態，並選擇性地建立儲存庫篩選條件，以限制哪些儲存庫應簽署其映像。設定完成後，Amazon ECR 受管簽署會使用推送映像的實體身分，在推送映像時自動簽署映像。

您必須先具備下列項目，才能設定受管簽署：
+ **簽署者簽署設定檔** — 建立至少一個簽署者[簽署設定檔](https://docs.aws.amazon.com/signer/latest/developerguide/signing-profiles.html)。簽署設定檔是獨特的 AWS 簽署者資源，可用於在 Amazon ECR 中執行簽署操作。簽署設定檔可讓您簽署和驗證程式碼成品，例如容器映像和 AWS Lambda 部署套件。每個簽署設定檔都會指定要簽署的簽署平台、平台 ID 和其他平台特定資訊。例如，簽署設定檔 ARN 看起來像這樣：`arn:partition:signer:region:account-id:/signing-profiles/profile-name`。
+ **IAM 許可** — 推送映像的 IAM 主體必須具有必要的 IAM 許可，才能存取相關的簽署者簽署設定檔和相關的 ECR 儲存庫。您需要修改 IAM 主體的身分型政策，以包含 ECR 儲存庫操作和簽署者簽署操作的許可。下列範例政策顯示必要的許可：

```
{
   "Version": "2012-10-17",		 	 	 
   "Statement": [
   {
       "Sid":"UploadSignaturePermissions",
       "Effect":"Allow",
       "Action":[
           "ecr:CompleteLayerUpload",
           "ecr:UploadLayerPart",
           "ecr:InitiateLayerUpload",
           "ecr:BatchCheckLayerAvailability",
           "ecr:PutImage"
       ],
       "Resource":"arn:aws:ecr:region:account-id:repository/repository-name"
   },
   {
       "Sid": "SignPermissions",
       "Effect": "Allow",
       "Action": [
           "signer:SignPayload"
       ],
       "Resource": "arn:aws:signer:region:account-id:/signing-profiles/signing-profile-name"
   }
   ]
}
```

透過 Amazon ECR 受管簽署，您可以建立多個簽署規則 （每個登錄檔最多 10 個），以建立更強大的安全界限。例如，您可能會執行多個建置管道，並想要限制每個管道可以簽署的儲存庫。在每個規則中，您可以設定簽署設定檔並指定儲存庫名稱篩選條件。推送新映像時，Amazon ECR 會比對哪些簽署規則和簽署設定檔可以簽署映像。如果有多個相符項目，Amazon ECR 會產生多個簽章。

**注意**  
如果您手動驗證簽章，您仍然需要安裝 Notation CLI。

**注意**  
Amazon ECR 受管簽署可在使用 AWS Signer 進行容器映像簽署的所有 AWS 區域中使用。

## 開始使用
<a name="managed-signing-getting-started"></a>

請依照下列步驟設定受管簽署。您向 Amazon ECR 提供簽署者簽署描述檔的參考，以及選擇性地限制哪些儲存庫應該簽署其映像的篩選條件。

------
#### [ AWS 管理主控台 ]

使用下列步驟，使用 設定受管簽署 AWS 管理主控台。

1. 開啟 [ Amazon ECR 主控台](https://console.aws.amazon.com/ecr/private-registry/repositories)。在左側導覽窗格中，選取**私有登錄**檔、**功能和設定**、**受管簽署**。

1. 在**簽署規則**頁面上，選取**建立規則**。

1. 在**簽署設定檔**頁面的**選取 AWS 簽署者設定檔**下，選擇**建立新 AWS 簽署者設定檔**、輸入**設定檔名稱**，以及選擇性地變更**簽署有效期間**。然後選取**下一步**。

1. 在**篩選條件**頁面的**選取儲存庫**下，輸入**儲存庫名稱篩選條件**。然後選取**下一步**。

1. 在**檢閱和建立**頁面上，驗證您已輸入的**AWS 簽署者描述**檔和**儲存庫名稱篩選條件**。如果一切看起來都正確，請選取**儲存**。

------
#### [ AWS CLI ]

使用下列 AWS CLI 命令來設定受管簽署。
+ **建立簽署規則**

  使用簽署設定檔 ARN 建立簽署組態。使用下列內容建立檔案：

  ```
  {
      "rules": [ 
          { 
              "signingProfileArn": "arn:aws:signer:region:account-id:/signing-profiles/profile-name",
              "repositoryFilters": [ 
                  { 
                      "filter": "test*",
                      "filterType": "WILDCARD_MATCH"
                  }
              ]
          }
      ]
  }
  ```

  然後執行以下命令：

  ```
  aws ecr --region region \
      put-signing-configuration \
      --signing-configuration file://signing-config.json
  ```

  您應該會看到包含簽署組態的 API 回應。
+ **檢視您的簽署組態**

  擷取您的簽署組態：

  ```
  aws ecr --region region \
      get-signing-configuration
  ```

  您應該會看到包含簽署組態的 API 回應。
+ **檢查映像簽署狀態**

  將映像推送到您的儲存庫。例如：

  ```
  docker pull ubuntu
  
  IMAGE_NAME="account-id.dkr.ecr.region.amazonaws.com/repository-name"
  IMAGE_TAG="${IMAGE_NAME}:test-1"
  
  docker tag ubuntu $IMAGE_TAG
  docker push $IMAGE_TAG
  ```

  推送之後，請使用映像標籤來檢查簽署狀態：

  ```
  aws ecr --region region \
      describe-image-signing-status \
      --repository-name repository-name \
      --image-id imageTag=test-1
  ```

  如果儲存庫名稱與簽署組態中定義的儲存庫篩選條件相符，您應該會在 API 回應中看到簽署狀態。如果狀態成功，您應該會看到簽章推送到您的儲存庫。
+ **刪除您的簽署組態**

  刪除您的簽署組態：

  ```
  aws ecr --region region \
      delete-signing-configuration
  ```

  您應該會看到 API 回應，其中包含已刪除的簽署組態。

------

## 考量事項
<a name="managed-signing-considerations"></a>

下列限制和功能適用於受管簽署：
+ **不支援跨區域簽署** — 簽署設定檔必須與 Amazon ECR 登錄檔位於相同的區域。您不能使用某個區域的簽署設定檔來簽署位於不同區域的登錄檔中的影像。
+ **支援跨帳戶簽署** — 簽署設定檔可以在與您的 Amazon ECR 登錄檔不同的帳戶中。這可讓組織集中管理簽署設定檔，同時允許其他帳戶中的開發人員使用這些設定檔。如需詳細資訊，請參閱《 *AWS Signer 開發人員指南*》中的[設定 Signer 的跨帳戶簽署](https://docs.aws.amazon.com/signer/latest/developerguide/signing-profile-cross-account.html)。
+ **無法簽署簽章** — 您無法自行簽署簽章。只能簽署容器映像。