

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

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

当图像推送到 Amazon ECR [ 时，Amazon ECR 管理签名通过使用 ](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html)AWS Signer 生成加密签名来自动对您的容器镜像进行签名。这样就无需安装和配置客户端工具，并允许您集中管理作为注册表配置的签名。

## 先决条件
<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. 打开[亚马逊 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>

以下限制和功能适用于托管签名：
+ **Cross-region 不支持签名 **-签名配置文件必须与您的 Amazon ECR 注册表位于同一区域。您不能使用一个地区的签名配置文件对位于不同区域的注册表中的图像进行签名。
+ **Cross-account 支持签名 ** — 签名配置文件可以与您的 Amazon ECR 注册表位于不同的账户中。这使组织能够集中管理签名配置文件，同时允许其他账户的开发人员使用它们。有关更多信息，请参阅《*AWS Signer 开发者指南》[中的 “为 Signer ](https://docs.aws.amazon.com/signer/latest/developerguide/signing-profile-cross-account.html) 设置跨账户签名”。*
+ **签名无法签名 **-您不能自己签署签名。只能对容器镜像进行签名。