

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

# 为 AWS Data Exchange 包含 Amazon S3 数据访问权限创建数据授权
<a name="data-grant-publish-s3-data-access-product"></a>

借助 AWS Data Exchange 适用于 Amazon S3，数据所有者可以共享对 Amazon S3 存储桶或特定前缀和 Amazon S3 对象的直接访问权限。数据所有者还可以使用数据授予 AWS Data Exchange 来自动管理授权。

作为数据所有者，您可以共享对整个 Amazon S3 存储桶或特定前缀和 Amazon S3 对象的直接访问权限，而无需创建或管理副本。这些共享的 Amazon S3 对象可以使用存储在 AWS Key Management Service (AWS KMS) 或 AWS 托管式密钥 (SSE-S3) 中的客户托管密钥进行服务器端加密。有关监控 KMS 密钥和了解加密上下文的更多信息，请参阅[适用于 Amazon S3 数据访问的密钥管理](key-management.md)。当接收者获得对您的数据产品的访问权限时， AWS Data Exchange 会自动配置 Amazon S3 接入点并代表您更新其资源政策，以授予接收者只读访问权限。接收者可以在使用 Amazon S3 存储桶名称访问 Amazon S3 中数据的位置，使用 Amazon S3 接入点别名。

订阅结束后，接收者的权限将被撤销。

在创建包含 Amazon S3 数据访问权限的数据授权之前，您必须满足以下先决条件：

