Snowflake Data Clean Room:来自 Amazon S3 桶的外部数据¶
在 Snowflake Data Clean Room 中分析的数据可以是 Snowflake 的原生数据,也可以位于外部云提供商存储中,或者两者兼而有之。连接器 允许协作者从 Clean Room 访问来自云提供商的外部数据。
Snowflake 使用以下策略在 Clean Room 中提供外部数据:
如果协作者有 Snowflake 账户,则连接器通过身份验证后,来自外部云存储的数据将立即在 Snowflake 账户中物化。
如果协作者不是 Snowflake 客户,并且使用 托管账户 加入 Clean Room,则连接器使用 Snowflake 外部表 来提供数据。只有与外部表相关的元数据存储在 Snowflake 中。
本主题介绍如何使用连接器,以便 Clean Room 分析人员可以访问来自 Amazon S3 桶的外部数据。
重要
第三方连接器不由 Snowflake 提供,并可能受附加条款的约束。 提供这些集成是为了方便您的使用,但您必须对从这些集成发送或接收的任何内容负责。
连接到 S3 桶¶
要允许 Clean Room 协作者访问来自 Amazon S3 存储的数据,请执行以下步骤:
在 AWS 中,创建具有以下权限的 IAM 策略:
s3:GetBucketLocation
s3:GetObject
s3:GetObjectVersion
s3:ListBucket
在 AWS 中,创建 IAM 角色,引用新的 IAM 策略。
在 AWS 中,复制 S3 桶和 IAM 角色 的标识符。
在 Clean Room 环境中,创建连接器。
在 AWS 中,使用来自 Clean Room 环境的服务账户标识符,更新 IAM 角色。
在 Clean Room 环境中,使用 AWS 对连接器进行身份验证。
以下各部分将更详细地讨论这些步骤。
在 AWS 中创建 IAM 策略¶
Snowflake 建议为连接器创建专用的 IAM 策略,包含访问 S3 桶所需的权限。在后续步骤中,您将此策略添加到表示连接器标识的 IAM 角色。
要创建包含 S3 桶访问权限的 IAM 策略,请执行以下步骤:
登录 AWS Management Console。
从 Console Home 仪表板中,选择 Identity and Access Management (IAM)。您可以使用搜索来找到它。
在左侧导航栏中,选择 Account settings。
在 Security Token Service (STS) 部分中,找到与 Clean Room 环境关联的账户区域,然后打开 Active。
要查找与 Clean Room 环境关联的账户区域,登录 Clean Room,然后选择 Connectors » Cleanrooms » Snowflake。
在左侧导航栏中,选择 Policies。
选择 Create policy。
在 Policy editor 部分中,选择 JSON。
复制以下策略正文并将其粘贴到策略编辑器,然后编辑 JSON 以包含桶名称 (
<bucket>
) and folder path prefix (<prefix>
). Be sure to keep the:::
format. For example, if your s3 bucket URI iss3://sales/customers/
, then the value of theResource
JSON field isarn:aws:s3:::sales/customers/*
。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<bucket>/<prefix>/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::<bucket>", "Condition": { "StringLike": { "s3:prefix": [ "<prefix>/*" ] } } } ] }
选择 Next。
输入策略名称(例如,
snowflake_cleanroom_access
),然后选择 Create policy。
在 AWS 中创建 IAM 角色¶
现在,您可以创建表示连接器标识的 AWS IAM 角色。在创建过程中,您将角色与新的 IAM 策略关联,授予连接器访问 S3 桶时所需的权限。
要创建新的 IAM 角色,请执行以下步骤:
登录 AWS Management Console。
从 Console Home 仪表板中,选择 Identity and Access Management (IAM)。
在左侧导航栏中,选择 Roles。
选择 Create role。
在 Trusted entity type 部分中,选择 AWS account。
在 An AWS account 部分中,选择 Another AWS account。
在 Account ID 字段中,输入包含 12 位数字的临时占位符值(例如,当前 AWS 账户的账户标识符)。您将在后续步骤中替换此值。
选择 Require external id,然后输入临时占位符值,例如
0000
。您将在后续步骤中替换此值。选择 Next。
在 Permissions policies 部分中,找到您在完成 在 AWS 中创建 IAM 策略 中的步骤时创建的策略,然后选中其复选框。
选择 Next。
输入角色名称(例如,
snowflake_cleanroom_connector
),然后选择 Create role。
复制 S3 桶和 IAM 角色标识符¶
在 Clean Room 环境中创建连接器时,您将需要 S3 桶和 IAM 角色的标识符。在创建连接器之前,请使用以下步骤复制并保存这些标识符。
要复制 IAM 角色标识符,请执行以下步骤:
登录 AWS Management Console。
从 Console Home 仪表板中,选择 Identity and Access Management (IAM)。
在左侧导航栏中,选择 Roles。
查找您在完成 在 AWS 中创建 IAM 角色 中的步骤时创建的角色,然后选中以将其打开。
在 Summary 部分中,找到 ARN,然后选择复制图标。为 后续步骤 保持此标识符。
要复制 S3 桶标识符,请执行以下步骤:
登录 AWS Management Console。
从 Console Home 仪表板中,选择 S3。
找到 S3 桶的名称,然后选中以将其打开。桶必须包含您希望在 Clean Room 中包含的数据。
导航到桶的前缀,然后选择 Copy S3 URI。不要尝试选择 Objects 部分中的按钮。为 后续步骤 保存 S3 URI。
创建连接器并复制服务账户详细信息¶
现在,您可以在 Clean Room 环境中创建连接器。创建连接器后,您需要复制有关其服务账户的详细信息,以便它与 AWS 中的 IAM 角色关联。
要在 Clean Room 环境中创建连接器,请执行以下步骤:
导航到 登录页面。
输入电子邮件地址,然后选择 Continue。
输入密码。
如果您与多个 Clean Room 环境相关联,请选择要使用的 Snowflake 账户。
在左侧导航栏中,选择 Connectors,然后展开 Amazon Web Services 部分。
在 AWS Role ARN 字段中,输入您从 AWS 中复制的 IAM 角色的标识符。例如,它可能是
arn:aws:iam::772412615275:role/mub00002_vhb71832_role
在 S3 Bucket URI 字段中,输入您从 AWS 中复制的 S3 桶的标识符。例如,它可能是
s3://sales/customer_data/
。选择 Create。Clean Room 会生成一个用于访问 AWS 的服务账户。
使用复制图标复制连接器服务账户的 Principal 和 External ID 标识符,并将其保存以供下一个任务使用。
使用服务账户详细信息更新 IAM 角色¶
现在,您可以使用与连接器的服务账户关联的标识符更新 IAM 角色。要更新 IAM 角色,请执行以下步骤:
登录 AWS Management Console。
从 Console Home 仪表板中,选择 Identity and Access Management (IAM)。
在左侧导航栏中,选择 Roles。
查找您在完成 在 AWS 中创建 IAM 角色 中的步骤时创建的角色,然后选中以将其打开。
选择 Trust relationships 选项卡。
选择 Edit trust policy。
修改信任策略的 JSON,以包含来自连接器服务账户的标识符。您在完成 创建连接器并复制服务账户详细信息 中的步骤时复制了这些标识符。对 JSON 进行以下更改:
将
AWS
JSON 字段的值替换为您从 Clean Room 环境中复制的 Principal 值。在以下示例中,Clean Room 环境中 Principal 的值为arn:aws:iam::115136555074:user/x4gy-s-p2345g38
将
sts:ExternalId
JSON 字段的值替换为您从 Clean Room 环境中复制的 External ID 值。在以下示例中,Clean Room 环境中 External ID 的值为UCA56729_SFCRole=4447_uht2344sdf3mrWLNRM0y3bE=
。{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::115136555074:user/x4gy-s-p2345g38" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "UCA56729_SFCRole=4447_uht2344sdf3mrWLNRM0y3bE=" } } } ] }
选择 Update policy。
对连接器进行身份验证¶
现在,您可以对连接器进行身份验证,以确保它可以访问 S3 桶。要对连接器进行身份验证,请执行以下步骤:
在 Clean Room 环境中,选择 Connectors 并展开 Amazon Web Services 部分。如果您已退出 Clean Room 环境,请参阅 登录 Web 应用程序。
选择要连接到的 S3 桶,然后选择 Authenticate。
移除在 AWS 上访问外部数据的权限¶
要从 Clean Room 环境中移除对 S3 桶的访问权限,请执行以下步骤:
导航到 登录页面。
输入电子邮件地址,然后选择 Continue。
输入密码。
如果您与多个 Clean Room 环境相关联,请选择要使用的 Snowflake 账户。
在左侧导航栏中,选择 Connectors 并展开 Amazon Web Services 部分。
找到当前连接的 S3 桶,然后选择垃圾桶图标。