Snowflake Postgres 网络¶
默认情况下,Snowflake Postgres 将在您选择的云区域中,于一个新的私有网络内部署每个新实例。每个网络相互独立,且与同一云区域中的其他网络保持隔离。
默认情况下,Snowflake Postgres 实例不允许外部连接接入。可通过以下两种方式之一,启用与您的 Snowflake Postgres 实例之间的往来流量:
附加包含 Postgres 入口和/或出口网络规则的网络策略。此选项适用于所有账户。
配置与云服务商私有网络之间的专用链接连接。此选项适用于 Business Critical Edition 或更高版本的账户。
Snowflake Postgres 网络策略和规则¶
Snowflake Postgres 实例的 网络策略 和 网络规则 与其他 Snowflake 资源的功能大体相同,但存在以下关键差异:
网络策略在与 Snowflake Postgres 实例一起使用时,无需像在 Snowflake 账户、用户及其他安全集成中那样进行 激活 操作。 Snowflake Postgres 实例的网络策略会在实例创建时直接附加到实例上。 现有实例的网络策略也可以进行更改。
Snowflake Postgres 实例仅使用网络策略的 ALLOWED_NETWORK_RULE_LIST 和 BLOCKED_NETWORK_RULE_LIST 属性。BLOCKED_IP_LIST 和 ALLOWED_IP_LIST 属性将被忽略。
Snowflake Postgres 实例的网络规则应使用 Postgres 入口或 Postgres 出口模式。 使用这些模式的规则目前仅限于类型 IPv4。
若网络策略中包含使用非 Postgres 入口或 Postgres 出口模式的网络规则,使用该策略的 Snowflake Postgres 实例将忽略这些规则。
权限¶
要创建新的网络策略,Snowflake 用户必须具有 CREATE NETWORK POLICY ON ACCOUNT 权限。
要创建新的网络规则,Snowflake 用户必须拥有 CREATE NETWORK RULE ON SCHEMA 权限。
要将现有网络策略附加到 Snowflake 实例,Snowflake 用户必须拥有该网络策略,或者策略所有者必须对其拥有 GRANT 使用权。
Snowflake Postgres 网络策略和规则示例¶
假设:
您希望允许来自办公室网络的新 Postgres 实例入站流量,且办公室网络路由器的公共 IP 地址为
23.206.171.35。您还希望允许来自新 Postgres 实例的出站流量,通过 Postgres 外部数据包装器连接至您办公室的 Postgres 服务器。
为此,我们将创建一个新策略,其中包含 Postgres 入口网络规则和 Postgres 出口网络规则。
创建两个新的网络规则。对两者均使用
23.206.171.35/32作为唯一的网络标识符,并在其中一条规则中将“Postgres Ingress”用作 Mode,在另一条规则中将“Postgres Egress”用作 Mode。创建一个新的网络策略,并将这两条新规则纳入其 Allowed 列表中。
在导航菜单中,选择 Postgres。
选择 + Create。
在选择所需的实例配置详情时,请确保在 Network policy 选择框中选定您的新策略。 在下图中,我们已选择命名为
OFFICE POLICY EXAMPLE的策略。
-- Create the ingress rule
CREATE NETWORK RULE PG_INGRESS_FROM_OFFICE
TYPE = IPV4
VALUE_LIST = ('23.206.171.35/32')
MODE = POSTGRES_INGRESS;
-- Create the egress rule
CREATE NETWORK RULE PG_EGRESS_TO_OFFICE
TYPE = IPV4
VALUE_LIST = ('23.206.171.35/32')
MODE = POSTGRES_EGRESS;
-- Create a new policy using both rules in its allowed list
CREATE NETWORK POLICY "OFFICE POLICY EXAMPLE"
ALLOWED_NETWORK_RULE_LIST = ('PG_INGRESS_FROM_OFFICE', 'PG_EGRESS_TO_OFFICE')
COMMENT = 'Traffic to/from the office.';
-- Create a new Snowflake Postgres instance that uses the new policy
CREATE POSTGRES INSTANCE SNOWFLAKE_POSTGRES_DEMO
COMPUTE_FAMILY = 'STANDARD_L'
STORAGE_SIZE_GB = 50
AUTHENTICATION_AUTHORITY = POSTGRES
POSTGRES_VERSION = 17
NETWORK_POLICY = '"OFFICE POLICY EXAMPLE"';
在创建实例时创建入口规则¶
您无需在创建 Snowflake Postgres 实例之前创建网络策略和规则,而可以在通过 Snowsight 创建 Snowflake Postgres 实例时,一并创建带有 Postgres 入口规则的策略。
在导航菜单中,选择 Postgres。
在 Postgres Instances 页面,选择右上角的 Create 按钮。
选择您的实例配置,但将 Network policy 选项留空。
After you select the Create, a new dialog displays the
snowflake_admin` Postgres user's connection credentials. After saving those credentials in a secure location, select Continue to network settings.在 Network Settings 对话框(如下图所示)中,输入您希望为其创建 Postgres 入口规则的 IP 地址和/或 CIDR 值,按回车键将每一条加入列表。
如有需要,可展开 Details 部分以编辑您的新网络规则和/或策略名称。
选择 Save 以创建您的新 Postgres 入口网络策略,该策略将在生效后自动附加到您的实例。
Snowflake Postgres Private Link¶
Snowflake Postgres 实例的 Private Link 功能仅适用于 Business Critical Edition 及以上版本的账户。
要为 Snowflake Postgres 实例启用 Private Link,请先按照说明在您的云服务商账户与 Snowflake 账户之间启用 Private Link:
权限¶
要为 Snowflake Postgres 实例启用 Private Link,Snowflake 用户必须拥有以下权限
MANAGE POSTGRES PRIVATE CONNECTIVITY ON ACCOUNT
针对每个指定的 Snowflake Postgres 实例,需具备 OWNERSHIP 或 MANAGE 权限
为 Snowflake Postgres 实例设置 Private Link¶
在您的云服务商与 Snowflake 账户之间启用 Private Link 并具备所需权限后,您即可按以下步骤为每个 Snowflake Postgres 实例单独启用 Private Link 功能。
如果您除了 Private Link 连接外,不打算为实例设置任何网络策略规则,请在 New instance 对话框的 Network Security option 中选择 Private Link。如果您确实希望设置或使用网络策略,请选择 Network policy,并按照先前关于网络策略的说明操作。
实例激活后,您可以为其启用 Private Link:
在导航菜单中,选择 Postgres 并选中您的实例。
在实例的 Instance details 窗格中,选择 Private Link 部分的编辑图标。
系统将显示确认对话框,要求您确认是否为云服务提供商设置 Private Link。选择 Enable。请注意,此步骤最多可能需要 10 分钟才能完成。
当您的 Snowflake Postgres 实例启用 Private Link 后,您即可为其建立新的 Private Link 连接:
在导航菜单中,选择 Postgres 并选中您的实例,以查看其详情页面。
选择右侧的 Private Link 部分的编辑图标,以展开 Private Link 窗格(如下所示)。
使用显示的 Service address 在您的云服务商账户的私有网络中发起 Private Link 连接请求。
刷新您的 Snowflake Postgres 实例的详情页面。此时 Private Link 窗格中会为您的请求显示一个新的连接条目,且 check mark`(接受)和 :ui:`x mark`(拒绝)均未被选中。选择 :ui:`check mark 接受。
您无法从云服务提供商的私有网络内的主机连接到您的 Snowflake Postgres 实例。
您可以使用 Snowflake SQL 为现有实例启用 Private Link,具体步骤如下:
ALTER POSTGRES INSTANCE <name> ENABLE PRIVATELINK;
该异步操作最长可能需要 10 分钟。要跟踪其状态,请检查由 DESCRIBE POSTGRES INSTANCE 返回的 privatelink_service_identifier 值:
DESCRIBE POSTGRES INSTANCE <name>;
在 SHOW POSTGRES INSTANCES 的输出中,实例条目会显示相同的 privatelink_service_identifier:
SHOW POSTGRES INSTANCES;
当该 privatelink_service_identifier 列显示非 NULL 值时,您可以使用该标识符,从您已为 Snowflake 账户启用 Private Link 连接的云服务商账户的私有网络中发起 Private Link 连接请求。
从您的云服务商账户私有网络发起连接请求后,查找针对 Snowflake Postgres 实例的请求:
SHOW PRIVATELINK CONNECTIONS IN POSTGRES INSTANCE <name>;
该命令返回以下列:
endpointconnection_idstatus
您的连接请求将显示为一个条目,其中包含您云服务商私有网络的 Private Link endpoint 值,且 status 值为 pending。
您可以通过运行 ALTER POSTGRES INSTANCE 命令来接受一个或多个待处理的 Private Link 连接请求:
ALTER POSTGRES INSTANCE [IF EXISTS] <name> AUTHORIZE PRIVATELINK CONNECTIONS = ('<connection_id' [ , ... ]);
您可以通过运行以下命令来撤销一个或多个待处理或先前已批准的 Private Link 连接请求:
ALTER POSTGRES INSTANCE [IF EXISTS] <name> REVOKE PRIVATELINK CONNECTIONS = ('<connection_id' [ , ... ]);