AWS PrivateLink 和 Snowflake¶
本主题介绍如何配置 AWS PrivateLink 以便直接将 Snowflake 账户连接到一个或多个 AWS VPCs。
请注意, AWS PrivateLink 不是 Snowflake 提供的服务。这是 Snowflake 支持的一项 AWS 服务,可与您的 Snowflake 账户结合使用。
本主题内容:
AWS PrivateLink 是什么?¶
AWS PrivateLink (https://docs.aws.amazon.com/aws-technical-content/latest/aws-vpc-connectivity-options/aws-privatelink.html) 是一项用于创建专用 VPC 端点的 AWS 服务,允许在您的 Snowflake VPC 和 AWS VPCs 之间建立直接、安全的连接,而无需穿过公共互联网。该连接适用于同一 AWS 区域的 AWS VPCs。
对于 编写外部函数,您也可以将 AWS PrivateLink 用于 专用端点。
此外,如果您拥有本地环境(例如,非托管数据中心),则可以选择将 AWS Direct Connect (https://aws.amazon.com/directconnect/) 与 AWS PrivateLink 结合使用,以在单个专用网络中连接所有虚拟和物理环境。
备注
AWS Direct Connect 是一项单独的 AWS 服务,必须独立于 AWS PrivateLink 实施,并且不在本主题的讨论范围内。如需咨询如何实施 AWS Direct Connect,请联系 Amazon。
启用 AWS PrivateLink¶
备注
目前,本部分中的自助启用过程不支持通过托管云服务或第三方供应商为 AWS 账户标识符授权。
要针对此用例为 AWS 账户标识符授权,请从供应商处检索 AWS 账户标识符并联系 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge)。
要为您的 Snowflake 账户启用 AWS PrivateLink,请完成以下步骤:
在命令行环境中,运行以下 AWS CLI STS (https://docs.aws.amazon.com/cli/latest/reference/sts/get-federation-token.html) 命令并保存输出。输出将在下一步中用作实参
federated_token
的值。aws sts get-federation-token --name sam
请注意,
get-federation-token
需要 AWS 中的 Identity and Access Management 用户或 AWS 账户根用户。有关详细信息,请参阅 AWS 文档 (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison)。提取
"FederatedUserId"
值中的 12 位数字(截断)。例如,如果您的令牌包含以下内容:{ ... "FederatedUser": { "FederatedUserId": "185...:sam", "Arn": "arn:aws:sts::185...:federated-user/sam" }, "PackedPolicySize": 0 }
提取
185...
。此 12 位数字将在下一步成为aws_id
的值。作为 Snowflake 账户管理员(即具有 ACCOUNTADMIN 系统角色的用户),调用函数 SYSTEM$AUTHORIZE_PRIVATELINK 以为您的 Snowflake 账户授权(即启用) AWS PrivateLink:
select SYSTEM$AUTHORIZE_PRIVATELINK ( '<aws_id>' , '<federated_token>' );
其中:
'aws_id'
用于唯一标识您的 Amazon Web Services (AWS) 账户的 12 位标识符(字符串)。
'federated_token'
以字符串形式包含联合用户的访问凭据的联合令牌值。
例如:
use role accountadmin; select SYSTEM$AUTHORIZE_PRIVATELINK ( '185...', '{ "Credentials": { "AccessKeyId": "ASI...", "SecretAccessKey": "enw...", "SessionToken": "Fwo...", "Expiration": "2021-01-07T19:06:23+00:00" }, "FederatedUser": { "FederatedUserId": "185...:sam", "Arn": "arn:aws:sts::185...:federated-user/sam" }, "PackedPolicySize": 0 }' );
要验证您的授权配置,请您在 AWS 上的 Snowflake 账户中调用 SYSTEM$GET_PRIVATELINK 函数。此函数使用的 'aws_id'
和 'federated_token'
实参值与用于为 Snowflake 账户授权的实参值相同。
授权成功后,Snowflake 会返回 Account is authorized for PrivateLink.
。
如果有必要在 Snowflake 账户中 禁用 AWS PrivateLink,请使用 'aws-id'
和 'federated_token'
的相同实参值调用 SYSTEM$REVOKE_PRIVATELINK 函数。
重要
federated_token
将于 12 小时后过期。
如果调用任何系统函数来授权、验证或禁用 Snowflake 账户才能使用 AWS PrivateLink,且令牌无效,请使用本部分中过程开头显示的 AWS CLI STS 命令重新生成令牌。
配置 AWS VPC 环境¶
注意
本部分仅介绍用于配置 VPC 环境的 Snowflake 特定详细信息。
另请注意,Snowflake 不 负责所需 AWS VPC 端点、安全组规则和 DNS 记录的实际配置。如果您遇到这些配置任务方面的任何问题,请直接联系 AWS 支持部门。
创建和配置 VPC 端点 (VPCE)¶
完成以下步骤以创建和配置 VPC 端点:在您的 AWS VPC 环境中,执行以下操作:
作为 Snowflake 账户管理员(即具有 ACCOUNTADMIN 系统角色的用户),调用 SYSTEM$GET_PRIVATELINK_CONFIG 函数并记录
privatelink-vpce-id
值。在 AWS 环境中,使用上一步中的
privatelink-vpce-id
值创建 VPC 端点。在 AWS 环境中,为将 Snowflake 传出连接连接到 VPCE CIDR (无类域间路由)的端口
443
和80
的服务安全组授权。
有关详细信息,请参阅 AWS 文档:
使用 VPCs 和子网 (https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html)
VPC 端点 (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)
VPC 端点服务 (AWS PrivateLink) (https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html)
VPC 的安全组 (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)
配置 VPC 网络¶
要通过 AWS PrivateLink 端点访问 Snowflake,必须在 DNS 中创建 CNAME 记录,以便将 SYSTEM$GET_PRIVATELINK_CONFIG 函数的端点值解析为 VPC 端点的 DNS 名称。
这些端点值可允许您访问 Snowflake、Snowsight 和 Snowflake Marketplace,同时还可在 Snowflake 客户端尝试通过 HTTPS 和 连接 URLs 连接到端点时使用 OCSP 来确定证书是否已撤消。
要获取的函数值为:
privatelink-account-url
privatelink-connection-ocsp-urls
privatelink-connection-urls
privatelink-ocsp-url
regionless-privatelink-account-url
regionless-snowsight-privatelink-url
snowsight-privatelink-url
请注意, regionless-snowsight-privatelink-url
和 snowsight-privatelink-url
的值允许使用专用连接访问 Snowsight 和 Snowflake Marketplace。但是,如果要启用 URL 重定向,则还需要进行其他配置。
有关详细信息,请参阅 Snowsight 和专用连接。
如需 DNS 配置方面的其他帮助,请与内部 AWS 管理员联系。
重要
OCSP 缓存服务器主机名的结构取决于已安装客户端的版本,如 配置 Snowflake 客户端 (本主题内容)的第 1 步中所述:
如果使用的是列出的版本(或更高版本),请使用上述表单,当您在同一区域拥有多个 Snowflake 账户(例如开发、测试和生产)时,该表单可实现更好的 DNS 解析。更新客户端驱动程序并将 OCSP 与 PrivateLink 结合使用时,请更新防火墙规则以允许 OCSP 主机名。
如果您使用的客户端版本较旧,则 OCSP 缓存服务器主机名采用
ocsp.<region_id>.privatelink.snowflakecomputing.cn
(即没有 账户标识符)的形式。请注意,您的 DNS 记录必须解析为 VPC 内的专用 IP 地址。如果它解析为公共 IP 地址,则记录配置不正确。
为 Amazon S3 创建 AWS VPC 接口端点¶
要使来自 Snowflake 客户端的 Amazon S3 流量保持在 AWS 主干网上,就必须执行此步骤。Snowflake 客户端(例如 SnowSQL、JDBC 驱动程序)需要访问 Amazon S3 才能执行各种运行时操作。
如果您的 AWS VPC 网络不允许访问公共互联网,您可以配置到内部暂存区的专用连接或配置更多网关端点以连接 Snowflake 客户端所需的 Amazon S3 主机名。
总体而言,有三个选项可以配置对 Amazon S3 的访问。前两个选项避免使用公共互联网,第三个选项则不会:
为 内部暂存区 配置 AWS VPC 接口端点。建议使用此选项。
配置 Amazon S3 网关端点。有关更多信息,请参阅下面的说明。
不配置接口端点和网关端点。这会导致需要使用公共互联网进行访问。
注意
要防止 Amazon S3 桶与采用 Snowflake 的 AWS VPC 之间的通信使用公共互联网,您可以在与 Amazon S3 桶相同的 AWS 区域中设置 Amazon S3 网关端点。原因是 AWS PrivateLink 只允许在 VPCs 之间进行通信,而 Amazon S3 桶不包含在 VPC 中。
您可以配置 Amazon S3 网关端点,以限制对特定用户、S3 资源、路由和子网的访问;但是,Snowflake 不需要此配置。有关更多详细信息,请参阅 Amazon S3 端点 (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)。
要配置 Amazon S3 网关端点策略,以明确限制它们仅使用适用于 Snowflake 的 Amazon S3 资源,请选择以下选项之一:
使用您的 Snowflake 账户使用的特定 Amazon S3 主机名地址。有关账户使用的主机名的完整列表,请参阅 SYSTEM$ALLOWLIST。
使用与 Snowflake S3 主机名匹配的 Amazon S3 主机名模式。在这种情况下,有两种到 Snowflake 的可能连接类型:VPC 到 VPC 或 本地到 VPC。
根据连接类型,请注意以下事项:
- VPC 到 VPC:
确保 Amazon S3 网关端点存在。(可选)修改 S3 网关端点策略以匹配 Amazon S3 主机名 表中显示的特定主机名模式。
- 本地到 VPC:
如果 公共网关不允许 Amazon S3 流量,则必须定义一项设置,以便在防火墙或代理配置中包含 S3 主机名模式。
下表列出了 Amazon S3 主机名模式,如果您不要求它们特定于您账户的 Snowflake 托管 S3 桶,则您可以为其创建网关端点:
Amazon S3 主机名
备注
所有区域
sfc-*-stage.s3.amazonaws.com:443
除 US 东部以外的所有区域
sfc-*-stage.s3-<region_id>.amazonaws.com:443
请注意,该模式在区域 ID 前使用了连字符 (
-
)。sfc-*-stage.s3.<region_id>.amazonaws.com:443
请注意,该模式在区域 ID 前使用句点 (
.
)。
有关创建网关端点的详细信息,请参阅 网关 VPC 端点 (https://docs.aws.amazon.com/vpc/latest/userguide/vpce-gateway.html)。
连接到 Snowflake¶
在连接到 Snowflake 之前,您 可以选择 使用 SnowCD (Snowflake Connectivity Diagnostic Tool) 来评估与 Snowflake 和 AWS PrivateLink 的网络连接情况。
有关更多信息,请参阅 SnowCD 和 SYSTEM$ALLOWLIST_PRIVATELINK。
否则,请使用您的专用连接账户 URL 连接到 Snowflake。
请注意,如果您要通过 AWS PrivateLink 连接到 Snowsight,请按照 Snowsight 文档 中的说明进行操作。
阻止公共访问 – 可选¶
使用 AWS PrivateLink 测试与 Snowflake 的专用连接情况之后,您可以 选择 阻止对 Snowflake 的公共访问。这意味着,只有当用户的连接请求来自 Snowflake 网络策略中指定的特定 CIDR 阻止范围内的 IP 地址时,用户才能访问 Snowflake。
要使用网络策略阻止公共访问,请执行以下操作:
创建新的网络策略或编辑现有的网络策略。为您的组织添加 CIDR 阻止范围。
激活账户的网络策略。
有关详细信息,请参阅 使用网络策略控制网络流量。
配置 Snowflake 客户端¶
确保 Snowflake 客户端支持 OCSP 缓存服务器¶
Snowflake OCSP 缓存服务器可缓解 Snowflake 客户端与服务器之间的连接问题。要使已安装的 Snowflake 客户端能够利用 OCSP 服务器缓存,请确保使用以下客户端版本:
SnowSQL 1.1.57(或更高版本)
Python Connector 1.8.2(或更高版本)
JDBC 驱动程序 3.8.3(或更高版本)
ODBC 驱动程序 2.19.3(或更高版本)
备注
Snowflake OCSP 缓存服务器可监听 80
端口,因此在 创建和配置 VPC 端点 (VPCE) 中,系统会指示您配置 AWS PrivateLink VPCE 安全组以接受该端口以及 443
端口(所有其他 Snowflake 流量都需要)。
指定 Snowflake 客户端的主机名¶
每个 Snowflake 客户端都需要一个主机名才能连接到您的 Snowflake 账户。
该主机名与您在 配置 VPC 网络 的 CNAME 记录中指定的主机名相同。
此步骤不适用于访问 Snowflake Marketplace。
例如,对于名为 xy12345
的账户:
如果账户位于 US 西部,则主机名为
xy12345.us-west-2.privatelink.snowflakecomputing.cn
。如果账户位于 EU (法兰克福),则主机名为
xy12345.eu-central-1.privatelink.snowflakecomputing.cn
。
重要
指定主机名的方法因客户端而异:
对于 Spark Connector 以及 ODBC 和 JDBC 驱动程序,请指定整个主机名。
对于所有其他客户端,请 勿 指定完整主机名。
相反,请指定具有
privatelink
段的 账户标识符 (即<account_identifier>.privatelink
), which Snowflake concatenates withsnowflakecomputing.cn
),Snowflake 会将其与 snowflakecomputing.cn 连接起来以动态构建主机名。
有关为 Snowflake 客户端指定账户名或主机名的更多详细信息,请参阅各客户端的文档。
将 SSO 与 AWS PrivateLink 配合使用¶
Snowflake 支持将 SSO 与 AWS PrivateLink 配合使用。有关更多信息,请参阅:
将 Client Redirect 与 AWS PrivateLink 配合使用¶
Snowflake 支持将 Client Redirect 与 AWS PrivateLink 配合使用。
有关更多信息,请参阅 重定向客户端连接。
将复制和 Tri-Secret Secure 与专用连接配合使用¶
无论您是否在目标账户中启用 Tri-Secret Secure 或此功能,Snowflake 都支持将您的数据从源账户复制到目标账户。
故障排除¶
请注意以下 Snowflake 社区文章:
如何从 AWS 中为 PrivateLink 自助服务检索联合令牌 (https://community.snowflake.com/s/article/How-to-retrieve-a-Federation-Token-from-AWS-for-PrivateLink-Self-Service)
FAQ:AWS PrivateLink 自助服务 (https://community.snowflake.com/s/article/PrivateLink-Self-Service-with-AWS)
故障排除:适用于 AWS PrivateLink 的 Snowflake 自助函数 (https://community.snowflake.com/s/article/Troubleshooting-Snowflake-self-service-functions-for-AWS-PrivateLink)