

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

# 与其他人共享自定义模型 AWS 账户
<a name="custom-copy-sharing"></a>

借助 Amazon Comprehend，您可以与其他人共享您的自定义模型，这样他们就可以将您的模型导入他们的 AWS 账户。当用户导入您的一个自定义模型时，他们会在自己的账户中创建一个新的自定义模型。他们的新模型与您共享的模型相同。

要共享自定义模型，您需要为其附加一个授权他人导入该模型的策略。然后，您可以向这些用户提供他们需要的详细信息。

**注意**  
当其他用户导入您共享的自定义模型时，他们必须使用包含您的模型 AWS 区域 的相同模型，例如美国东部（弗吉尼亚北部）。

**Topics**
+ [开始前的准备工作](#custom-copy-sharing-prerequisites)
+ [自定义模型的基于资源的策略](#custom-copy-sharing-example-policy)
+ [步骤 1：向自定义模型添加基于资源的策略](#custom-copy-sharing-adding-policy)
+ [步骤 2：提供其他人需要导入的详细信息](#custom-copy-sharing-details)

## 开始前的准备工作
<a name="custom-copy-sharing-prerequisites"></a>

在共享模型之前，您必须在 AWS 账户中的 Amazon Comprehend 中拥有经过训练的自定义分类器或自定义实体识别器。有关训练自定义模型的更多信息，请参阅[自定义分类](how-document-classification.md) 或 [自定义实体识别](custom-entity-recognition.md)。

### 所需的权限
<a name="custom-copy-sharing-prerequisites-permissions"></a>

#### IAM policy 语句
<a name="custom-copy-sharing-prerequisites-permissions-iam"></a>

在向自定义模型添加基于资源的策略之前，您需要在 AWS Identity and Access Management (IAM) 中获得权限。您的用户、组或角色必须附加策略，这样您才能创建、获取和删除模型策略，如以下示例所示。

**Example 用于管理自定义模型的基于资源的策略的 IAM policy**  

```
{
  "Effect": "Allow",
  "Action": [
    "comprehend:PutResourcePolicy",
    "comprehend:DeleteResourcePolicy",
    "comprehend:DescribeResourcePolicy"
  ],
  "Resource": "arn:aws:comprehend:us-west-2:111122223333:document-classifier/foo/version/*"
}
```

有关创建 IAM policy 的更多信息，请参阅*《IAM 用户指南》*中的[创建 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。有关附加 IAM policy 的信息，请参阅《*IAM 用户指南*》中的[添加和删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

#### AWS KMS 关键政策声明
<a name="custom-copy-sharing-prerequisites-permissions-kms"></a>

如果您要共享加密模型，则可能需要为添加权限 AWS KMS。此要求取决于您在 Amazon Comprehend 中用于加密模型的 KMS 密钥的类型。

由**AWS 拥有的密钥** AWS 服务拥有和管理。如果您使用 AWS 拥有的密钥，则无需为添加权限 AWS KMS，并且可以跳过本节。

**客户自主管理型密钥**是在您的 AWS 账户中创建、拥有和管理的密钥。若要使用客户自主管理型密钥，您必须向 KMS 密钥策略添加一条语句。

该策略声明授权一个或多个实体（例如用户或账户）执行解密模型所需的 AWS KMS 操作。

您可以使用条件键来帮助防止混淆代理问题。有关更多信息，请参阅 [防止跨服务混淆座席](cross-service-confused-deputy-prevention.md)。

在策略中使用以下条件密钥来验证访问您的 KMS 密钥的实体。当用户导入模型时， AWS KMS 会检查源模型版本的 ARN 是否符合条件。如果您未在策略中包含条件，则指定的委托人可以使用您的 KMS 密钥解密任何模型版本：
+ a@@ [ws: SourceArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) — 将此条件键与`kms:GenerateDataKey`和`kms:Decrypt`操作一起使用。
+ [kms: EncryptionContext](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context) — 将此条件密钥与`kms:GenerateDataKey``kms:Decrypt`、和`kms:CreateGrant`操作配合使用。

在以下示例中，策略授权使用 AWS 账户 `444455556666`所拥有的指定分类器模型的版本 1。 AWS 账户 `111122223333`

**Example 用于访问特定分类器模型版本的 KMS 密钥策略**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
          "AWS":
                "arn:aws:iam::444455556666:root"
      },
      "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
      ],
      "Resource": "*",
      "Condition": {
          "StringEquals": {
              "aws:SourceArn":
                "arn:aws:comprehend:us-west-2:111122223333:document-classifier/classifierName/version/1"
          }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
          "AWS":  "arn:aws:iam::444455556666:root"
      },
      "Action": "kms:CreateGrant",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
           "kms:EncryptionContext:aws:comprehend:arn":
              "arn:aws:comprehend:us-west-2:111122223333:document-classifier/classifierName/version/1"
        }
      }
    }
  ]
}
```

以下示例策略授权用户**ExampleUser **通过 Amazon C AWS 账户 `444455556666` om **ExampleRole**p AWS 账户 `123456789012` rehend 服务访问此 KMS 密钥。

**Example 允许访问 Amazon Comprehend 服务的 KMS 密钥策略（替代方案 1）。**  

以下示例策略授权 AWS 账户 `444455556666`通过 Amazon Comprehend 服务访问此 KMS 密钥，使用前一个示例的替代语法。

**Example 允许访问 Amazon Comprehend 服务的 KMS 密钥策略（替代方案 2）。**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::444455556666:root"
      },
      "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey",
          "kms:CreateGrant"
      ],
      "Resource": "*",
      "Condition": {
          "StringLike": {
              "kms:EncryptionContext:aws:comprehend:arn": "arn:aws:comprehend:*"
          }
      }
    }
  ]
}
```

