本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 AWS Data Exchange 包含 Amazon S3 数据访问权限创建数据授权
借助 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 数据访问的密钥管理。当接收者获得对您的数据产品的访问权限时, AWS Data Exchange 会自动配置 Amazon S3 接入点并代表您更新其资源政策,以授予接收者只读访问权限。接收者可以在使用 Amazon S3 存储桶名称访问 Amazon S3 中数据的位置,使用 Amazon S3 接入点别名。
订阅结束后,接收者的权限将被撤销。
在创建包含 Amazon S3 数据访问权限的数据授权之前,您必须满足以下先决条件:
先决条件
-
确认托管数据的 Amazon S3 存储桶已配置为 “Amazon S3 存储桶所有者强制执行” 设置为 “已ACLs 禁用”。有关更多信息,请参阅 Amazon 简单存储服务用户指南中的控制对象所有权和禁用 ACLs 存储桶。
-
您的共享对象必须属于 Amazon S3 Standard 存储类别,或者使用 Amazon S3 Intelligent Tiering 进行管理,接收者才能成功访问它们。如果它们属于其他存储类别,或者您启用了 Intelligent Tiering 深度归档,则您的接收者将收到错误,因为他们没有
RestoreObject
权限。 -
确认托管数据的 Amazon S3 存储桶已禁用加密或使用 Amazon S3 托管密钥 (SSE-S3) 或存储在 AWS Key Management Service (AWS KMS) 中的客户托管密钥进行加密。
-
如果您使用的是客户托管密钥,则必须满足以下条件:
-
拥有对 KMS 密钥执行
kms:CreateGrant
的 IAM 权限。您可以通过密钥策略、IAM 凭证或对 KMS 密钥的 AWS KMS 授权来访问这些权限。有关密钥管理以及如何 AWS Data Exchange 使用 AWS KMS 授权的更多信息,请参阅创建 AWS KMS 补助金。要提供访问权限,请为您的用户、组或角色添加权限:
-
中的用户和群组 AWS IAM Identity Center:
创建权限集合。按照《AWS IAM Identity Center 用户指南》中创建权限集的说明进行操作。
-
通过身份提供商在 IAM 中托管的用户:
创建适用于身份联合验证的角色。按照《IAM 用户指南》中针对第三方身份提供商创建角色(联合身份验证)的说明进行操作。
-
IAM 用户:
-
创建您的用户可以担任的角色。按照《IAM 用户指南》中为 IAM 用户创建角色的说明进行操作。
-
(不推荐使用)将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》中向用户添加权限(控制台)中的说明进行操作。
-
如果用户想在 AWS 外部进行交互,则需要编程访问权限 AWS Management Console。授予编程访问权限的方式取决于正在访问的用户类型 AWS。
要向用户授予编程式访问权限,请选择以下选项之一。
哪个用户需要编程式访问权限? 目的 方式 人力身份
(在 IAM Identity Center 中管理的用户)
使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 按照您希望使用的界面的说明进行操作。
-
有关的 AWS CLI,请参阅《AWS Command Line Interface 用户指南》 AWS IAM Identity Center中的 “配置 AWS CLI 要使用”。
-
有关工具和 AWS SDKs AWS APIs,请参阅《工具参考指南》中的 IAM 身份中心身份验证AWSSDKs 和工具参考指南。
IAM 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 按照 IAM 用户指南中的将临时证书与 AWS 资源配合使用中的说明进行操作。 IAM (不推荐使用)
使用长期凭证签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。按照您希望使用的界面的说明进行操作。
-
有关信息 AWS CLI,请参阅用户指南中的使用 IAM 用户证书进行身份验证。AWS Command Line Interface
-
有关 AWS SDKs 和工具,请参阅《工具参考指南》AWS SDKs 和《工具参考指南》中的使用长期凭证进行身份验证。
-
有关信息 AWS APIs,请参阅 IAM 用户指南中的管理 IAM 用户的访问密钥。
以下是一个 JSON 策略示例,显示了如何在 KMS 密钥的密钥策略中添加内容。
{ "Sid": "AllowCreateGrantPermission", "Effect": "Allow", "Principal": { "AWS": "<IAM identity who will call Dataexchange API>" }, "Action": "kms:CreateGrant", "Resource": "*" }
以下策略显示了为所使用的 IAM 身份添加的策略示例。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "AllowCreateGrantPermission", "Action": [ "kms:CreateGrant ], "Resource": [ <Enter KMS Key ARNs in your account> ] } ] }
注意
如果通过前面的步骤获得了 KMS 密钥的
kms:CreateGrant
权限,则同样允许使用跨账户 KMS 密钥。如果其他账户拥有该密钥,则您必须拥有该密钥策略和您的 IAM 凭证的权限,如上面的示例所述。 -
-
确保使用 KMS 密钥通过 Amazon S3 存储桶密钥特征对 Amazon S3 存储桶中的现有和新对象进行加密。有关更多详细信息,请参阅《Amazon Simple Storage Service 用户指南》中的配置 S3 存储桶密钥。
-
对于添加到您的 Amazon S3 存储桶中的新对象,您可以默认设置 Amazon S3 存储桶密钥加密。如果在未使用 Amazon S3 存储桶密钥特征的情况下对现有对象进行加密,则必须迁移这些对象,以使用 Amazon S3 存储桶密钥进行加密。
要为现有对象启用 Amazon S3 存储桶密钥,请使用
copy
操作。有关更多信息,请参阅使用批量操作在对象级别配置 Amazon S3 存储桶密钥。 -
AWS 不支持托管 KMS 密钥或 AWS 拥有的密钥 不支持。您可以从不受支持的加密方案迁移到当前受支持的加密方案。有关更多信息,请参阅 AWS 存储博客上的更改 Amazon S3 加密
。
-
-
将托管数据的 Amazon S3 存储桶设置为信任 AWS Data Exchange 拥有的接入点。您必须更新这些 Amazon S3 存储桶策略,以授予创建 Amazon S3 接入点以及代表您授予或删除订阅者访问权限的 AWS Data Exchange 权限。如果缺少策略语句,则必须编辑存储桶策略,以将 Amazon S3 位置添加到您的数据集中。
下面显示了一个示例策略。使用相应的值替换
<Bucket ARN>
。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "<Bucket ARN>", "<Bucket ARN>/*" ], "Condition": { "StringEquals": { "s3:DataAccessPointAccount": [ "337040091392", "504002150500", "366362662752", "330489627928", "291973504423", "461002523379", "036905324694", "540564263739", "675969394711", "108584782536", "844053218156" ] } } } ] }
-
您可以将数据共享委托给整个 Amazon S3 存储桶。 AWS Data Exchange 但是,您可以将委派范围限定为要在数据集中共享的存储桶的特定前缀和对象。以下是限定范围内的策略的一个示例。将 <Bucket ARN>
和 "mybucket/folder1/*"
替换为您自己的信息。
{ "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" ] } } } ] }
同样,要将访问范围限定为仅限于单个文件,数据所有者可以使用以下策略。
{ "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 数据集进行数据授予的过程。此过程包含以下步骤:
步骤 1:创建 Amazon S3 数据集
要创建 Amazon S3 数据集,请按以下步骤操作:
-
在左侧导航窗格的我的数据下,选择拥有的数据集。
-
在拥有的数据集中,选择创建数据集,打开数据集创建步骤向导。
-
在选择数据集类型中,选择 Amazon S3 数据访问。
-
在定义数据集中,为您的数据集输入名称和描述。有关更多信息,请参阅数据集最佳实践。
-
(可选)在添加标签 - 可选下,添加标签。
-
选择创建数据集,然后继续。
步骤 2:配置 Amazon S3 数据访问
选择要向接收者提供的 Amazon S3 存储桶或 Amazon S3 存储桶位置。您可以选择整个 Amazon S3 存储桶,也可以在一个 Amazon S3 存储桶中指定最多五个前缀或对象。要添加更多 Amazon S3 存储桶,您必须创建另一个 Amazon S3 数据共享。
要配置共享 Amazon S3 数据访问,请按以下步骤操作:
-
在配置 Amazon S3 数据访问页面上,选择选择 Amazon S3 位置。
-
在选择 Amazon S3 位置中,在搜索栏中输入您的 Amazon S3 存储桶名称,或者选择您的 Amazon S3 存储桶、前缀或 Amazon S3 文件,再选择添加选定。然后,选择添加位置。
注意
我们建议选择存储大多数对象和前缀的顶级文件夹,这样,数据所有者就无需重新配置要共享的前缀或对象了。
-
在配置详细信息中,选择您的申请方付款配置。有两种方式:
-
启用申请方付款(推荐)– 申请方将为 Amazon S3 存储桶中的所有请求和数据传输付费。我们建议使用此选项,因为它有助于防止接收者请求和数据传输产生意外费用。
-
禁用“请求者付费”– 您需要为 Amazon S3 存储桶中的接收者请求和数据传输付费。
有关申请方付款的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的申请方付款存储桶中的对象。
-
-
选择最适合您需求的存储桶策略。选择常规,将对整个 Amazon S3 存储桶使用同一个存储桶策略。这是一次性配置,后续无需额外配置即可共享前缀或对象。选择特定,使用特定于所选 Amazon S3 位置的存储桶策略。您的共享的 Amazon S3 存储桶需要适当的存储桶策略才能成功创建 Amazon S3 数据访问数据集,但无法 ACLs 启用。
-
要禁用 ACLs,请导航到您的存储桶权限并将对象所有权设置为强制存储桶所有者。
-
要添加存储桶策略,请将存储桶语句复制到剪贴板。在 Amazon S3 控制台的 Amazon S3 权限选项卡中,选择存储桶策略部分的编辑,将存储桶策略粘贴到该语句中,然后保存更改。
-
-
如果 Amazon S3 存储桶包含使用 AWS KMS 客户托管密钥加密的对象,则必须与共享所有此类 KMS 密钥 AWS Data Exchange。有关使用 KMS 密钥加密您的 Amazon S3 存储桶中的对象时所需的先决条件的信息,请参阅发布 AWS Data Exchange 包含 Amazon S3 数据访问权限的产品。要与共享这些 KMS 密钥 AWS Data Exchange,请执行以下操作:
-
在配置 Amazon S3 数据访问页面的客户托管 KMS 密钥中,选择从您的密钥中选择 AWS KMS keys或输入 AWS KMS key ARN,然后选择AWS KMS keys当前用于加密 Amazon S3 共享位置的所有密钥。 AWS Data Exchange 使用这些 KMS 密钥为收件人创建访问您的共享位置的授权。有关更多信息,请参阅 AWS KMS中的授权。
注意
AWS KMS 每个 KMS 密钥的授权上限为 50,000 个,包括先前存在的授权。
-
-
查看您的 Amazon S3 位置、所选的 KMS 密钥和配置详情,然后选择保存并继续。
步骤 3:审核并定版数据集
审核并定版新创建的数据集。如果您想创建并添加另一个 Amazon S3 数据访问,以共享对其他 Amazon S3 存储桶、前缀和对象的访问权限,请选择添加另一个 Amazon S3 数据访问。
注意
当需要共享对托管在不同的 Amazon S3 存储桶(而不是先前在初始 Amazon S3 数据访问中选择的存储桶)中的数据的访问权限时,我们建议您这样做。
如果您想在发布之前进行更改,可以选择保存草稿,将数据集另存为草稿。然后,选择定版数据集,将其添加到您的数据授权中。
步骤 4:创建新数据授权
在创建了至少一个数据集并完成包含资产的修订之后,就可以将该数据集作为数据授权的一部分使用了。
创建新数据授权
-
在 AWS Data Exchange 控制台
左侧导航窗格的已交换的数据授权下,选择已发送的数据授权。 -
从已发送的数据授权中,选择创建数据授权以打开定义数据授权向导。
-
在选择拥有的数据集部分,选中要添加的数据集旁边的复选框。
注意
您选择的数据集必须具有最终修订版。未完成修订版的数据集无法添加到数据授权中。
与共享的数据产品中包含的数据集不同 AWS Marketplace,添加到数据授权中的数据集没有修订访问规则,这意味着一旦数据授予获得批准,数据授权的接受者将有权访问给定数据集的所有最终修订版(包括在数据授权创建之前完成的历史修订版)。
-
在授予概览部分中,输入接收者将看到的有关您的数据授权的信息,包括数据授权名称和数据授权描述。
-
选择下一步。
有关更多信息,请参阅 中的产品最佳实践 AWS Data Exchange。
-
在 “收件人访问信息” 部分的 “AWS 账户 ID” 下,输入应获得数据授予的收款人账户的 AWS 账户 ID。
-
在访问结束日期下,为数据授权的到期时间选择特定的结束日期,或者,如果该授予应永久存在,则选择无结束日期。
-
选择下一步。
-
在审核并发送部分中,审核您的数据授权信息。
-
如果您确定要创建数据授权并将其发送给选定的接收者,请选择创建并发送数据授权。
您现在已经完成创建数据授权的手动操作部分。数据授权将显示在 “已发送数据授权” 页面的 “已发送数据授权” 选项卡上,显示其状态为 “待接受”,直到接收者账户接受为止。