管理 Snowflake Open Catalog 的专用连接端点:AWS

当您的 Snowflake Open Catalog 账户中的目录数据存储在 Amazon Simple Storage Service (Amazon S3) 存储桶中时,请按照以下步骤为出站网络流量设置专用连接。

要为您的 Open Catalog 账户 启用专用连接,您通常只需要完成一次本主题中的 设置步骤。完成后,即可为 Open Catalog 账户中的每个 *目录 *启用出站专用连接。

例如,如果您完成了设置步骤,然后创建了新的 catalog1 目录,则通常只需要为 catalog1 启用出站专用连接。有关如何为目录启用专用连接的说明,请参阅 为目录启用出站专用连接。但是,如果 catalog1 使用的存储桶尚未更新其桶策略,则还需要为该存储桶 更新存储桶策略。更新存储桶策略时,系统会将存储桶的网络访问权限限制为专用连接端点。

先决条件

  • 您的 Open Catalog 账户和外部云存储必须托管在同一个 AWS 区域。

  • 您需要在 AWS 中具备 IAM 权限才能修改存储 Iceberg 表的 AWS 存储桶的存储桶策略。有关详细信息,请参阅 AWS 文档中的 Amazon S3 的桶策略 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)。

  • 您的第三方查询引擎或 Snowflake 引擎必须能够通过 AWS PrivateLink 或 S3 网关端点访问您的存储桶。有关详细信息,请参阅 AWS 文档中的 配置界面端点 (https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html)。否则,当您启用出站专用连接时,引擎无法读取或写入存储桶中存储的表,但是 Open Catalog 可以向存储桶读取或写入元数据。

设置账户的专用连接

要为 Open Catalog 账户设置专用连接,请按照以下步骤操作。

第 1 步:为 Open Catalog 创建 Snowflake CLI 连接

要在 Open Catalog 中设置专用连接,您需要为 Open Catalog 建立 Snowflake CLI 连接。请按照下列步骤创建此连接。如果尚未安装 Snowflake CLI,请参阅 安装 Snowflake CLI

准备工作

要为 Open Catalog 创建 Snowflake CLI 连接,您需要完整的 Open Catalog 账户标识符。账户标识符包括您的 Snowflake 组织名称和您的 Open Catalog 账户名称;例如,<orgname>.<my-snowflake-open-catalog-account-name>

  • 要查找您的 Snowflake 组织名称 (<orgname>),请参阅 查找账户的组织和账户名称 <https://docs.snowflake.com/en/user-guide/admin-account-identifier.html#label-account-name-find>_。

  • 要查找 Snowflake Open Catalog 账户名称 (<my-snowflake-open-catalog-account-name>),请参阅 查找 Snowflake Open Catalog 账户的账户名称 <https://other-docs.snowflake.com/en/opencatalog/find-account-name>_。

重要

要创建此连接,您必须是具有服务管理员权限的 Open Catalog 用户。有关服务管理员权限的信息,请参阅 服务管理员角色

为 Snowflake Open Catalog 添加 Snowflake CLI 连接

为要启用专用连接的 Snowflake Open Catalog 账户添加连接。

  • 添加一个连接 <https://docs.snowflake.com/en/developer-guide/snowflake-cli/connecting/configure-connections#add-a-connection>_,使用如下值。对于所有其他参数,按 Enter 键跳过指定参数值。

    连接配置参数

    Name for this connection

    指定连接名称,例如 myopencatalogconnection

    Account name

    按如下格式指定您的 Snowflake 组织名称,后接您的 Open Catalog 账户名称:

    <orgname>-<my-snowflake-open-catalog-account-name>

    例如 ABCDEFG-MYACCOUNT1

    要查找这些名称,请参阅 准备工作_。

    Username

    指定您的 Open Catalog 用户名;例如,jsmith

    Password [optional]

    为 Open Catalog 创建连接时,该参数 不是 可选参数。

    输入您的 Open Catalog 密码;例如,MyPassword123456789

    Role for the connection [optional]

    为 Open Catalog 创建连接时,该参数 不是 可选参数。

    您必须输入 POLARIS_ACCOUNT_ADMIN

测试 Snowflake CLI 连接

  • 要测试 CLI 连接,请按照本例测试 myopencatalogconnection 的连接:

    snow connection test -c myopencatalogconnection
    
    Copy

    响应应该如下所示:

    +------------------------------------------------------------------------------+
    | key              | value                                                     |
    |----------------------------+-------------------------------------------------|
    | Connection name  | myopencatalogconnection                                   |
    | Status           | OK                                                        |
    | Host             | ABCDEFG-MYACCOUNT1.snowflakecomputing.cn                 |
    | Account          | ABCDEFG-MYACCOUNT1                                        |
    | User             | jsmith                                                    |
    | Role             | POLARIS_ACCOUNT_ADMIN                                     |
    | Database         | not set                                                   |
    | Warehouse        | not set                                                   |
    +------------------------------------------------------------------------------+
    
    Copy

将用于 Snowflake Open Catalog 的 Snowflake CLI 连接设置为默认连接

