为洁净室身份提升配置 Snowflake Trust 关系
对于身份提升用例的每个协作邀请,完成所需的 Snowflake 设置,然后在 Data 360 中接受邀请。Data 360 会在验收时自动测试 Snowflake 连接。
所需的 Edition
| 适用于:Enterprise Edition(家庭组织) |
| 您无法在 Developer Edition 中收到或接受协作邀请。 |
| 所需用户权限 | |
|---|---|
| 要在 Data 360 中创建 Snowflake 数据联盟连接: | 系统管理员简档或权限集:
|
开始之前:
- 完成 Snowflake 环境规划身份提升。
- 在 Data 360 中打开待处理协作邀请,并从接受洁净室协作邀请向导中记下这些值 — 您需要在以下设置步骤中使用它们:
- 外部 ID — 由 Data 360 为该协作生成的唯一标识符
- 使用者 Salesforce 域 URL — 使用者的 Salesforce 组织域
设置 Snowflake 环境
-
在 Snowflake 工作表中,打开 SQL 编辑器并完成这些任务,以设置数据容器、权限和服务用户。
备注 这些代码示例仅用于指导。在生产中使用前,在 Sandbox 中测试和验证所有代码。 -
为该客户创建专用数据库和方案,以便他们的数据与其他协作保持隔离。
CREATE DATABASE CUSTOMER_DB; CREATE SCHEMA CUSTOMER_DB.ENRICHED_OUTPUT;请注意数据库和方案名称 — 您在接受邀请时在 Data 360 中输入它们。
-
创建输出表。
这些是丰富作业写入的表。用双引号定义所有列名,以保留大小写。如果没有双引号,Snowflake 会自动大写列名,这会导致 Data 360 读取表时出错。
重要 在每个输出表上定义主键。Data 360 会在发现表时读取主键元数据,如果任何输出表缺少主键,协作将无法激活。对于电子邮件和电话表,在联系点值列上定义主键,而不是相关方 ID,因为相关方 ID 可以在记录之间重复。-- 1. Bridge Table: links consumer Individual IDs to your internal IDs CREATE OR REPLACE TABLE CUSTOMER_DB.ENRICHED_OUTPUT.PartnerIndBridgeTable ( "SourceId" VARCHAR(255), -- Consumer's Individual ID "PartnerIndividualId" VARCHAR(255) -- Your internal unique identifier ); -- 2. Individual Table: enriched name and identity attributes CREATE OR REPLACE TABLE CUSTOMER_DB.ENRICHED_OUTPUT.PartnerBoostedIndividualTable ( "IndividualId" VARCHAR(255), -- Matches PartnerIndividualId in bridge table "ssot__FirstName__c" VARCHAR(255), "ssot__LastName__c" VARCHAR(255), "EnrichmentTimestamp" TIMESTAMP_NTZ ); -- 3. Email Table: enriched email addresses CREATE OR REPLACE TABLE CUSTOMER_DB.ENRICHED_OUTPUT.PartnerBoostedEmailTable ( "PartyId" VARCHAR(255), -- Links to IndividualId in table 2 "EnrichedEmail" VARCHAR(255), "EnrichmentTimestamp" TIMESTAMP_NTZ ); -- 4. Phone Table: enriched phone numbers CREATE OR REPLACE TABLE CUSTOMER_DB.ENRICHED_OUTPUT.PartnerBoostedPhoneTable ( "PartyId" VARCHAR(255), -- Links to IndividualId in table 2 "EnrichedPhone" VARCHAR(50), "EnrichmentTimestamp" TIMESTAMP_NTZ );
备注 此处显示的表名称是示例。使用您在接受邀请时提供的其他元数据 JSON 中声明的实际名称。Data 360 使用该 JSON 中的objectApiName值在 Snowflake 模式中查找表。 -
部署丰富作业,并将其配置为针对此客户的方案。
设置作业代码,以便在接受后从 Data 360 在您的环境中创建的 Snowflake 数据共享中读取,根据您的身份图运行身份解析,并将丰富输出写入您创建的数据库和方案。
先不要运行作业 — 使用者的数据在 Snowflake 环境中不可用,直到您在 Data 360 中接受邀请。
备注 如果您为多个客户使用一个 Snowflake 帐户,丰富作业可以访问该帐户中的所有数据库。将作业的执行角色严格限定在此客户的数据库和方案的范围内,并定期审计角色授予,以确认没有跨客户的访问权限。 -
为 Data 360 创建专用角色。
专用角色是您分配给 Snowflake oidC 服务用户的命名权限集。
CREATE ROLE IF NOT EXISTS DATACLOUD_SF_ROLE; -
授予角色对仓库、数据库和模式的访问权限。
要查看帐户中的可用仓库,转到 Snowflake 控制台中的管理员 > 仓库,并记下要使用的仓库的名称。这些命令授予角色使用仓库和访问此客户的数据库和方案的权限。
GRANT USAGE ON WAREHOUSE MY_WH TO ROLE DATACLOUD_SF_ROLE; GRANT USAGE ON DATABASE CUSTOMER_DB TO ROLE DATACLOUD_SF_ROLE; GRANT USAGE ON SCHEMA CUSTOMER_DB.ENRICHED_OUTPUT TO ROLE DATACLOUD_SF_ROLE;用仓库名称替换
MY_WH,用您创建的数据库替换CUSTOMER_DB,用您创建的模式替换ENRICHED_OUTPUT。请记下仓库名称 — 您在接受邀请时在 Data 360 中输入。 -
授予角色读取输出表的权限。
在丰富作业运行后,Data 360 会读取丰富输出表,以在消费者组织中创建丰富 DMO。这些授权授予角色对所有输出表的“选择”访问权限,包括现有表和您稍后创建的任何表。
GRANT SELECT ON ALL TABLES IN SCHEMA CUSTOMER_DB.ENRICHED_OUTPUT TO ROLE DATACLOUD_SF_ROLE; GRANT SELECT ON FUTURE TABLES IN SCHEMA CUSTOMER_DB.ENRICHED_OUTPUT TO ROLE DATACLOUD_SF_ROLE; -
使用 Workload Identity Federation (OIDC) Trust 创建服务用户。
这是 Data 360 用于连接到 Snowflake 帐户并读取丰富输出表的专用 Snowflake 用户。与普通用户不同,它没有密码,而是信任使用者的 Salesforce 组织颁发的登录令牌。只有作为该特定使用者的组织进行身份验证的 Data 360 才能以此用户身份登录。
使用您在开始之前部分中记录的外部 ID 和消费者 Salesforce 域 URL。
CREATE OR REPLACE USER sf_oidc_user WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://yourcompany.my.salesforce.com/services/connectors' SUBJECT = 'your-external-id' OIDC_AUDIENCE_LIST = ('https://yourcompany.my.salesforce.com') ) TYPE = SERVICE DEFAULT_ROLE = DATACLOUD_SF_ROLE;ISSUER— 输入 Consumer Salesforce 域 URL,后跟/services/connectors。这告诉 Snowflake 哪个 Salesforce 组织可以为此用户颁发登录令牌。例如,https://yourcompany.my.salesforce.com/services/connectors。SUBJECT— 输入外部 ID。这将 Trust 固定到此特定协作 — 即使相同的 Salesforce 组织发送令牌,该令牌也不能访问不同的客户数据。OIDC_AUDIENCE_LIST— 输入没有路径后缀的 Consumer Salesforce 域 URL。例如,https://yourcompany.my.salesforce.com。
备注 创建服务用户 — 不要转换现有用户。将现有 Snowflake 用户更改为服务用户会使该用户无法交互登录 Snowflake,并将日常权限与机器访问权限混合在一起。这样做会使客户更难审计和撤销。专用服务用户保持 Data 360 的访问权限完全隔离,并易于移除。如果您为多个客户使用单个 Snowflake 帐户,请在服务用户名中包含客户名称,以避免冲突,例如Customer1_DC_User。请注意服务用户名 — 您在接受邀请时在 Data 360 中输入。
-
将角色分配给服务用户。
GRANT ROLE DATACLOUD_SF_ROLE TO USER sf_oidc_user;服务用户具有您设置的权限。 -
在转到 Data 360 前,请确认您拥有 Snowflake 环境中的这些值,并在接受向导中输入。
Data 360 中的字段 Snowflake 中的值 Snowflake 帐户 URL Snowflake 帐户的完整 URL,例如 https://myorg.snowflakecomputing.com服务用户 您为服务用户提供的名称 数据仓库名称 您使用的仓库名称 数据库名称 您创建的数据库名称 方案名称 您创建的方案名称
在 Data 360 中接受协作邀请
- 返回 Data 360 中的接受洁净室协作邀请向导,并完成这些接受步骤:选择数据空间,然后创建或选择映射的模板。
-
在 " Snowflake Trust关系 " 部分中,验证页面上显示的外部 ID 和 Consumer Salesforce Domain URL 值是否与您在 Snowflake 中创建服务用户时在
SUBJECT和ISSUER字段中使用的值相匹配。这些值是只读的。Data 360 会在此处显示,以便您在继续之前确认 Snowflake 设置是否正确。 -
在“Snowflake 连接设置”部分,输入您在设置步骤中记录的值。
- Snowflake 帐户 URL:您的 Snowflake 帐户的完整 URL,例如
https://myorg.snowflakecomputing.com - 服务用户:您在 Snowflake 中创建的服务用户的名称
- 数据仓库名称:与服务用户关联的仓库名称
- 数据库名称:您在 Snowflake 中创建的数据库
- 模式名称:您在 Snowflake 中创建的模式
- Snowflake 帐户 URL:您的 Snowflake 帐户的完整 URL,例如
-
单击测试连接。
Data 360 尝试使用服务用户连接到 Snowflake 帐户。如果测试失败,请检查 Snowflake 服务用户中的
SUBJECT和ISSUER值是否与页面上显示的外部 ID 和消费者 Salesforce 域 URL完全匹配。还要检查 Snowflake 帐户是否在与使用者的 Data 360 区域兼容的区域中。 - 单击下一步,接受邀请。
