Microsoft Entra ID SCIM 与 Snowflake 集成

Snowflake 支持 Microsoft Entra ID 作为 SCIM 身份提供商。

本主题提供有关将用户和组从 Microsoft Entra ID 预置到 Snowflake 的详细信息。

功能

  • 自动将 Microsoft Entra ID 用户预置到 Snowflake。

  • 自动将 Microsoft Entra ID 组预置到 Snowflake。

  • 将 Microsoft Entra ID 用户和组同步到 Snowflake。

  • 如果 Microsoft Entra ID 配置为 SAML SSO 到 Snowflake (https://docs.microsoft.com/en-us/azure/active-directory/saas-apps/snowflake-tutorial),则预置到 Snowflake 的 Microsoft Entra ID 用户可以使用 SAML SSO 访问 Snowflake。

    备注

    默认情况下,使用 SCIM 预置到 Snowflake 的 Microsoft Entra ID 用户未被分配 Snowflake 密码。这意味着如果在 Microsoft Entra ID 中配置了 SAML SSO,用户将使用 SSO 对 Snowflake 进行身份验证。

    如果使用 SCIM 将用户和组从 Microsoft Entra ID 预置到 Snowflake,则 SAML SSO 不是必需的。有关其他选项,请参阅 配置 Entra ID 单点登录 (https://docs.microsoft.com/en-us/azure/active-directory/saas-apps/snowflake-tutorial#configure-azure-ad-single-sign-on)。

限制

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

不支持

  • AWS PrivateLink 和 Google Cloud Private Service Connect。希望无需穿过公共互联网就从 Microsoft Entra ID 将用户和组预置到 Snowflake 的客户,需要在 Microsoft Entra ID 中拥有 Snowflake 账户。

  • 如果您使用 Azure 专用链接访问 Snowflake,请确保您没有在集成设置中使用 Azure 专用链接 URL。输入公共端点(即没有 .privatelink),并确保网络策略允许从 先决条件 部分中所示的 Azure IP 地址进行访问。否则,您无法使用此集成。

  • 转移现有用户和角色的所有权。Microsoft Entra ID 是其用户和组的权威来源。可以在 Microsoft Entra ID 中更新组成员资格。但是,Snowflake 中的现有用户和组无法转移到 Microsoft Entra ID。

  • Microsoft Entra ID 目前不支持读取或预置 嵌套组 (https://docs.microsoft.com/en-us/azure/active-directory/app-provisioning/how-provisioning-works#scoping)。因此,您不能使用 Snowflake Microsoft Entra ID SCIM 集成在 Snowflake 中预置或管理嵌套组。请联系 Microsoft 请求嵌套组的支持。

  • 启用或禁用从 Microsoft Microsoft Entra ID 到 Snowflake 的密码同步。

    在 Snowflake 安全集成中设置 SYNC_PASSWORD 属性并不会将用户密码从 Microsoft Entra ID 同步到 Snowflake。这是 Microsoft Entra ID 的局限性。要请求支持,请联系 Microsoft Entra ID。

先决条件

使用 SCIM 将 Microsoft Entra ID 用户和组预置到 Snowflake 之前,请验证以下内容:

  1. 现有的 Microsoft Entra ID 租户。

  2. 现有的 Snowflake 租户。

    • 在 Microsoft 中进行配置的过程中,您需要输入 Snowflake SCIM 端点的 URL(即 Microsoft Entra ID SCIM 配置指南中的 Tenant URL)。Snowflake SCIM 端点由追加有 /scim/v2/ 的 Snowflake 账户 URL 组成。例如,如果您使用账户名称 URL 格式,则 SCIM 端点为 https://myorg-myaccount.snowflakecomputing.cn/scim/v2/。有关 Snowflake 账户 URL 支持的格式的列表,请参阅 与 URL 连接

  3. Snowflake 中至少有一名用户具有 ACCOUNTADMIN 角色

  4. 在预置与您的账户相关的用户或组之前,请确保 Snowflake 中的 网络策略 允许来自 公共云 (https://www.microsoft.com/en-us/download/details.aspx?id=56519) 或 US 政府云 (https://www.microsoft.com/en-us/download/details.aspx?id=57063) 的 所有 Azure IP 地址的访问。目前,需要所有 Azure IP 地址来创建 Microsoft Entra ID SCIM 网络策略。有关更多信息,请参阅 管理 SCIM 网络策略

配置

Snowflake 配置过程会创建一个 SCIM 安全集成,以使在 Microsoft Entra ID 中创建的用户和角色由 Snowflake 中的 AAD_PROVISIONER SCIM 角色拥有;同时会创建一个访问令牌以在 SCIM API 请求中使用。访问令牌(即 Microsoft Entra ID SCIM 配置指南中的 Secret Token)有效期为六个月。过期后,请使用如下所示的 SYSTEM$GENERATE_SCIM_ACCESS_TOKEN 手动创建新的访问令牌。

备注

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

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

Microsoft Entra ID 配置

要将 Microsoft Entra ID 用作 SCIM 身份提供商,请按照 Microsoft 文档 (https://docs.microsoft.com/en-us/azure/active-directory/saas-apps/snowflake-provisioning-tutorial) 中的说明进行操作。完成这些步骤时,不要 在 Microsoft Entra ID 中重复使用现有的企业应用程序。未能创建用于预置的新企业应用程序可能会导致意外行为。

备注

如果您正在创建自定义属性,并且希望 Snowflake 用户的 namelogin_name 字段具有不同的值,请在创建自定义属性之前联系 Snowflake 支持部门 为您的账户启用单独的映射。

Snowflake 配置

为了方便进行 Snowflake 配置,您可以复制下面的 SQL 用于第一 步 (https://docs.microsoft.com/en-us/azure/active-directory/saas-apps/snowflake-provisioning-tutorial#setup-snowflake-for-provisioning)。下面对每个语句进行了解释。

use role accountadmin;
create role if not exists aad_provisioner;
grant create user on account to role aad_provisioner;
grant create role on account to role aad_provisioner;
grant role aad_provisioner to role accountadmin;
create or replace security integration aad_provisioning
    type = scim
    scim_client = 'azure'
    run_as_role = 'AAD_PROVISIONER';
select system$generate_scim_access_token('AAD_PROVISIONING');
Copy

重要

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

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

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

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

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

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

  1. 以管理员身份登录 Snowflake,然后从 Snowflake 工作表界面或 SnowSQL 执行以下操作。

  2. 使用 ACCOUNTADMIN 角色。

    use role accountadmin;
    
    Copy
  3. 创建自定义角色 AAD_PROVISIONER。Microsoft Entra ID 创建的 Snowflake 中的所有用户和角色将归范围缩小的 AAD_PROVISIONER 角色所有。

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

    grant role aad_provisioner to role accountadmin;
    create or replace security integration aad_provisioning
        type=scim
        scim_client='azure'
        run_as_role='AAD_PROVISIONER';
    
    Copy
  5. 创建授权令牌并将其复制到剪贴板并安全存储以供以后使用。将此令牌用于每个 SCIM REST API 请求并将其放在请求标头中。访问令牌将在六个月后过期,并且可以使用此语句生成新的访问令牌。

    select system$generate_scim_access_token('AAD_PROVISIONING');
    
    Copy

启用 Snowflake 发起的 SSO

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

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

管理 SCIM 网络策略

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

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

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

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

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

alter security integration aad_provisioning unset network_policy;
Copy

其中:

aad_provisioning

指定 Microsoft Entra ID SCIM 安全集成的名称。

scim_network_policy

指定 Snowflake 中的 Microsoft Entra ID SCIM 网络策略。

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

将次要角色与 SCIM 结合使用

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

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

复制 Microsoft Entra ID SCIM 安全集成

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

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

故障排除

  • 若要验证 Microsoft Entra ID 正在向 Snowflake 发送更新,请检查 Microsoft Entra ID 中有关 Snowflake 应用程序的日志事件和 Snowflake 中的 SCIM 审计日志,以确保 Snowflake 正在从 Microsoft Entra ID 接收更新。使用以下 SQL 查询 Snowflake SCIM 审计日志,其中 demo_db 是您数据库的名称。

    use role accountadmin;
    use database demo_db;
    use schema information_schema;
    select * from table(rest_event_history('scim'));
    select *
        from table(rest_event_history(
            'scim',
            dateadd('minutes',-5,current_timestamp()),
            current_timestamp(),
            200))
        order by event_timestamp;
    
    Copy
  • 如果用户更新失败,请检查 Snowflake 中用户的所有权。如果它不属于 aad_provisioner 角色(或在 Snowflake 中创建安全集成时在 run_as_role 参数中设置的角色),则更新将失败。通过在 Snowflake 中运行以下 SQL 语句来转移所有权,然后重试。

    grant ownership on user <username> to role AAD_PROVISIONER;
    
    Copy
  • 如果在初始 SCIM 预置后 Microsoft Entra ID 中的 UPN 属性值 (https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/plan-connect-userprincipalname#what-is-userprincipalname) 发生了更改,则对用户的后续更新将不起作用。对 UPN 属性值的更改会断开 Microsoft Entra ID 用户对象和 Snowflake 用户对象之间的链接。如果 UPN 属性值发生更改,请为用户重新预置正确的 UPN 属性值。

后续主题:

语言: 中文