适用于内部暂存区的 AWS VPC 接口端点¶
本主题提供了通过 AWS VPC 接口端点连接到 Snowflake 内部暂存区的概念以及详细说明。
本主题内容:
概述¶
AWS VPC 接口端点 (https://docs.aws.amazon.com/vpc/latest/privatelink/endpoint-services-overview.html) 和 AWS PrivateLink for Amazon S3 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html) 可以组合在一起,提供可连接至 Snowflake 内部暂存区的安全连接。此设置可确保对 Snowflake 内部暂存区执行的数据加载和数据卸载操作使用 AWS 内部网络进行,而不是公共网络。
在 AWS 支持使用 VPC 接口端点进行内部暂存区访问之前,需要在 AWS VPC 中创建一个代理场,以便安全访问 Snowflake 内部暂存区。通过增加对 Snowflake 内部暂存区的 VPC 接口端点的支持,用户和客户端应用程序现在可以通过专用 AWS 网络访问 Snowflake 内部暂存区。下图总结了这一新支持:
请注意以下有关 BEFORE 图中数字的说明:
用户可通过两种方式连接到 Snowflake 内部暂存区:
选项 A 可通过本地连接直接连接到内部暂存区,如数字 1 所示。
选项 B 可通过代理场连接到内部暂存区,如数字 2 和 3 所示。
如果使用代理场,用户还可以直接连接到 Snowflake,如数字 4 所示。
请注意以下有关 AFTER 图中数字的说明:
此功能更新后,无需通过代理场即可连接到 Snowflake 或 Snowflake 内部暂存区。
本地用户可以直接连接到 Snowflake,如数字 5 所示。
要连接到 Snowflake 内部暂存区,本地用户需连接到接口端点(数字 6),然后使用 AWS PrivateLink for Amazon S3 连接到 Snowflake 内部暂存区,如数字 7 所示。
每个内部暂存区部署都对应一个单独的 Amazon S3 桶。内部暂存区 Amazon S3 桶中的 前缀 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html) 用于组织每个 Snowflake 账户中的数据。Amazon S3 桶端点 URLs 有所不同,具体取决于与桶的连接是否使用专用连接(即 AWS PrivateLink for S3)。
- 公共 Amazon S3 全局端点 URL:
<bucket_name>.s3.region.amazonaws.com/prefix
- 专用 Amazon S3 端点 URL:
<bucket_name>.<vpceID>.s3.<region>.vpce.amazonaws.com/prefix
优势¶
实施 VPC 接口端点来访问 Snowflake 内部暂存区具有以下优势:
内部暂存区数据不会穿过公共互联网。
在 AWS VPC 外部运行的客户端和 SaaS 应用程序(如 Microsoft PowerBI)可以安全地连接到 Snowflake。
管理员无需修改防火墙设置即可访问内部暂存区数据。
管理员可以对用户连接到存储账户的方式实施一致的安全性和监控。
限制¶
对于 AWS PrivateLink 的限制,请参阅 AWS 文档 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html#privatelink-limitations)。
开始使用¶
在配置 AWS 和 Snowflake 以允许请求通过 AWS PrivateLink 访问 Snowflake 内部暂存区之前,您必须:
先决条件¶
设置 ENABLE_INTERNAL_STAGES_PRIVATELINK 参数,启用对通过 AWS PrivateLink 连接到内部暂存区的支持。对于本主题中讨论的两种实施策略,账户管理员都必须执行以下语句:
use role accountadmin; alter account set ENABLE_INTERNAL_STAGES_PRIVATELINK = true;
AWS PrivateLink for S3 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)。
重要
AWS PrivateLink for S3 是一项 AWS 服务,必须在您的云环境中启用。
配置和实施此服务时如需帮助,请联系您的内部 AWS 管理员。
按如下方式更新防火墙允许列表:
如果使用出站防火墙,请确保它允许 Snowflake 所需的所有 URLs。有关详细信息,请参阅 SnowCD (Connectivity Diagnostic Tool)。
仅 适用于
us-east-1
客户:如果使用下列 Snowflake 客户端之一连接到 Snowflake,请升级到如下客户端版本:JDBC 驱动程序:3.13.3(或更高版本)
ODBC 驱动程序:2.23.2(或更高版本)
Python Connector for Snowflake:2.5.1(或更高版本)
SnowSQL:1.2.17(或更高版本)
请先升级 SnowSQL,然后再使用此功能。有关更多信息,请参阅 安装 SnowSQL。
请注意,如果使用的是 SnowSQL
--noup
选项,则 SnowSQL 自动升级被禁用,新的 SnowSQL 版本无法下载。如需升级,请禁用--noup
选项,并在升级完成后重新启用。
选择实施策略¶
选择正确的实施策略取决于您的组织使用 AWS PrivateLink 访问单个还是多个内部暂存区。
如果您的组织访问的是单个账户的内部暂存区,请参阅 使用单个接口端点访问单个内部暂存区。
如果您的组织访问的是多个账户的内部暂存区,请参阅 使用多个专用接口端点访问多个内部暂存区。该策略使用多个接口端点进行连接,每个内部暂存区对应一个接口端点。
使用单个接口端点访问单个内部暂存区¶
当您的组织访问 单个账户 的内部暂存区时,建议采用以下实施策略。如果您要从 VPC 访问多个内部暂存区,请参阅 使用多个专用接口端点访问多个内部暂存区。
要配置 VPC 接口端点来访问 Snowflake 内部暂存区,需要获得组织中以下三个角色的支持:
Snowflake 账户管理员(即具有 Snowflake ACCOUNTADMIN 系统角色的用户)。
AWS 管理员。
网络管理员。
根据组织的不同,可能需要与多个人员或团队协调配置工作,从而实施以下配置步骤。
过程¶
请完成以下步骤,从而配置和实施通过 VPC 端点对 Snowflake 内部暂存区的安全访问:
作为 Snowflake 账户管理员,在 Snowflake 账户中执行以下语句,并记录由
privatelink_internal_stage
键定义的值。请注意,从左到右读取时,Amazon S3 桶名称在 URL 的第一段定义。有关更多信息,请参阅 ENABLE_INTERNAL_STAGES_PRIVATELINK 和 SYSTEM$GET_PRIVATELINK_CONFIG。use role accountadmin; alter account set ENABLE_INTERNAL_STAGES_PRIVATELINK = true; select key, value from table(flatten(input=>parse_json(system$get_privatelink_config())));
作为 AWS 管理员,使用 AWS 控制台为 AWS PrivateLink for S3 创建一个 VPC 端点。记下 VPCE DNS 名称,以供下一步使用; 请勿 记录任何 VPCE DNS 分区名称。
端点创建后,可通过 描述接口端点 (https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#describe-interface-endpoint) 找到 VPCE DNS 名称。
在本示例中,通配符(即
*
)被列为 VPCE DNS 名称的前导字符。将前导通配符替换为上一步中的 Amazon S3 桶名称。例如:- 将:
*.vpce-000000000000a12-abc00ef0.s3.us-west-2.vpce.amazonaws.com
- 替换为:
<bucket_name>.vpce-000000000000a12-abc00ef0.s3.us-west-2.vpce.amazonaws.com
作为网络管理员,更新 DNS 设置来解析以下 URL:
将前导通配符替换为 Amazon S3 桶名称后,将
<bucket_name>.s3.<region>.amazonaws.com
解析为 VPCE DNS 名称。在本例中,将
<bucket_name>.s3.<region>.amazonaws.com 解析为 `` to ``<bucket_name>.vpce-000000000000a12-abc00ef0.s3.us-west-2.vpce.amazonaws.com
。小技巧
请勿在 DNS 映射中使用通配符(即
*
),因为访问 Snowflake 之外的其他 Amazon S3 桶可能会受到影响。请使用单独的 Snowflake 账户进行测试,并在测试 VPC 中配置专用托管 DNS 区域来测试该功能,这样一来,测试是隔离的,不会影响其他工作负载。
如果无法使用单独的 Snowflake 账户,请使用测试用户通过已更改 DNS 的测试 VPC 访问 Snowflake。
若要从本地应用程序进行测试,请使用 DNS 转发将请求转发到已设置 DNS 的 VPC 中的 AWS 专用托管区域。如果 VPC 和本地均有客户端应用程序,请使用 AWS Transit Gateway。
从客户端计算机执行以下命令,以验证返回的 IP 地址是否为存储账户的专用 IP 地址:
dig <bucket_name>.s3.<region>.amazonaws.com
对于
us-east-1
中的 Snowflake 账户,验证您的 Snowflake 客户端是否为最新版本。
使用多个专用接口端点访问多个内部暂存区¶
当您的组织访问 多个账户 的内部暂存区时,建议采用以下实施策略。
S3_STAGE_VPCE_DNS_NAME 参数允许用户将 Snowflake 账户与 Amazon S3 接口端点的 DNS 名称关联起来。这样一来,在 AWS 部署中拥有多个 Snowflake 账户的组织便可以将各个内部暂存区与不同的接口端点关联起来。当每个内部暂存区都有各自的接口端点时,指向特定内部暂存区的网络流量就会与指向其他内部暂存区的网络流量相互隔离。
在继续之前,请确保您已经 满足先决条件。
优势¶
AWS 部署中的内部暂存区具有专用 Amazon S3 接口端点这一策略具有以下优势:
- 安全:
每个账户可以有不同的安全策略,因为各个接口端点可以有不同的安全配置。
- 计费模式:
公司可以根据账户类型(例如,生产与开发)隔离网络流量,并将与流经某端点的数据相关的成本归入正确的账户。
- DNS 管理:
Amazon S3 接口端点的 DNS 名称是全局唯一的名称,可定位特定区域内的特定端点。AWS 会自动将此 DNS 名称注册到其公共 DNS 服务中,这意味着它可以公开解析。由于这些原因,管理员无需进行任何额外的 DNS 配置,即可通过 Amazon S3 接口端点将流量路由到内部暂存区。例如,管理员在配置 Amazon Route 53 DNS 服务时 无需 设置专用托管区域 (PHZ),也无需注册 DNS 名称来指向端点。
配置¶
网络隔离策略包括以下内容:
在 AWS 中,管理员为组织中的每个 Snowflake 账户创建一个新的 Amazon S3 接口端点。例如,如果组织的 Snowflake 部署中拥有两个账户,则管理员需创建两个接口端点。
在 Snowflake 中,管理员使用 S3_STAGE_VPCE_DNS_NAME 参数将每个 Snowflake 账户与其专用接口端点的 DNS 名称关联起来。进入账户内部暂存区的所有流量都会通过该接口端点。
AWS 配置¶
作为 AWS 管理员,在您的 VPC 中执行以下操作:
为每个 Snowflake 账户 创建单独的 Amazon S3 接口端点 (https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)。
对于每个端点,使用 AWS VPC 管理控制台执行以下操作:
打开端点查看其 Details。
找到 DNS Names 字段,然后复制区域范围 DNS 名称。Snowflake S3_STAGE_VPCE_DNS_NAME 参数将设置为该值。
区域范围 DNS 名称格式为
*.vpce-sd98fs0d9f8g.s3.us-west-2.vpce.amazonaws.com
。尽管 AWS 也提供可用区 DNS 名称,但 Snowflake 建议使用区域范围 DNS 名称,因为其可用性高,具备故障转移功能。
Snowflake 配置¶
AWS 管理员为 Snowflake 账户的内部暂存区创建接口端点后,Snowflake 管理员便可使用 S3_STAGE_VPCE_DNS_NAME 参数将该端点的 DNS 名称与账户关联起来。
S3_STAGE_VPCE_DNS_NAME 参数应设置为与特定内部暂存区关联的接口端点的区域范围 DNS 名称。标准格式以星号 (*
) 开头,以 vpce.amazonaws.com
结尾(例如, *.vpce-sd98fs0d9f8g.s3.us-west-2.vpce.amazonaws.com
)。
例如,账户管理员可以执行以下语句,将端点与当前账户关联起来:
alter account set S3_STAGE_VPCE_DNS_NAME='*.vpce-sd98fs0d9f8g.s3.us-west2.vpce.amazonaws.com';
DNS 最终值¶
与账户关联的 DNS 的最终名称格式为:<bucketname>.bucket.vpce-<vpceid>.s3.<region>.vpce.amazonaws.com
其中:
<bucketname>
是内部暂存区的 Amazon S3 桶的名称。<vpceid>
是与账户关联的 Amazon S3 接口端点的唯一标识符。<region>
是托管 Snowflake 账户的 云区域。
DNS 最终名称显示在连接到内部暂存区的各个驱动程序的日志中。