

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

# 发布 AWS Data Exchange 包含 Amazon S3 数据访问权限的产品
<a name="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 接入点别名。

订阅结束后，订阅者的权限将被撤销。如果您选择提前终止与订阅者的协议，请联系 [AWS 支持](https://console.aws.amazon.com/support/home#/case/create%3FissueType=customer-service)。您可以在数据订阅协议 (DSA) 中添加订阅条款。

在发布包含 Amazon S3 数据访问权限的产品之前，您必须满足以下先决条件：

**先决条件**
+ 确认托管数据的 Amazon S3 存储桶已配置为 “Amazon S3 存储桶所有者强制执行” 设置为 “已**ACLs 禁用**”。有关更多信息，请参阅 *Amazon 简单存储服务用户指南中的控制对象所有权和禁用 ACLs 存储*[桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)。
+ 您的共享对象必须属于 Amazon S3 Standard 存储类别，或者使用 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/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 存储桶策略，以授予 AWS Data Exchange 权限，来创建 Amazon S3 接入点，并代表您授予或删除订阅者访问权限。如果缺少策略语句，则必须编辑存储桶策略，以将 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 数据集](#create-S3-data-set)
+ [步骤 2：配置 Amazon S3 数据访问](#configure-s3-data-access-product)
+ [步骤 3：审核并定版数据集](#review-finalize-s3-data-set-product)
+ [步骤 4：向 AWS Data Exchange 产品添加 Amazon S3 数据集](#add-s3-data-set-to-existing-product)
+ [步骤 5：发布包含 Amazon S3 访问权限的新产品](#publish-s3-product)
+ [步骤 6：（可选）复制产品](#copy-s3-product)

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

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

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

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

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

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

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

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

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

## 步骤 2：配置 Amazon S3 数据访问
<a name="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)。要与共享这些 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="review-finalize-s3-data-set-product"></a>

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

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

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

## 步骤 4：向 AWS Data Exchange 产品添加 Amazon S3 数据集
<a name="add-s3-data-set-to-existing-product"></a>

 在以下步骤中，您将数据集添加到新 AWS Data Exchange 产品或现有产品中。

**将数据集添加到新的或现有 AWS 的 Data Exchange 产品中**

1. 在**拥有的数据集**页面的**数据集概览**下，您可以**编辑名称**、**删除**或**从数据集创建产品**。

1. 完成产品创建，指定产品描述、使用案例、元数据、定价以及条款和条件。

1. 完成后，**审核并发布**产品。
**注意**  
当客户订阅您的产品时，该客户将获得访问权限，允许他们使用代表您创建的 Amazon S3 接入点读取和使用您的数据。

## 步骤 5：发布包含 Amazon S3 访问权限的新产品
<a name="publish-s3-product"></a>

在创建了至少一个数据集并完成包含资产的修订定版之后，就可以发布具有 Amazon S3 数据访问权限的产品了。有关更多信息，请参阅 [中的产品最佳实践 AWS Data Exchange](product-details.md)。确保您已掌握有关产品和优惠的所有必要详细信息。

**注意**  
更新共享的 Amazon S3 对象时，您无需创建新的修订，除非 Amazon S3 的位置已更改且订阅者无法访问这些对象。

**要发布包含 Amazon S3 访问权限的新产品，请按以下步骤操作：**

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

1. 从**产品**中，选择**发布新产品**，打开**发布新产品**向导。

1. 在**产品可见性**部分中，选择产品的**产品可见性选项**和**敏感信息**配置，然后选择**下一步**。有关更多信息，请参阅[中的产品知名度 AWS Data Exchange](product-visibility.md)和[中的敏感信息类别 AWS Data Exchange](sensitive-information.md)。

1. 在**添加数据**部分的**拥有的数据集**下，选中要添加的数据集旁边的复选框，然后选择**添加所选项**。
**注意**  
您选择的数据集必须有定版修订。不会添加没有定版修订的数据集。

   1. 转至**所选的数据集**，查看您选择的数据集。

      您可以查看该数据集的**名称**、**类型**以及**上次更新时间**的时间戳。

   1. 转至**选择修订访问规则**，选择要为此产品中包含的数据集设置的修订访问规则，然后选择**下一步**。

      有关更多信息，请参阅[中的修订访问规则 AWS Data Exchange](best-practices-revisions.md)。

1. 在**定义产品**部分的**产品概览**下，输入产品相关信息，包括**产品名称**、**产品徽标**、**支持联系人**信息和**产品类别**。

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

1. （可选）在 “**定义产品**” 部分的 “**数据字典和样本-可选**” 下，通过选择数据集名称旁边的选项按钮来选择数据集，然后选择**编辑**。

   有关更多信息，请参阅[中的数据字典 AWS Data Exchange](data-dictionaries-pro.md)和[中的示例数据 AWS Data Exchange](samples-pro.md)。

   1. 在**编辑**对话框的**上传数据字典**下，选择**添加文件**，上传新的数据字典。

      您可以选择一个 .csv 格式的数据字典，最大大小为 1MB。

   1. 从计算机中选择已保存的数据字典，然后选择**打开**。

      此时，该数据字典 .csv 文件即会出现在**编辑**对话框中。
**注意**  
您的数据字典必须符合 AWS Data Exchange 数据字典模板。如果您没有要上传的已保存数据字典，则可以在 AWS Data Exchange 控制台中选择**空白数据字典模板**链接或**示例数据字典**链接。

   1. 选择**数据字典预览**，预览该数据字典。

   1. 在**样本 - 可选**下，选择**上传样本**，从您的计算机中选择一个样本，然后选择**打开**。

       此时，该样本会显示在**编辑**对话框中。
**注意**  
您最多可以上传 10 个样本，最大大小为 50MB。您可以预览 .csv 格式的样本。

   1. 为每个样本输入描述，该描述将显示在产品详细信息页面上。

   1. 选择**保存**。

1. 在**产品定义**下，输入产品的**简短描述**和**详细描述**。

   如果您想使用模板填写详细描述，请选择**应用模板**，再选择模板类型，然后在该模板中提供产品的具体详细信息。

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

1. 配置您的优惠。
   + 如果您要创建公开优惠，请在**添加公开优惠**部分中配置您的优惠。所有可见性设置为**公开**的 AWS Data Exchange 产品都需要配置公开优惠。

     1. 为该订阅选择**定价和访问持续时间**选项。

     1. 选择您的美国销售税设置、数据订阅协议 (DSA) 和退款政策。

     1. （可选）设置**订阅验证**，用于控制谁可以订阅此产品。有关更多信息，请参阅 [提供商的订阅验证 AWS Data Exchange](subscription-verification-pro.md)。

     1. 选择**优惠自动续订**选项。有关更多信息，请参阅 [为 AWS Data Exchange 产品创建报价](prepare-offers.md)。

     1. 选择**下一步**。
   + 如果您要创建专属优惠，请在**添加自定义优惠**部分中配置优惠详细信息。

     1. 在**订阅者账户信息**部分中，至少添加一个您想要延长优惠的订阅者账户。

     1. 为该订阅选择**定价和访问持续时间**选项。

     1. 选择**优惠到期日期**，订阅者必须在该日期之前接受此优惠。

     1. 选择您的美国销售税设置、数据订阅协议 (DSA) 和退款政策。

     1. 选择**优惠自动续订**选项。有关更多信息，请参阅 [为 AWS Data Exchange 产品创建报价](prepare-offers.md)。

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

1. 在**审核和发布**部分中，审核您的产品信息，然后展开**产品页面预览**，查看发布后的外观。

1. 如果您确定要让该产品和公开优惠对所有人可见和可用，请选择**发布**。

现在，您已经完成了发布带有公开报价的数据产品的手动部分。 AWS Data Exchange 准备和发布您的产品。在**产品概览**页面上，您的产品状态为**等待批准**。产品发布后，该状态会变更为**已发布**。

## 步骤 6：（可选）复制产品
<a name="copy-s3-product"></a>

创建完第一个产品后，您可以复制其详细信息和公开优惠，创建新的产品。

**注意**  
您可以复制公开、专属、已发布或未发布的产品。与产品相关联的自定义优惠无法复制，但公开优惠可以复制。

**要复制产品，请按以下步骤操作：**

1. 打开您的 Web 浏览器，登录到 [AWS Data Exchange 控制台](https://console.aws.amazon.com/dataexchange)。

1. 在左侧导航窗格中的**发布数据**下，选择**产品**。

1. 在**产品**中，选择要复制的产品旁边的选项。

1. 选择**操作**下拉列表，然后选择**创建副本**。

1. 根据您在步骤 3 中选择的产品，使用已填写的详细信息，继续**发布产品**工作流程。有关更多信息，请参阅 [步骤 5：发布新产品](publish-data-product.md#publish-products)。