

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

# 托管签名
<a name="managed-signing"></a>

当图像推送到 Amazon ECR 时，Amazon ECR 托管签名会使用签名器生成加密签名，从而自动对您的容[AWS 器](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 者进行容器镜像签名的 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 创建签名配置。使用以下内容创建 JSON 文件：

  ```
  {
      "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 开发者*指南中的[为签名者设置跨账户签名](https://docs.aws.amazon.com/signer/latest/developerguide/signing-profile-cross-account.html)。
+ **签名无法签**名-您不能自己签署签名。只能对容器镜像进行签名。