自定义 SCIM 与 Snowflake 集成

自定义 SCIM 集成允许用户构建自己的应用程序,以便与其身份提供商交互,为 Snowflake 预置、映射和管理用户和角色。

目前,既非 Okta 也非 Microsoft Entra ID 的身份提供商为自定义 SCIM 集成提供支持。

创建 SCIM 应用程序后,请按照以下过程创建 Snowflake 安全集成并生成 SCIM API 授权令牌。保存授权令牌并将其包含在 SCIM API 请求标头中,如 SCIM API 引用 中所述。

限制

  • Snowflake 支持每个账户每个 SCIM 端点(例如 /Users 端点、/Groups 端点)最多 500 个并发请求。您的账户超过此阈值后,Snowflake 将返回 429 HTTP 状态代码(即请求过多)。请注意,此请求限制通常仅在初始预置期间发生,此时出现相对大量的请求(即超过 10,000 个)来预置用户或组。

  • 如果所创建的 Snowflake 账户 URL 包含下划线,则可以使用带有下划线或连字符的账户 URL 访问 Snowflake 账户。

    如果 SCIM 提供商对 SAML SSO 和 SCIM 重复使用相同的账户 URL,则不支持带下划线的 URLs。因此,请使用带连字符的账户 URL 来配置 SCIM。

    不包含下划线的 Snowflake 账户 URLs 不受此限制的约束。

  • 自定义 SCIM 集成不一定允许预置和管理嵌套组。在尝试使用自定义 SCIM 集成在 Snowflake 中预置嵌套组之前,请与身份提供商联系,以确定嵌套组是否可以与 SCIM 集成搭配使用。

  • 如果您使用与 Snowflake 服务的专用连接来访问 Snowflake,请确保未在集成设置中输入这些 URLs。输入公共端点(即没有 .privatelink),并确保网络策略允许从 IdP IP 地址进行访问,否则无法使用此集成。

    • 请注意,如果 IdP 和 Snowflake 账户都托管在 Microsoft Azure 中,则 Snowflake 中的 网络策略 必须允许从 公有云 (https://www.microsoft.com/en-us/download/details.aspx?id=56519) 或 US 政府云 (https://www.microsoft.com/en-us/download/details.aspx?id=57063) 的 所有 Microsoft Azure IP 地址进行访问。目前,网络策略需要所有 Microsoft Azure IP 地址。有关更多信息,请参阅 管理 SCIM 网络策略

  • 启用或禁用从自定义身份提供商到 Snowflake 的密码同步。

    仅 Okta SCIM 集成支持在 Snowflake 安全集成中设置 SYNC_PASSWORD 属性。

先决条件

在预置用户或组之前,请确保 Snowflake 中的 网络策略 允许从与组织对应的 IP 范围进行访问。有关更多信息,请参阅 管理 SCIM 网络策略

创建自定义 SCIM 安全集成和 API 令牌

Snowflake 配置过程会创建了一个 SCIM 安全集成,以允许在身份提供商中创建的用户和角色由 Snowflake 中的 GENERIC_SCIM_PROVISIONER SCIM 角色拥有,并会创建一个访问令牌以在 SCIM API 请求中使用。访问令牌的有效期为六个月。过期后,请使用如下所示的 SYSTEM$GENERATE_SCIM_ACCESS_TOKEN 手动创建新的访问令牌。

备注

要使 SCIM 集成的现有访问令牌无效,请执行 DROP INTEGRATION 语句。

要继续将 SCIM 与 Snowflake 一起使用,请使用 CREATE SECURITY INTEGRATION 语句重新创建 SCIM 集成,并使用 SYSTEM$GENERATE_SCIM_ACCESS_TOKEN 生成新的访问令牌。

在首选的 Snowflake 客户端中执行以下 SQL 语句。下面对每个语句进行了解释。

use role accountadmin;
create role if not exists generic_scim_provisioner;
grant create user on account to role generic_scim_provisioner;
grant create role on account to role generic_scim_provisioner;
grant role generic_scim_provisioner to role accountadmin;
create or replace security integration generic_scim_provisioning
    type=scim
    scim_client='generic'
    run_as_role='GENERIC_SCIM_PROVISIONER';
select system$generate_scim_access_token('GENERIC_SCIM_PROVISIONING');
Copy

重要

示例 SQL 语句使用 ACCOUNTADMIN 系统角色,且 GENERIC_SCIM_PROVISIONER 自定义角色被授予 ACCOUNTADMIN 角色。

可以不使用 ACCOUNTADMIN 角色而使用权限较低的角色。使用权限较低的角色有助于解决与权限最低的访问相关的合规性问题,但是,使用较低权限的角色可能会在 SCIM 配置和管理过程中导致意外错误。

这些错误可能是由于权限较低的角色没有足够的权限通过 SCIM 管理所有角色,这是由于角色的创建方式和由此产生的角色层次结构造成的。因此,为了避免配置和管理过程中出现错误,请选择以下选项之一:

  1. 使用示例 SQL 语句中所示的 ACCOUNTADMIN 角色。

  2. 使用具有全局 MANAGE GRANTS 权限的角色。

  3. 如果前两个选项都不合适,请使用自定义角色,该角色对将使用 SCIM 管理的所有角色拥有 OWNERSHIP 权限。

  1. 使用 ACCOUNTADMIN 角色。

    use role accountadmin;
    
    Copy
  2. 创建自定义角色 GENERIC_SCIM_PROVISIONER。IdP 创建的 Snowflake 中的所有用户和角色将归范围缩小的 GENERIC_SCIM_PROVISIONER 角色所有。

    create role if not exists generic_scim_provisioner;
    grant create user on account to role generic_scim_provisioner;
    grant create role on account to role generic_scim_provisioner;
    
    Copy
  3. 让 ACCOUNTADMIN 角色使用 GENERIC_SCIM_PROVISIONER 自定义角色创建安全集成。有关更多信息,请参阅 CREATE SECURITY INTEGRATION

    grant role generic_scim_provisioner to role accountadmin;
    create or replace security integration generic_scim_provisioning
        type = scim
        scim_client = 'generic'
        run_as_role = 'GENERIC_SCIM_PROVISIONER';
    
    Copy
  4. 创建并保存授权令牌,并安全存储以备后用。将此令牌用于每个 SCIM REST API 请求并将其放在请求标头中。访问令牌将在六个月后过期,并且可以使用此语句生成新的访问令牌。

    select system$generate_scim_access_token('GENERIC_SCIM_PROVISIONING');
    
    Copy

启用 Snowflake 发起的 SSO

SCIM 预置过程不会自动启用单点登录 (SSO)。

要在 SCIM 预置过程完成后使用 SSO,请启用 Snowflake 发起的 SSO

管理 SCIM 网络策略

将网络策略应用到 SCIM 安全集成,可使 SCIM 网络策略与应用于整个 Snowflake 账户的网络策略不同。它使 SCIM 提供商可以预置用户和组,而无需向控制普通用户访问权限的网络策略添加 IP 地址。

应用于 SCIM 集成的网络策略会替换应用于整个 Snowflake 账户的网络策略,但会被分配给用户的网络策略替换。

创建 SCIM 安全集成后,使用以下命令创建 SCIM 网络策略:

alter security integration generic_scim_provisioning set network_policy = <scim_network_policy>;
Copy

要取消设置 SCIM 网络策略,请使用以下命令:

alter security integration generic_scim_provisioning unset network_policy;
Copy

其中:

generic_scim_provisioning

指定自定义 SCIM 安全集成的名称。

scim_network_policy

指定 Snowflake 中的自定义 SCIM 网络策略。

有关更多信息,请参阅 使用网络策略控制网络流量ALTER SECURITY INTEGRATION

将次要角色与 SCIM 结合使用

Snowflake 支持使用 SCIM 将 用户 属性 DEFAULT_SECONDARY_ROLES 设置为 'ALL',以允许用户在 Snowflake 会话中使用 次要角色

有关代表性示例,请参阅 更新用户

复制自定义 SCIM 安全集成

Snowflake 支持通过 SCIM 安全集成执行从源账户到目标账户的复制和故障转移/故障回复。

有关详细信息,请参阅 跨多个账户复制安全集成和网络策略

后续主题:

语言: 中文