**先决条件**
+ 确认托管数据的 Amazon S3 存储桶已配置为 “Amazon S3 存储桶所有者强制执行” 设置为 “已**ACLs 禁用**”。有关更多信息，请参阅 *Amazon 简单存储服务用户指南中的控制对象所有权和禁用 ACLs 存储*[桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)。
+ 您的共享对象必须属于 Amazon S3 Standard 存储类别，或者使用 Amazon S3 Intelligent Tiering 进行管理，接收者才能成功访问它们。如果它们属于其他存储类别，或者您启用了 Intelligent Tiering 深度归档，则您的接收者将收到错误，因为他们没有 `RestoreObject` 权限。
+ 确认托管数据的 Amazon S3 存储桶已禁用加密或使用 Amazon S3 托管密钥 (SSE-S3) 或存储在 AWS Key Management Service (AWS KMS) 中的客户托管密钥进行加密。
+ 如果您使用的是客户托管密钥，则必须满足以下条件：

  1. 拥有对 KMS 密钥执行 `kms:CreateGrant` 的 IAM 权限。您可以通过密钥策略、IAM 凭证或对 KMS 密钥的 AWS KMS 授权来访问这些权限。有关密钥管理以及如何 AWS Data Exchange 使用 AWS KMS 授权的更多信息，请参阅[创建 AWS KMS 补助金](key-management.md#create-kms-grants)。

     要提供访问权限，请为您的用户、组或角色添加权限：
     + 中的用户和群组 AWS IAM Identity Center：

       创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
     + 通过身份提供者在 IAM 中托管的用户：

       创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
     + IAM 用户：
       + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
       + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

     如果用户想在 AWS 外部进行交互，则需要编程访问权限 AWS 管理控制台。授予编程访问权限的方式取决于正在访问的用户类型 AWS。

     要向用户授予编程式访问权限，请选择以下选项之一。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/data-exchange/latest/userguide/data-grant-publish-s3-data-access-product.html)

     以下是一个 JSON 策略示例，显示了如何在 KMS 密钥的密钥策略中添加内容。

     ```
     {
           "Sid": "AllowCreateGrantPermission",
           "Effect": "Allow",
           "Principal": {
     "AWS": "<IAM identity who will call Dataexchange API>"             
           },
           "Action": "kms:CreateGrant",
           "Resource": "*"
     }
     ```

     以下策略显示了为所使用的 IAM 身份添加的策略示例。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Sid": "AllowCreateGrantPermission",
                 "Action": [
                     "kms:CreateGrant"
                 ],
                 "Resource": [
                 "arn:aws:kms:us-east-1:111122223333:key/KeyId"
                 ]
             }
         ]
     }
     ```

------
**注意**  
如果通过前面的步骤获得了 KMS 密钥的 `kms:CreateGrant` 权限，则同样允许使用跨账户 KMS 密钥。如果其他账户拥有该密钥，则您必须拥有该密钥策略和您的 IAM 凭证的权限，如上面的示例所述。

  1. 确保使用 KMS 密钥通过 Amazon S3 存储桶密钥特征对 Amazon S3 存储桶中的现有和新对象进行加密。有关更多详细信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[配置 S3 存储桶密钥](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html#configure-bucket-key)。
     + 对于添加到您的 Amazon S3 存储桶中的新对象，您可以默认设置 Amazon S3 存储桶密钥加密。如果在未使用 Amazon S3 存储桶密钥特征的情况下对现有对象进行加密，则必须迁移这些对象，以使用 Amazon S3 存储桶密钥进行加密。

       要为现有对象启用 Amazon S3 存储桶密钥，请使用 `copy` 操作。有关更多信息，请参阅[使用批量操作在对象级别配置 Amazon S3 存储桶密钥](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configuring-bucket-key-object.html)。
     + AWS 不支持托管 KMS 密钥或 AWS 拥有的密钥 不支持。您可以从不受支持的加密方案迁移到当前受支持的加密方案。有关更多信息，请参阅 AWS 存储博客[上的更改 Amazon S3 加密](https://aws.amazon.com/blogs/storage/changing-your-amazon-s3-encryption-from-s3-managed-encryption-sse-s3-to-aws-key-management-service-sse-kms/)。

  1. 将托管数据的 Amazon S3 存储桶设置为信任 AWS Data Exchange 拥有的接入点。您必须更新这些 Amazon S3 存储桶策略，以授予创建 Amazon S3 接入点以及代表您授予或删除订阅者访问权限的 AWS Data Exchange 权限。如果缺少策略语句，则必须编辑存储桶策略，以将 Amazon S3 位置添加到您的数据集中。

     下面显示了一个示例策略。使用相应的值替换 `<Bucket ARN>`。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Principal": {
                     "AWS": "*"
                 },
                 "Action": [
                     "s3:GetObject",
                     "s3:ListBucket"
                 ],
                 "Resource": [
                    "arn:aws:s3:::BucketName",
                    "arn:aws:s3:::/*"
                 ],
                 "Condition": {
                     "StringEquals": {
                         "s3:DataAccessPointAccount": [
                             "337040091392",
                             "504002150500",
                             "366362662752",
                             "330489627928",
                             "291973504423",
                             "461002523379",
                             "036905324694",
                             "540564263739",
                             "675969394711",
                             "108584782536",
                             "844053218156"
                         ]
                     }
                 }
             }
         ]
     }
     ```

------

您可以将数据共享委托给整个 Amazon S3 存储桶。 AWS Data Exchange 但是，您可以将委派范围限定为要在数据集中共享的存储桶的特定前缀和对象。以下是限定范围内的策略的一个示例。将 `<Bucket ARN>` 和 `"mybucket/folder1/*"` 替换为您自己的信息。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DelegateToAdxGetObjectsInFolder1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::mybucket/folder1/*"
      ],
      "Condition": {
        "StringEquals": {
          "s3:DataAccessPointAccount": [
            "337040091392",
            "504002150500",
            "366362662752",
            "330489627928",
            "291973504423",
            "461002523379",
            "036905324694",
            "540564263739",
            "675969394711",
            "108584782536",
            "844053218156"
          ]
        }
      }
    },
    {
      "Sid": "DelegateToAdxListObjectsInFolder1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::mybucket",
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "folder1/*"
          ]
        },
        "StringEquals": {
          "s3:DataAccessPointAccount": [
            "337040091392",
            "504002150500",
            "366362662752",
            "330489627928",
            "291973504423",
            "461002523379",
            "036905324694",
            "540564263739",
            "675969394711",
            "108584782536",
            "844053218156"
          ]
        }
      }
    }
  ]
}
```

------

同样，要将访问范围限定为仅限于单个文件，数据所有者可以使用以下策略。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DelegateToAdxGetMyFile",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::mybucket/folder1/myfile"
      ],
      "Condition": {
        "StringEquals": {
          "s3:DataAccessPointAccount": [
            "337040091392",
            "504002150500",
            "366362662752",
            "330489627928",
            "291973504423",
            "461002523379",
            "036905324694",
            "540564263739",
            "675969394711",
            "108584782536",
            "844053218156"
          ]
        }
      }
    }
  ]
}
```

------

以下主题描述了使用 AWS Data Exchange 控制台创建 Amazon S3 数据集以及使用 Amazon S3 数据集进行数据授予的过程。此过程包含以下步骤：

**Topics**
+ [步骤 1：创建 Amazon S3 数据集](#data-grant-create-S3-data-set)
+ [步骤 2：配置 Amazon S3 数据访问](#data-grant-configure-s3-data-access-product)
+ [步骤 3：审核并定版数据集](#data-grant-review-finalize-s3-data-set-product)
+ [步骤 4：创建新数据授权](#data-grant-add-s3-data-set-to-existing-product)

## 步骤 1：创建 Amazon S3 数据集
<a name="data-grant-create-S3-data-set"></a>

**要创建 Amazon S3 数据集，请按以下步骤操作：**

1.  在左侧导航窗格的**我的数据**下，选择**拥有的数据集**。

1. 在**拥有的数据集**中，选择**创建数据集**，打开**数据集创建步骤**向导。

1. 在**选择数据集类型**中，选择 **Amazon S3 数据访问**。

1. 在**定义数据集**中，为您的数据集输入**名称**和**描述**。有关更多信息，请参阅[数据集最佳实践](data-sets.md#data-set-best-practices)。

1. （可选）在**添加标签 - 可选**下，添加标签。

1. 选择**创建数据集**，然后继续。

## 步骤 2：配置 Amazon S3 数据访问
<a name="data-grant-configure-s3-data-access-product"></a>

选择要向接收者提供的 Amazon S3 存储桶或 Amazon S3 存储桶位置。您可以选择整个 Amazon S3 存储桶，也可以在一个 Amazon S3 存储桶中指定最多五个前缀或对象。要添加更多 Amazon S3 存储桶，您必须创建另一个 Amazon S3 数据共享。

**要配置共享 Amazon S3 数据访问，请按以下步骤操作：**

1. 在**配置 Amazon S3 数据访问**页面上，选择**选择 Amazon S3 位置**。

1. 在**选择 Amazon S3 位置**中，在搜索栏中输入您的 Amazon S3 存储桶名称，或者选择您的 Amazon S3 存储桶、前缀或 Amazon S3 文件，再选择**添加选定**。然后，选择**添加位置**。
**注意**  
我们建议选择存储大多数对象和前缀的顶级文件夹，这样，数据所有者就无需重新配置要共享的前缀或对象了。

1. 在**配置详细信息**中，选择您的**申请方付款**配置。有两种方式：
   + **启用申请方付款***（推荐）*– 申请方将为 Amazon S3 存储桶中的所有请求和数据传输付费。我们建议使用此选项，因为它有助于防止接收者请求和数据传输产生意外费用。
   + **禁用“请求者付费”**– 您需要为 Amazon S3 存储桶中的接收者请求和数据传输付费。

     有关**申请方付款**的更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的[申请方付款存储桶中的对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ObjectsinRequesterPaysBuckets.html)**。

1. 选择最适合您需求的**存储桶策略**。选择**常规**，将对整个 Amazon S3 存储桶使用同一个存储桶策略。这是一次性配置，后续无需额外配置即可共享前缀或对象。选择**特定**，使用特定于所选 Amazon S3 位置的存储桶策略。您的共享的 Amazon S3 存储桶需要适当的存储桶策略才能成功创建 Amazon S3 数据访问数据集，但无法 ACLs 启用。

   1. 要禁用 ACLs，请导航到您的存储桶权限并将**对象所有权**设置为**强制存储桶所有者**。

   1. 要添加存储桶策略，请将存储桶语句复制到剪贴板。在 Amazon S3 控制台的 **Amazon S3 权限**选项卡中，选择**存储桶策略**部分的**编辑**，将存储桶策略粘贴到该语句中，然后**保存更改**。

1. 如果 Amazon S3 存储桶包含使用 AWS KMS 客户托管密钥加密的对象，则必须与共享所有此类 KMS 密钥 AWS Data Exchange。有关使用 KMS 密钥加密您的 Amazon S3 存储桶中的对象时所需的先决条件的信息，请参阅[发布 AWS Data Exchange 包含 Amazon S3 数据访问权限的产品](publish-s3-data-access-product.md)。要与共享这些 KMS 密钥 AWS Data Exchange，请执行以下操作：

   1. 在**配置 Amazon S3 数据访问**页面的**客户托管 KMS 密钥**中，**选择从您的**密钥中选择 AWS KMS keys或**输入 AWS KMS key ARN**，然后选择**AWS KMS keys**当前用于加密 Amazon S3 共享位置的所有密钥。 AWS Data Exchange 使用这些 KMS 密钥为收件人创建访问您的共享位置的授权。有关更多信息，请参阅 [AWS KMS中的授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。
**注意**  
AWS KMS 每个 KMS 密钥的授权上限为 50,000 个，包括先前存在的授权。

1. 查看您的 Amazon S3 位置、所选的 KMS 密钥和配置详情，然后选择**保存并继续**。

## 步骤 3：审核并定版数据集
<a name="data-grant-review-finalize-s3-data-set-product"></a>

审核并定版新创建的数据集。如果您想创建并添加另一个 Amazon S3 数据访问，以共享对其他 Amazon S3 存储桶、前缀和对象的访问权限，请选择**添加另一个 Amazon S3 数据访问**。

**注意**  
当需要共享对托管在不同的 Amazon S3 存储桶（而不是先前在初始 Amazon S3 数据访问中选择的存储桶）中的数据的访问权限时，我们建议您这样做。

如果您想在发布之前进行更改，可以选择**保存草稿**，将数据集另存为草稿。然后，选择**定版数据集**，将其添加到您的数据授权中。

## 步骤 4：创建新数据授权
<a name="data-grant-add-s3-data-set-to-existing-product"></a>

在创建了至少一个数据集并完成包含资产的修订之后，就可以将该数据集作为数据授权的一部分使用了。

**创建新数据授权**

1. 在 [AWS Data Exchange 控制台](https://console.aws.amazon.com/dataexchange)左侧导航窗格的**已交换的数据授权**下，选择**已发送的数据授权**。

1. 从**已发送的数据授权**中，选择**创建数据授权**以打开**定义数据授权**向导。

1. 在**选择拥有的数据集**部分，选中要添加的数据集旁边的复选框。
**注意**  
您选择的数据集必须具有最终修订版。未完成修订版的数据集无法添加到数据授权中。  
与共享的数据产品中包含的数据集不同 AWS Marketplace，添加到数据授权中的数据集没有修订访问规则，这意味着数据授予的接受者一旦获得批准，就可以访问给定数据集的所有最终修订版（包括在数据授权创建之前完成的历史修订）。

1. 在**授予概览**部分中，输入接收者将看到的有关您的数据授权的信息，包括**数据授权名称**和**数据授权描述**。

1. 选择**下一步**。

   有关更多信息，请参阅 [中的产品最佳实践 AWS Data Exchange](product-details.md)。

1. 在 “**收件人访问信息**” 部分的 “**AWS 账户 ID**” 下，输入应获得数据授予的收款人账户的 AWS 账户 ID。

1. 在**访问结束日期**下，为数据授权的到期时间选择特定的结束日期，或者，如果该授予应永久存在，则选择**无结束日期**。

1. 选择**下一步**。

1. 在**审核并发送**部分中，审核您的数据授权信息。

1. 如果您确定要创建数据授权并将其发送给选定的接收者，请选择**创建并发送数据授权**。

您现在已经完成创建数据授权的手动操作部分。数据授权将显示在 “**已发送数据授**权” 页面的 “**已发送数据授**权” 选项卡上，显示其状态为 “**待接受**”，直到接收者账户接受为止。