为确保您使用的连接始终具有所需的 POLARIS_ACCOUNT_ADMIN 角色,您可以将为 Open Catalog 创建的 Snowflake CLI 连接设置为默认连接。有关默认连接的更多信息,请参阅 设置默认连接 <https://docs.snowflake.com/en/developer-guide/snowflake-cli/connecting/configure-connections#set-the-default-connection>_。

  1. 本例将 myopencatalogconnection 连接设为默认连接,请按照本例操作:

    snow connection set-default myopencatalogconnection
    
    Copy
  2. 要确认所用的用户和角色是否正确,请运行以下命令:

    snow sql -q "Select current_user(); select current_role();"
    
    Copy

    响应将返回您的 Open Catalog 用户名,CURRENT ROLE 应为 POLARIS_ACCOUNT_ADMIN。

    +----------------+
    | CURRENT_USER() |
    |----------------|
    | JSMITH        |
    +----------------+
    select current_role();
    +-----------------------+
    | CURRENT_ROLE()        |
    |-----------------------|
    | POLARIS_ACCOUNT_ADMIN |
    +-----------------------+
    
    Copy

第 2 步:提供专用连接端点

使用 Open Catalog 的 Snowflake CLI 连接来调用以下系统函数:

  1. 要为存储桶配置专用连接端点,请调用 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 系统函数。

  2. 要确认专用连接端点已准备就绪,请调用 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 系统函数。

有关说明,请参阅 Snowflake 文档中的 配置专用连接端点。请记住,这些说明涉及的是 Snowflake 账户,而不是 Snowflake Open Catalog 账户,但 Open Catalog 中的流程是相同的。

重要

  • 您必须使用 POLARIS_ACCOUNT_ADMIN 角色而不是说明中提及的 ACCOUNTADMIN 角色。

  • 如果您设置的默认 Snowflake CLI 连接没有被授予 POLARIS_ACCOUNT_ADMIN 角色,则必须在命令中包含以下语句:USE ROLE POLARIS_ACCOUNT_ADMIN;

  • 使用命令时,您必须在 $ 的前面插入正斜杠才能对其进行转义。例如 snow sql -q "SELECT SYSTEM\$GET_PRIVATELINK_CONFIG();"

备注

您可以使用预置的此专用连接端点来授予对位于托管 Open Catalog 账户的同一 AWS 区域的所有存储桶的访问权限;您无法使用它来授予对位于不同区域的桶的访问权限。

示例:提供专用连接端点

以下示例创建了一个具有 Amazon S3 外部访问权限的 PrivateLink,以便为 us-west-2 区域设置端点:

SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
  'com.amazonaws.us-west-2.s3',
  '*.s3.us-west-2.amazonaws.com'
);
Copy

第 3 步:更新存储桶策略

要将存储桶的网络访问权限限制为在上一步中创建的专用连接端点,请在 AWS 中更新存储桶的存储桶策略。有关说明,请参阅 AWS 文档中的 限制对特定 VPCendpoint 的访问权限 (https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html#example-bucket-policies-restrict-accesss-vpc-endpoint)。对于存储桶策略中的 <vpce-id>,指定在上一步中创建的专用连接端点的 ID。

如果需要,对要连接到 Open Catalog 的任何其他存储桶重复此步骤。

重要

确保桶策略包含允许您在添加桶和桶策略后从浏览器访问桶和桶策略的权限。否则,更新桶策略后,您将无法通过浏览器访问桶或桶策略。

此示例存储桶策略允许您通过浏览器访问存储桶和存储桶策略:

{
    "Version": "2012-10-17",
    "Id": "Policy1234567890123",
    "Statement": [
        {
            "Sid": "Deny public access",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:SourceVpc": "vpc-*"
                }
            }
        },
        {
            "Sid": "Access-to-specific-VPCE-only",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:SourceVpce": "vpce-xxxxxxxxxxx"
                }
            }
        }
    ]
}
Copy

为目录启用出站专用连接

本节介绍如何在 Open Catalog 账户中为目录启用出站专用连接。

第 1 步:启用专用连接

您可以为新目录或现有目录启用专用连接:

为新目录启用专用连接

按照 使用 Amazon Simple Storage Service (Amazon S3) 创建目录 中的说明进行操作。 确保目录的 Private Link 开关处于 Enabled 状态。

备注

如果您尚未更新存储目录表的桶的桶策略,请参阅 更新桶策略。更新桶策略时,系统会将存储桶的网络访问权限限制为专用连接端点。

为现有目录启用专用连接

  1. 登录 Open Catalog。

  2. 在导航菜单中,选择 Catalogs

  3. 在目录列表中,选择您要启用专用连接的目录。

  4. Catalog Details 选项卡上,将 PrivateLink 开关设置为 Enabled

第 2 步:使用查询引擎创建表

要验证查询引擎是否已通过 AWS PrivateLink 连接到目录,请使用查询引擎创建表并将数据插入其中。如果您无法向表中插入数据,则可能没有为查询引擎配置的 AWS PrivateLink。

故障排除

本部分提供了网络流量的出站专用连接问题的故障排除。

无法在 Open Catalog 中查看表的架构

症状

在 Open Catalog 中,您在目录中选择了一个表(例如 catalog1),但会收到以下错误消息:“No permissions to access this resource.”

原因

在 AWS 中,您已成功更新存储桶策略,以便通过 VPC 端点对网络流量进行路由。但是,在 Open Catalog 中,您尚未为此目录启用专用连接,因此 Open Catalog 无法访问桶。

解决方案

为目录启用专用连接(例如,catalog1)。有关详细信息,请参阅 为目录启用专用连接

语言: 中文