有关更多信息，请参阅《*AWS Key Management Service 开发人员指南*》中的[在 AWS KMS中使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

## 自定义模型的基于资源的策略
<a name="custom-copy-sharing-example-policy"></a>

在其他用户的 Amazon Comprehend 用户 AWS 账户 可以 AWS 从您的账户导入自定义模型之前，您必须授权他们这样做。要对它们进行授权，请将*基于资源的策略*添加到您要共享的模型版本中。在基于资源的策略是附加到 AWS中的资源的 IAM policy。

当您将资源策略附加到自定义模型版本时，该策略会授权用户、组或角色对模型版本执行 `comprehend:ImportModel` 操作。

**Example 自定义模型版本的基于资源的策略**  
此示例在 `Principal` 属性中指定了授权实体。资源“\$1”是指您附加策略的特定模型版本。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "comprehend:ImportModel",
      "Resource": "*",
      "Principal": {
        "AWS": [
                "arn:aws:iam::111122223333:root",
                "arn:aws:iam::444455556666:user/ExampleUser",
                "arn:aws:iam::123456789012:role/ExampleRole"
         ]
      }
    }
  ]
}
```
对于您附加到自定义模型的策略，`comprehend:ImportModel` 是 Amazon Comprehend 支持的唯一操作。  
有关基于资源的策略的更多信息，请参见《*IAM 用户指南*》中的[基于身份的策略和基于资源的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)。

## 步骤 1：向自定义模型添加基于资源的策略
<a name="custom-copy-sharing-adding-policy"></a>

您可以使用 AWS 管理控制台、或 Amazon Comprehend AWS CLI API 添加基于资源的策略。

### AWS 管理控制台
<a name="custom-copy-sharing-adding-policy-console"></a>

您可以在 AWS 管理控制台中使用 Amazon Comprehend。

**添加基于资源的策略**

1. 登录 AWS 管理控制台 并打开亚马逊 Comprehend 控制台，网址为 [https://console.aws.amazon.com/comprehend/](https://console.aws.amazon.com/comprehend/)

1. 在左侧导航菜单中的**自定义**下，请选择包含您的自定义模型的页面：

   1. 如果您要共享自定义文档分类器，请选择**自定义分类**。

   1. 如果您要共享自定义实体识别器，请选择**自定义实体识别**。

1. 在模型列表中，选择模型名称以打开其详细信息页面。

1. 在**版本**下，请选择要共享的模型版本的名称。

1. 在版本详情页面上，选择**标签、VPC 和策略**选项卡。

1. 在**基于资源的策略**部分中，选择**编辑**。

1. 在**编辑基于资源的策略页面**上，执行以下操作：

   1. 在**策略名称**中，输入一个可以帮助您在创建策略后识别该策略的名称。

   1. 在**授权**下，指定以下一个或多个实体以授权它们导入您的模型：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/comprehend/latest/dg/custom-copy-sharing.html)

1. 在**共享**下，您可以复制模型版本的 ARN，以帮助您与将要导入模型的人员共享。当有人从不同的模型导入自定义模型时 AWS 账户，需要模型版本 ARN。

1. 选择**保存**。Amazon Comprehend 创建基于资源的策略并将其附加到您的模型。

### AWS CLI
<a name="custom-copy-sharing-adding-policy-cli"></a>

要使用将基于资源的策略添加到自定义模型中 AWS CLI，请使用[PutResourcePolicy](https://docs.aws.amazon.com/comprehend/latest/dg/API_PutResourcePolicy.html)命令。 命令使用以下参数：
+ `resource-arn`：自定义模型的 ARN，包括模型版本。
+ `resource-policy`：一个 JSON 文件，用于定义要附加到您的自定义模型的基于资源的策略。

  您也可以将策略作为内联 JSON 字符串提供。要为您的策略提供有效的 JSON，请用双引号将属性名和值括起来。如果 JSON 正文也用双引号括起来，则可以转义策略内的双引号。
+ `policy-revision-id`：Amazon Comprehend 分配给您正在更新的策略的修订 ID。如果您正在创建没有先前版本的新策略，请不要使用此参数。Amazon Comprehend 会为您创建修订版 ID。

**Example 使用 `put-resource-policy` 命令向自定义模型添加基于资源的策略**  
此示例在名为 **policyFile.json** 的 JSON 文件中定义了一个策略，并将该策略与模型关联起来。该模型是名为 **mycf1** 的分类器的 **v2** 版本。  

```
$ aws comprehend put-resource-policy \
> --resource-arn arn:aws:comprehend:us-west-2:111122223333:document-classifier/mycf1/version/v2 \
> --resource-policy file://policyFile.json \
> --policy-revision-id revision-id
```
资源策略的 JSON 文件包含以下内容：  
+ *操作*：策略授权指定委托人使用 `comprehend:ImportModel`。
+ *资源*：自定义模型的 ARN。资源“\$1”是指您在 `put-resource-policy` 命令中指定的模型版本。
+ *委托人* — 该政策授权`jane`来自 AWS 账户 444455556666的用户和来自123456789012的所有用户。 AWS 账户   
****  

```
{
"Version":"2012-10-17",		 	 	 
 "Statement":[
    {"Sid":"ResourcePolicyForImportModel",
     "Effect":"Allow",
     "Action":["comprehend:ImportModel"],
     "Resource":"*",
     "Principal":
         {"AWS":
            ["arn:aws:iam::444455556666:user/jane",
             "123456789012"]
         }
   }
 ]
}
```

### Amazon Comprehend API
<a name="custom-copy-sharing-adding-policy-api"></a>

要使用 Amazon Comprehend API 向自定义模型添加基于资源的策略，请使用 API 操作。[PutResourcePolicy](https://docs.aws.amazon.com/comprehend/latest/dg/API_PutResourcePolicy.html)

您还可以在创建模型的 API 请求中向自定义模型添加策略。为此，请在提交[CreateDocumentClassifier](https://docs.aws.amazon.com/comprehend/latest/dg/API_CreateDocumentClassifier.html)或[CreateEntityRecognizer](https://docs.aws.amazon.com/comprehend/latest/dg/API_CreateEntityRecognizer.html)请求时提供 ModelPolicy 参数的策略 JSON。

## 步骤 2：提供其他人需要导入的详细信息
<a name="custom-copy-sharing-details"></a>

现在，您已将基于资源的策略添加到您的自定义模型中，您已授权其他 Amazon Comprehend 用户将您的模型导入到他们的 AWS 账户中。但是，在他们可以导入之前，您必须向他们提供以下详细信息：
+ 模块版本的 Amazon 资源名称（ARN)。
+ 包含模型的 AWS 区域 。任何导入您的模型的人都必须使用相同的 AWS 区域 。
+ 模型是否已加密，如果已加密，则说明您使用的 AWS KMS 密钥类型： AWS 拥有的密钥 或客户托管密钥。
+ 如果您的模型使用客户自主管理型密钥加密，您必须提供 KMS 密钥的 ARN。任何导入您的模型的人都必须在其 AWS 账户中包含 IAM 服务角色中的 ARN。此角色授权 Amazon Comprehend 在导入期间使用 KMS 密钥来解密模型。

有关其他用户如何导入您的模型的更多信息，请参阅 [从另一个模型导入自定义模型 AWS 账户](custom-copy-importing.md)。