跨多个账户复制安全集成和网络策略¶
本主题提供了有关如何复制安全集成,以及对每个对象使用故障转移/故障恢复的信息,并假定您已熟悉复制和故障转移/故障恢复其他账户级对象(例如用户、角色、仓库)的方法。
有关详细信息,请参阅 跨多个账户的复制和故障转移简介。
本主题内容:
概述¶
Snowflake 支持复制联合 SSO(即 SAML2)、OAuth 和 SCIM 的网络策略和安全集成,并支持为每个网络策略和集成启用故障转移/故障恢复。
测试每个网络策略和安全集成的复制和故障转移/故障恢复的一般方法如下:
确定要复制的源账户和目标账户,并确定连接 URL。
完成源账户中的步骤。
完成目标账户中的步骤。
测试故障转移/故障恢复。
请注意,由于网络策略和安全集成具有不同的用例,因此源账户和目标账户针对每个对象的具体步骤也略有不同。
有关详细信息,请参阅:
复制 SAML2 安全集成¶
通过在 SAML2 安全集成定义中指定 连接 URL,复制 SAML2 安全集成,进而将源账户和目标账户链接到身份提供商。
请务必更新身份提供商以指定连接 URL,并且用户需存在于源账户中。如果没有这些更新,则无法进行用户验证,这将导致用户无法访问目标账户。
- 当前限制:
对于 SAML SSO 到 Snowflake,复制指定连接 URL 的 SAML2 安全集成仅受当前主连接支持,不受辅助连接支持。请注意,对于故障转移,结果是将辅助连接提升为主连接。故障转移后,SAML SSO 将在新的主连接上运行。
如果主连接和辅助连接都需要 SAML SSO,则在两个 Snowflake 账户上独立创建和管理 SAML2 安全集成。
对于此过程,假设如下:
源账户:
https://example-northamericawest.snowflakecomputing.cn/
目标账户:
https://example-northamericaeast.snowflakecomputing.cn/
连接 URL:
https://example-global.snowflakecomputing.cn
目标账户中不存在辅助连接。
此过程是执行以下操作的代表性示例:
将 SAML2 安全集成从源账户复制到目标账户。
测试故障转移。
将源账户中的辅助连接提升为主连接。
源账户步骤(包括 IdP 步骤):
如果源账户已配置为 数据库故障转移/故障恢复以及 Client Redirect,请跳转至下一步。
否则,请使用 ALTER CONNECTION 命令启用故障转移:
alter connection global enable failover to accounts example.northamericaeast;
使用 Okta 作为身份提供商的代表性示例,在 Okta 中创建 Snowflake 应用程序 (https://www.okta.com/integrations/snowflake/#capabilities),用于指定连接 URL。更新 Okta 字段,如下所示:
Label:
Snowflake
Subdomain:
example-global
Browser plugin auto-submit:选中该框以启用用户登录页面时自动登录。
在源账户中,更新 SAML2 安全集成,为
saml2_snowflake_issuer_url
和saml2_snowflake_acs_url
安全集成属性指定连接 URL。create or replace security integration my_idp type = saml2 enabled = true saml2_issuer = 'http://www.okta.com/exk6e8mmrgJPj68PH4x7' saml2_sso_url = 'https://example.okta.com/app/snowflake/exk6e8mmrgJPj68PH4x7/sso/saml' saml2_provider = 'OKTA' saml2_x509_cert='MIIDp...' saml2_sp_initiated_login_page_label = 'OKTA' saml2_enable_sp_initiated = true saml2_snowflake_issuer_url = 'https://example-global.snowflakecomputing.cn' saml2_snowflake_acs_url = 'https://example-global.snowflakecomputing.cn/fed/login';
在 Okta 中,将 Snowflake 应用程序分配给用户。有关详细信息,请参阅 将应用程序集成分配给用户 (https://help.okta.com/en/prod/Content/Topics/Provisioning/lcm/lcm-assign-app-user.htm)。
验证源账户源账户的 SSO 是否对 Okta 中 Snowflake 应用程序指定的用户和源账户中的用户有效。
请注意,IdP 发起和 Snowflake 发起的 SSO 流量都应支持 SSO。有关详细信息,请参阅 支持的 SSO 工作流程。
在源账户中,如果故障转移组尚不存在,请 创建 故障转移组以添加安全集成。请注意,此示例具有代表性,其中包括可能需要复制或不需要复制的其他账户对象。
如果故障转移组已存在,请 更改 故障转移组以添加集成。
create failover group FG object_types = users, roles, warehouses, resource monitors, integrations allowed_integration_types = security integrations allowed_accounts = example.northamericaeast replication_schedule = '10 MINUTE';
目标账户步骤:
在复制之前,请分别执行 SHOW USERS 和 SHOW INTEGRATIONS 命令,验证目标账户中存在的用户数和安全集成数。
创建辅助连接。有关详细信息,请参阅 CREATE CONNECTION。
create connection GLOBAL as replica of example.northamericawest.global;
在目标账户中创建辅助故障转移组。有关详细信息,请参阅 CREATE FAILOVER GROUP。
create failover group fg as replica of example.northamericawest.fg;
创建辅助故障转移组时,系统将自动执行初始刷新。
要手动刷新目标账户中的辅助故障转移组,请执行以下语句。有关详细信息,请参阅 ALTER FAILOVER GROUP 命令。
alter failover group fg refresh;
如果刷新操作成功,则目标账户应包括已添加到源账户且以前未存在于目标账户中的新用户。同样,目标账户应包括指定连接 URL 的 SAML2 安全集成。
执行以下命令验证刷新操作是否成功:
SHOW INTEGRATIONS (应包括1个新集成)
SHOW USERS (应包括添加的新用户数量)
DESCRIBE INTEGRATION (针对集成
myidp
)
将目标账户中的辅助连接提升为主连接。执行以下命令后,用户可以使用 SAML SSO 对新目标账户进行身份验证。
alter connection global primary;
复制 SCIM 安全集成¶
复制 SCIM 安全集成可使目标账户在刷新目标账户后合并源账户的 SCIM 对更新(例如,添加新用户、添加新角色)。
复制 SCIM 安全集成后,两个 Snowflake 账户都能够从身份提供商接收 SCIM 更新。但是,Snowflake 只允许将一个账户指定为 *主*(即源)账户,并且是从身份提供商接收 SCIM 更新的主账户。
在复制 SCIM 集成后,您可以选择将其他账户指定为主账户,以便接收 SCIM 更新。请注意,只有在刷新目标账户后,目标账户才能接收源账户的 SCIM 更新。
对于此过程,假设如下:
源账户:
https://example-northamericawest.snowflakecomputing.cn/
目标账户:
https://example-northamericaeast.snowflakecomputing.cn/
连接 URL:
https://example-global.snowflakecomputing.cn
目标账户中存在辅助连接(即只需进行刷新操作)。
此过程是执行以下操作的代表性示例:
将 SCIM 安全集成从源账户复制到目标账户。
在 Okta 中添加新用户,将新用户推送到源账户,然后将新用户复制到目标账户。
刷新故障转移组。
将目标账户中的辅助连接提升为主连接。
源账户步骤:
执行 SHOW CONNECTIONS 验证源账户中的连接是否为主连接。如果不是主连接,请使用 ALTER CONNECTION 命令将源账户中的连接提升为主连接。
如果源账户中已配置 Okta SCIM 安全集成,请跳转至下一步。
否则,请在源账户中配置 Okta SCIM 安全集成。
create role if not exists okta_provisioner; grant create user on account to role okta_provisioner; grant create role on account to role okta_provisioner; grant role okta_provisioner to role accountadmin; create or replace security integration okta_provisioning type = scim scim_client = 'okta' run_as_role = 'OKTA_PROVISIONER'; select system$generate_scim_access_token('OKTA_PROVISIONING');
请务必更新 Snowflake 的 Okta SCIM 应用程序。有关详细信息,请参阅 Okta 配置。
在 Okta 中,在 Snowflake 的 Okta 应用程序中 创建一个新用户 (https://www.okta.com/integrations/snowflake/#capabilities)。
通过在 Snowflake 中执行 SHOW USERS 命令来验证用户是否被推送到 Snowflake。
如果故障转移组已指定
security integrations
,请跳转至下一步。如果您已在 目标账户中出于 SAML SSO 目的中配置了故障转移组,则会出现这一步(本主题内容)。否则,请使用 ALTER FAILOVER GROUP 命令修改现有故障转移组以指定
security integrations
。alter failover group fG set object_types = users, roles, warehouses, resource monitors, integrations allowed_integration_types = security integrations;
此时,您可以选择刷新辅助故障转移组,如 SCIM 的目标账户步骤 所示,以确保源账户中的新用户位于目标账户中。
现在,选择刷新辅助故障转移组可以轻松检查,以确保对源账户的更改(按此顺序添加新用户)在目标账户中可见。
但是,如果需要或希望在身份提供商中执行其他工作(例如修改其他用户或更新角色分配),可以立即继续执行该工作,然后在稍后的一次操作中刷新辅助故障转移组。
目标账户步骤:
在复制之前,请分别执行 SHOW USERS 和 SHOW INTEGRATIONS 命令,验证目标账户中存在的用户数和安全集成数。
刷新辅助故障转移组,更新目标账户以包含新用户(以及在 Okta 和源账户中所做的任何其他更改)。
alter failover group fg refresh;
通过执行 SHOW USERS 命令验证新用户是否已添加到目标账户。
(可选)将目标账户中的辅助故障转移组和辅助连接提升为主连接。这将会把目标账户提升为新的源账户。
故障转移组:
alter failover group fg primary;
连接:
alter connection global primary;
复制 OAuth 安全集成¶
复制 OAuth 安全集成包括 Snowflake OAuth 安全集成和 External OAuth 安全集成。
请注意以下事项:
- Snowflake OAuth:
复制并配置故障转移/故障恢复后,通过 OAuth 客户端连接到源账户或目标账户的用户无需重新对目标账户进行身份验证。
- External OAuth:
复制并配置故障转移/故障恢复后,通过 OAuth 客户端连接到源账户或目标账户的用户 可能 需要重新对目标账户进行身份验证。
如果未将 OAuth 授权服务器配置为颁发刷新令牌,则可能需要重新身份验证。因此,请确保 OAuth 授权服务器可颁发刷新令牌,以便 OAuth 客户端可以连接到 Snowflake 的源账户和目标账户。
对于此过程,假设如下:
源账户:
https://example-northamericawest.snowflakecomputing.cn/
目标账户:
https://example-northamericaeast.snowflakecomputing.cn/
连接 URL:
https://example-global.snowflakecomputing.cn
目标账户中存在辅助连接(即只需进行刷新操作)。
源账户中已存在 Snowflake OAuth 或 External OAuth 安全集成。
此过程是执行以下操作的代表性示例:
复制 OAuth 安全集成。
刷新故障转移组。
将目标账户中的辅助连接提升为主连接。
源账户步骤:
如果故障转移组已指定
security integrations
,请跳转至下一步。如果您已在 目标账户中出于 SAML SSO (本主题内容)目的或 SCIM (同样为本主题内容)中配置了故障转移组,则会出现这一步。否则,请使用 ALTER FAILOVER GROUP 命令修改现有故障转移组以指定
security integrations
。alter failover group fG set object_types = users, roles, warehouses, resource monitors, integrations allowed_integration_types = security integrations;
目标账户步骤:
为了包含 OAuth 安全集成对象,刷新辅助故障转移组来更新目标账户。
alter failover group fg refresh;
使用您选择的 OAuth 客户端验证每个 Snowflake 账户的连接。
(可选)将目标账户中的辅助故障转移组和辅助连接提升为主连接。这将会把目标账户提升为新的源账户。
故障转移组:
alter failover group fg primary;
连接:
alter connection global primary;
如果您完成了上一步,请重新验证是否可以使用您选择的 OAuth 客户端连接到每个 Snowflake 账户。
复制网络策略¶
通过将网络策略从源账户复制到目标账户,管理员可以根据传入请求源的网络标识符限制对目标账户的访问。
复制网络策略引用和分配¶
复制网络策略将复制网络策略对象 和 任何网络策略引用/分配。例如,如果网络策略引用了源账户中的网络规则,而这两个对象都存在于目标账户中,那么网络策略就会使用目标账户中的相同网络规则。同样,如果已为用户分配了网络策略,且该用户同时存在于源账户和目标账户中,则复制网络策略会将网络策略分配给目标账户中的用户。
复制网络策略引用和分配时,假定被引用的对象和网络策略被分配的对象也会被复制。如果未正确复制支持的对象类型,则 Snowflake 将无法在目标账户中执行刷新操作。
如果目标账户中尚不存在引用的对象或网络策略所分配的对象,请将其对象类型与网络策略添加到同一复制组或故障转移组中。以下示例演示了在目标账户中不存在支持对象的情况下所需的设置。
- 使用网络规则的网络策略
复制组或故障转移组必须包括
network policies
和databases
。网络规则是架构级对象,与包含这些规则的数据库一起复制。例如:CREATE FAILOVER GROUP fg OBJECT_TYPES = network policies, databases ALLOWED_DATABASES = testdb2 ALLOWED_ACCOUNTS = myorg.myaccount2;
- 分配给账户的网络策略
复制组或故障转移组必须包括
network policies
和account parameters
。如果网络策略使用网络规则,则还必须包括databases
。例如:CREATE FAILOVER GROUP fg OBJECT_TYPES = network policies, account parameters, databases ALLOWED_DATABASES = testdb2 ALLOWED_ACCOUNTS = myorg.myaccount2;
- 分配给用户的网络策略
复制组或故障转移组必须包括
network policies
和users
。如果网络策略使用网络规则,则还必须包括databases
。例如:CREATE FAILOVER GROUP fg OBJECT_TYPES = network policies, users, databases ALLOWED_DATABASES = testdb2 ALLOWED_ACCOUNTS = myorg.myaccount2;
- 分配给安全集成的网络策略
网络策略复制适用于在 Snowflake OAuth 和 SCIM 安全集成 中指定的网络策略,前提是复制组或故障转移组包括
integrations
、security integrations
和network policies
。如果网络策略使用网络规则,则还必须包括databases
。CREATE FAILOVER GROUP fg OBJECT_TYPES = network policies, integrations, databases ALLOWED_DATABASES = testdb2 ALLOWED_INTEGRATION_TYPES = security integrations ALLOWED_ACCOUNTS = myorg.myaccount2;
示例¶
对于此示例,假设如下:
源账户:
https://example-northamericawest.snowflakecomputing.cn/
目标账户:
https://example-northamericaeast.snowflakecomputing.cn/
连接 URL:
https://example-global.snowflakecomputing.cn
目标账户中存在辅助连接(即只需进行刷新操作)。
网络策略存在于源账户中。
Snowflake OAuth 和/或 SCIM 安全集成已存在于源账户中,并且集成指定了网络策略。
此过程示例可执行以下操作:
复制网络策略以及用于限制网络流量的网络规则。
复制分配给网络策略的安全集成。
刷新故障转移组。
验证网络策略激活。
将源账户中的辅助连接提升为主连接。
源账户步骤:
执行 SHOW NETWORK POLICIES 命令,验证源 Snowflake 账户中是否存在网络策略。
执行 SHOW INTEGRATIONS 命令,识别安全集成,然后在 Snowflake OAuth 安全集成上执行 DESCRIBE INTEGRATION 命令,验证 Snowflake OAuth 和/或 SCIM 安全集成是否包含网络策略。
使用 ALTER FAILOVER GROUP 命令更新故障转移组,使其包含
network policies
和account parameters
。alter failover group fG set object_types = users, roles, warehouses, resource monitors, integrations, network policies, account parameters allowed_integration_types = security integrations;
目标账户步骤:
刷新辅助故障转移组,更新目标账户,使其包含网络策略对象和指定网络策略的 Snowflake OAuth 安全集成。
alter failover group fg refresh;
执行 SHOW POLICIES NETWORK 命令,验证网络策略对象是否存在,也可以在安全集成上执行 SECURITY INTEGRATION DESCRIBE 命令,验证 Snowflake OAuth 安全集成是否已指定复制的网络策略。
如 确定在账户或用户级别激活的网络策略 中所示,验证网络策略是否激活。
使用您选择的 Snowflake OAuth 客户端验证是否连接到每个 Snowflake 账户。
可选择将目标账户中的辅助故障转移组和辅助连接提升为主连接。这将会把目标账户提升为新的源账户。
故障转移组:
alter failover group fg primary;
连接:
alter connection global primary;
如果您完成了上一步,请您重新验证是否可以使用所选择的 Snowflake OAuth 客户端连接到每个 Snowflake 账户。
为 Snowflake Connector for ServiceNow 复制集成和对象¶
Snowflake Connector for ServiceNow 允许 Snowflake 从 ServiceNow 中引入数据。连接器需要 Snowflake 账户中的以下对象:
密钥。
type = api_authentication
的安全集成。API 集成。
用于存储引入数据的数据库。
供连接器使用的仓库。
用于管理这些对象访问的账户角色。
您可以在安装连接器之前创建这些对象,然后可以将这些对象复制到目标账户中。复制这些对象后,即可在目标账户中安装连接器。由于该安装取决于 Snowflake 提供的共享,所以连接器必须安装在目标账户中。在连接器安装期间,您需要从共享中创建数据库,并且无法复制从共享中创建的数据库。
根据管理账户对象复制的方式,您可以创建一个或多个复制组或故障转移组。使用单个复制组可以集中管理对象的复制,避免出现复制了某些对象而不复制其他对象的情况。否则,您必须仔细协调复制操作,才能确保将所有对象复制到目标账户中。
例如,您可以为数据库创建一个复制组。此复制组(例如 rg1
)指定包含密钥的数据库和用于存储 ServiceNow 数据的数据库。另一个复制组(例如 rg2
)指定用户、角色和集成对象以及向用户授予这些角色。在这种情况下,如果先复制集成,然后决定刷新目标账户使其包含密钥数据库、用户和角色,那么复制刷新操作就会成功。
但是,如果在复制集成之前复制用户和角色以及包含密钥的数据库,则在复制安全集成之前将使用占位符密钥;占位符密钥可防止悬空引用。复制安全集成后,占位符密钥将替换为真实密钥。
此过程是执行以下操作的代表性示例:
复制集成以及包含密钥和引入数据的数据库。
刷新故障转移组。
将源账户中的辅助连接提升为主连接。
复制后安装并使用连接器。
对于此过程,假设如下:
源账户:
https://example-northamericawest.snowflakecomputing.cn/
目标账户:
https://example-northamericaeast.snowflakecomputing.cn/
连接 URL:
https://example-global.snowflakecomputing.cn
目标账户中存在辅助连接(即只需进行刷新操作)。
用于限制访问的身份验证和网络策略的其他安全集成已复制。
源账户步骤:
通过对每个对象类型执行 SHOW 命令,验证连接器的对象是否存在于源 Snowflake 账户中。
show secrets in database secretsdb; show security integrations; show api integrations; show tables in database destdb; show warehouses; show roles;
请注意,
secretsdb
是包含密钥的数据库名称,而和destdb
是包含从 ServiceNow 中所引入数据的数据库的名称。使用 ALTER FAILOVER GROUP 命令更新故障转移组,使其包含 API 集成以及包含密钥和引入数据的数据库。
alter failover group fg set object_types = databases, users, roles, warehouses, resource monitors, integrations, network policies, account parameters allowed_databases = secretsdb, destdb allowed_integration_types = security integrations, api integrations;
目标账户步骤:
刷新辅助故障转移组,将集成和数据库复制到目标账户中。
alter failover group fg refresh;
使用以下 SHOW 命令,验证复制对象是否存在。
show secrets; show security integrations; show api integrations; show database; show tables in database destdb; show roles;
使用您选择的方法(例如浏览器、SnowSQL)验证是否可以连接到每个 Snowflake 账户。
可选择将目标账户中的辅助故障转移组和辅助连接提升为主连接。这将会把目标账户提升为新的源账户。
故障转移组:
alter failover group fg primary;
连接:
alter connection global primary;
完成上一步之后,请您重新验证是否可以连接到每个 Snowflake 账户。
此时,目标账户中包含复制的对象,用户可以登录。但是,如果要在目标账户中使用连接器,还需要采取额外的步骤。
在托管 Snowflake 账户的云平台中,更新与 API 集成相关的远程服务。
有关详细信息,请参阅 更新 API 集成的远程服务。
手动或使用 Snowsight 安装连接器。有关详细信息,请参阅: