网络规则

网络规则是将网络标识符分组为逻辑单元的架构级对象。

限制网络流量的 Snowflake 功能可以参考网络规则,而不是直接在功能中定义网络标识符。网络规则不定义是否应允许或阻止其标识符。使用网络规则的 Snowflake 功能指定规则中的标识符是允许还是禁止。

以下功能使用网络规则控制网络流量:

  • 网络策略 使用网络规则控制发往 Snowflake 服务和内部暂存区的入站网络流量。

  • 外部网络访问 使用网络规则限制从 Snowflake UDF 或过程访问外部网络位置。

支持的网络标识符

管理员需要能够根据与请求的来源或目的地关联的网络标识符来限制访问。网络规则允许管理员允许或阻止以下网络标识符:

传入请求:
  • IPv4 地址。Snowflake 支持使用 无类域间路由 (CIDR) 表示法 (https://tools.ietf.org/html/rfc4632) 指定 IP 地址的范围。例如,192.168.1.0/24 表示 192.168.1.0192.168.1.255 范围内的所有 IPv4 地址。

  • AWS VPC 端点的 VPCE IDs (https://docs.aws.amazon.com/vpc/latest/privatelink/concepts.html#concepts-service-consumers)。VPC IDs 不受支持。

  • Azure Private Endpoint 的 LinkIDs (https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-overview)。执行 SYSTEM$GET_PRIVATELINK_AUTHORIZED_ENDPOINTS 函数来检索与账户关联的 LinkID。

传出请求:

域,包括端口范围。

在大多数情况下,有效端口范围为 1-65535。如果未指定端口,则默认为 443。如果外部网络位置支持动态端口,则需要指定所有可能的端口。

要允许访问所有端口,请将端口定义为 0;例如,example.com:0

每个网络规则包含一个或多个相同类型的网络标识符的列表。网络规则的 TYPE 属性指示规则中包含的标识符的类型。例如,如果 TYPE 属性为 IPV4,那么网络规则的值列表必须包含有效的 IPv4 地址或采用 CIDR 表示法的地址范围。

传入请求与传出请求

网络规则的模式指示使用该规则的 Snowflake 功能是否限制传入或传出请求。

传入请求

网络策略 保护 Snowflake 服务和内部暂存区免受传入流量的影响。当网络规则与网络策略结合使用时,管理员可以将模式设置为以下之一:

INGRESS

INGRESS 模式的行为取决于网络规则的 TYPE 属性的值。

  • 如果 TYPE=IPV4,默认情况下,网络规则仅控制对 Snowflake 服务的访问。

    如果账户管理员启用 ENFORCE_NETWORK_RULES_FOR_INTERNAL_STAGES 参数,则 MODE=INGRESSTYPE=IPV4 还会保护一个 AWS 内部暂存区。

  • 如果 TYPE=AWSVPCEID,则网络规则仅控制对 Snowflake 服务的访问。

    如果您想基于接口端点的 VPCE ID 限制对 AWS 内部暂存区的访问,必须使用 INTERNAL_STAGE 模式创建单独的网络规则。

INTERNAL_STAGE

控制对一个 AWS 内部暂存区的访问,不限制对 Snowflake 服务的访问。使用此模式需要满足以下条件:

对于 Microsoft Azure 上的账户,您无法使用网络规则来限制对内部暂存区的访问。但是,您可以 阻止所有公共网络流量 访问内部暂存区。

传出请求

管理员可以使用网络规则以及控制请求发送位置的功能。在这些情况下,管理员可以定义具有以下模式的网络规则:

EGRESS

指示网络规则用于*从* Snowflake 发送的流量。

目前使用的是 外部网络访问,允许 UDF 或程序向外部网络位置发送请求。

创建网络规则

您需要对架构具有 CREATE NETWORK RULE 权限才能创建网络规则。默认情况下,只有 ACCOUNTADMIN 和 SECURITYADMIN 角色以及架构所有者才具有此权限。

您可以使用 Snowsight 或执行 SQL 命令来创建网络规则:

Snowsight:
  1. Sign in to Snowsight.

  2. 在导航菜单中选择 Governance & security » Network policies,然后选择 Network Rules 选项卡。

  3. 选择 + Network Rule

  4. 输入网络规则的名称。

  5. 选择网络规则的架构。网络规则是架构级对象。

  6. (可选)为网络规则添加描述性注释,以帮助组织并维护架构中的网络规则。

  7. Type 下拉列表中,选择在网络规则中定义的 标识符类型

  8. Mode 下拉列表中,选择网络规则的模式。INGRESSINTERNAL STAGE 模式表示网络规则将与网络策略一起使用以限制传入请求,EGRESS 模式表示网络规则将与外部访问集成一起使用以限制传出请求。

  9. 输入以逗号分隔的标识符列表,在将网络规则添加到网络策略时,将允许或阻止这些标识符。此列表中的标识符必须都是在 Type 下拉列表中指定的类型。

  10. 选择 Create Network Rule

SQL:

管理员可以执行 CREATE NETWORK RULE 命令来创建新的网络规则,指定网络标识符列表以及这些标识符的类型。

例如,要使用自定义角色创建可用于允许或阻止来自一定范围 IP 地址的流量的网络规则,请执行以下操作:

GRANT USAGE ON DATABASE securitydb TO ROLE network_admin;
GRANT USAGE ON SCHEMA securitydb.myrules TO ROLE network_admin;
GRANT CREATE NETWORK RULE ON SCHEMA securitydb.myrules TO ROLE network_admin;
USE ROLE network_admin;

CREATE NETWORK RULE cloud_network TYPE = IPV4 MODE = INGRESS VALUE_LIST = ('47.88.25.32/27');
Copy

IPv4 地址

指定网络规则的 IP 地址时,Snowflake 支持使用 无类域间路由 (CIDR) 表示法 (https://tools.ietf.org/html/rfc4632) 的 IP 地址范围。

例如,192.168.1.0/24 表示 192.168.1.0192.168.1.255 范围内的所有 IPv4 地址。

识别账户中的网络规则

您可以使用 Snowsight 或 SQL 识别账户中的网络规则。

Snowsight:
  1. Sign in to Snowsight.

  2. 在导航菜单中选择 Governance & security » Network policies,然后选择 Network Rules 选项卡。

SQL:

调用 NETWORK_RULE_REFERENCES Information Schema 表函数,或者查询 NETWORK_RULESNETWORK_RULE_REFERENCES Account Usage 视图。

修改网络规则

您可以修改现有网络规则的标识符和注释,但不能修改其类型、模式、名称或架构。

要使用 Snowsight 或 SQL 从现有网络规则中添加或移除标识符和注释,请执行下列操作之一:

Snowsight:
  1. Sign in to Snowsight.

  2. 在导航菜单中选择 Governance & security » Network policies,然后选择 Network Rules 选项卡。

  3. 找到网络规则,选择 ... 按钮,然后选择 Edit

  4. 修改以逗号分隔的标识符列表或注释。

  5. 选择 Update Network Rule

SQL:

执行 ALTER NETWORK RULE 语句。

网络规则的复制

网络规则是架构级对象,与包含这些规则的数据库一起复制。

有关复制使用网络规则的网络策略的信息,请参阅 复制网络策略

权限和命令

命令

权限

描述

CREATE NETWORK RULE

CREATE SCHEMA 的 NETWORK RULE

创建新的网络规则。

ALTER NETWORK RULE

NETWORK RULE 的 OWNERSHIP

修改现有的网络规则。

DROP NETWORK RULE

NETWORK RULE 的 OWNERSHIP

从系统中移除现有的网络规则。

DESCRIBE NETWORK RULE

NETWORK RULE 的 OWNERSHIP

描述现有网络规则的属性。

SHOW NETWORK RULES

NETWORK RULE 的 OWNERSHIP 或 SCHEMA 的 USAGE

列出系统中的所有网络规则。

Snowflake 管理的网络规则

Snowflake provides the SNOWFLAKE.NETWORK_SECURITY schema that contains a suite of built-in network rules. Built-in network rules are one type of Snowflake-managed network rule. Snowflake can update the NETWORK_SECURITY schema with new, Snowflake-managed network rules. Built-in network rules provide a secure, consistent, fast, and low-maintenance way to manage network security.

Snowflake-managed network rules align with easy-to-use Snowflake network policy and rule management features. Snowflake customers can add Snowflake-managed rules to new or existing network policies. Snowflake continuously updates built-in network rules without requiring regular maintenance by account administrators. For more information about adding a network rule to a network policy, see 修改网络策略.

Built-in network rules define the set of allowed IP addresses that a frequently used, third-party partner application uses to connect with Snowflake. Snowflake automatically updates these rules to capture any changes that third-party providers make to their egress IP addresses. For example, Snowflake manages a rule that defines the IP addresses that a Microsoft Power BI application uses to connect with Snowflake. If Microsoft updates these addresses, Snowflake rules automatically update to reflect this change.

The following table lists current partner applications for which Snowflake maintains built-in network rules and information about the current egress IP addresses for each partner application:

SaaS applications

Egress IP addresses

dbt platform

dbt platform IP addresses (https://docs.getdbt.com/docs/cloud/about-cloud/access-regions-ip-addresses)

Microsoft Power BI

Power BI IP ranges (https://www.microsoft.com/en-us/download/details.aspx?id=56519)

Qlik

Qlik IP addresses (https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Introduction/qlik-cloud-dns-ip.htm)

Tableau

Tableau Cloud IP ranges (https://help.tableau.com/current/pro/desktop/en-us/publish_tableau_online_ip_authorization.htm)

GitHub Actions

REST API endpoints for meta data (https://docs.github.com/en/rest/meta)

Working with Snowflake-managed network rules

To see the current list of Snowflake-managed network rules, run the SHOW NETWORK RULES command to list the network rules in the SNOWFLAKE.NETWORK_SECURITY schema:

SHOW NETWORK RULES IN SNOWFLAKE.NETWORK_SECURITY;
Copy

备注

The SHOW command doesn't explicitly expose IP addresses, only the number of IP addresses per rule.

To see your current Snowflake-managed rules, including IP addresses, query the NETWORK_RULES 视图 and filter on rows where the database is SNOWFLAKE and the schema is NETWORK_SECURITY:

SELECT *
  FROM SNOWFLAKE.ACCOUNT_USAGE.NETWORK_RULES
  WHERE DATABASE = 'SNOWFLAKE' AND SCHEMA = 'NETWORK_SECURITY';
Copy

The following example shows how to create or replace a network policy that references a built-in network rule:

CREATE OR REPLACE NETWORK POLICY example_network_policy ALLOWED_NETWORK_RULE_LIST = (
  'SNOWFLAKE.NETWORK_SECURITY.DBT_APAC_AWS',
  'SNOWFLAKE.NETWORK_SECURITY.DBT_EMEA_AWS'
);
Copy

The following example shows how to add a built-in network rule to an existing network policy by using the ALTER NETWORK POLICY syntax:

ALTER NETWORK POLICY example_network_policy ADD ALLOWED_NETWORK_RULE_LIST = (
  'SNOWFLAKE.NETWORK_SECURITY.DBT_APAC_AWS'
);
Copy

Snowflake-managed egress network rules

Snowflake provides the following pre-defined, Snowflake-managed egress network rule:

SNOWFLAKE.EXTERNAL_ACCESS.PYPI_RULE

You can use an EGRESS network rule with an external access integration to provide a connection from Snowflake to Python Package Index (PyPI). For example, you might want to use the network rule to allow Notebook users on Container Runtime to install pip packages by using the pip install command.

For an example of how to use this network rule, see Accessing PyPI to install packages in Snowpark Container.

Only users with the ACCOUNTADMIN role have access to the SNOWFLAKE.EXTERNAL_ACCESS.PYPI_RULE.

语言: 中文