创建目录

Snowflake Open Catalog 服务管理员会创建目录。

创建目录的步骤取决于您的云存储提供商。

创建目录时,需提供有关外部云存储的信息,Snowflake Open Catalog 会使用这些信息创建存储配置。此配置可为存储存储一个身份和访问管理 (IAM) 实体。Open Catalog 使用 IAM 实体安全地连接到您的存储位置,以便访问表数据、Apache Iceberg™ 元数据和清单文件。

有关说明,请参阅以下章节:

使用 Amazon Simple Storage Service (Amazon S3) 创建目录

Prerequisites

  • 与 Snowflake 账户所在区域相同的 S3 存储桶

    • Open Catalog 不支持包含点的桶名(例如,my.s3.bucket)。Open Catalog 使用虚拟托管风格的路径和 HTTPS 访问 S3 中的数据。但 S3 不支持为名称中带有点的虚拟托管风格桶使用 SSL。

    • 有关数据恢复功能,请咨询存储提供商。

  • 在 AWS 中创建和管理 IAM 策略和角色的权限

    如果您不是 AWS 管理员,请让 AWS 管理员来执行这些任务。

第 1 步:创建授予对 S3 位置的访问权限的 IAM 策略

要在 AWS 管理控制台中为 Open Catalog 配置访问权限,请按照以下步骤操作:

  1. 登录 AWS 管理控制台。

  2. 从主页仪表板中选择 IAM

  3. 在导航窗格中,选择 Account settings

  4. Security Token Service (STS) 下的 Endpoints 列表中,找到账户所在的 Open Catalog 区域,如果 STS status 为非活动,请将其切换为 Active

  5. 在导航窗格中,选择 Policies

  6. 选择 Create Policy

  7. Policy editor 中,选择 JSON

  8. 添加策略,为 Snowflake 提供向 S3 位置读写数据所需的权限。

    备注

    • *my_bucket* 替换为实际桶名。您也可以在桶中指定路径;例如,*my_bucket*/*path*

    • "s3:prefix": 条件设置为 ["*"] 可授予对指定桶中所有前缀的访问权限;将其设置为 ["*path*/*"] 则可授予对桶中指定路径的访问权限。

    • 对于政府区域内的桶,ARNs 使用 arn:aws-us-gov:s3::: 前缀。

    以下示例策略授予对指定桶中所有位置的访问权限:

       {
          "Version": "2012-10-17",
          "Statement": [
                {
                   "Effect": "Allow",
                   "Action": [
                      "s3:PutObject",
                      "s3:GetObject",
                      "s3:GetObjectVersion",
                      "s3:DeleteObject",
                      "s3:DeleteObjectVersion"
                   ],
                   "Resource": "arn:aws:s3:::<my_bucket>/*"
                },
                {
                   "Effect": "Allow",
                   "Action": [
                      "s3:ListBucket",
                      "s3:GetBucketLocation"
                   ],
                   "Resource": "arn:aws:s3:::<my_bucket>",
                   "Condition": {
                      "StringLike": {
                            "s3:prefix": [
                               "*"
                            ]
                      }
                   }
                }
          ]
       }
    
    Copy
  9. 选择 Next

  10. Policy name 中,输入策略名称(例如,open_catalog_access)。

  11. 可选:对于 Description,请输入描述。

  12. 选择 Create policy

第 2 步:创建 IAM 角色,在 S3 桶上授予权限

  1. 在 AWS 管理控制台上的身份和访问管理 (IAM) 控制面板中,选择导航窗格中的 角色

  2. 选择 Create role

  3. 选择 AWS account 作为可信实体类型。

  4. AWS account 下,选择 This account

    在稍后的步骤中,您将修改信任关系,并授予对 Open Catalog 的访问权限。

  5. 可选:要创建外部 ID,请选择 Require external ID 复选框,并输入 external ID (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html);例如 open_catalog_external_id

    备注

    如果在创建目录时没有创建外部 ID,Open Catalog 会生成一个外部 ID 供你使用。外部 ID 用于向第三方(如 Snowflake)授予对 AWS 资源(例如 S3 桶)的访问权限。

  6. 选择 Next

  7. 选择上一步创建的策略,然后选择 Next

  8. 输入角色名称和角色描述,然后选择 Create role

    您现在已经为一个 S3 位置创建了 IAM 策略,创建了一个 IAM 角色,并将策略附加到了该角色。

  9. 要查看角色摘要页面,请选择 View role

  10. 找到并记录角色的 ARN(Amazon 资源名称)值。

第 3 步:在 Open Catalog 中创建目录

  1. 登录 Open Catalog。

  2. 在 Open Catalog 主页的 Catalogs 区域,选择 + Create

  3. Create Catalog 对话框中,填写字段:

    1. Name 中,输入目录名称。

      目录名称区分大小写。

    2. 可选:要创建外部目录,请将 External 设置切换为 On

      有关外部目录的信息,请参阅 目录类型

    3. Storage Provider 中,选择 S3

    4. 对于 Default base location,请输入 AWS S3 存储桶的默认基本位置。

    5. 可选:如果目录包含存储在一个以上位置的对象,请在 Additional locations (optional) 中列出每个附加位置(用逗号分隔)。

    6. 对于 S3 role ARN,输入您为 Open Catalog 创建的 IAM 角色的 ARN。

    7. 可选项:如果在创建 IAM 角色时创建了外部 ID,请在 External ID 中输入外部 ID。

    8. 选择 Create

      对于外部目录,默认情况下禁用凭据交易功能。不过,您可以在目录中启用它。 有关详情,请参阅 [为外部目录启用凭据交易]enable-credential-vending-external-catalog.md)。

第 4 步:检索 Open Catalog 账户的 AWS IAM 用户

  1. 在 Open Catalog 主页的 Catalogs 区域,选择您创建的目录。

  2. Storage Details 下,复制 IAM 用户 arn;例如,arn:aws:iam::123456789001:user/abc1-b-self1234

    Open Catalog 为您的整个 Open Catalog 账户提供单个 IAM 用户。账户中的所有 S3 存储集成都使用该 IAM 用户。

    注意 如果您在创建 IAM 角色时没有指定外部 ID,Open Catalog 会生成一个外部 ID 供您使用。 记录该值,以便您可以使用生成的外部 ID 更新 IAM 角色信任策略。

第 5 步:授予访问桶对象的 IAM 用户权限

  1. 登录 AWS 管理控制台。

  2. 从主页仪表板搜索并选择 IAM

  3. 在导航窗格中,选择 Roles

  4. 选择为存储配置创建的 IAM 角色。

  5. 选择 Trust relationships 选项卡。

  6. 选择 Edit trust policy

  7. 根据记录的目录存储详细信息修改策略文件:

       {
         "Version": "2012-10-17",
         "Statement": [
           {
             "Sid": "",
             "Effect": "Allow",
             "Principal": {
               "AWS": "<open_catalog_user_arn>"
             },
             "Action": "sts:AssumeRole",
             "Condition": {
               "StringEquals": {
                 "sts:ExternalId": "<open_catalog_external_id>"
               }
             }
           }
         ]
       }
    
    Copy

    其中:

    • open_catalog_user_arn 是您记录的 IAM 用户 ARN。

    • open_catalog_external_id 是您的外部 ID。如果您在创建角色时已经指定了外部 ID,并使用相同的 ID 创建外部卷,请保持该值不变。否则,请使用记录的值更新 sts:ExternalId

      备注

      如果您创建了新的存储配置,并且没有提供自己的外部 ID,则必须更新此策略文件。出于安全原因,新的或重新创建的存储配置具有不同的外部 ID,除非您更新此信任策略,否则无法解析信任关系。

    IAM 角色的策略文档示例

    更新 IAM 角色的信任策略。

  8. 要保存更改,请选择 Update policy

使用 Google 云存储创建目录

本章节介绍如何使用存储配置创建目录并授予 Open Catalog 对云存储桶的受限访问权限。

组织中的管理员会在 Google Cloud 账户中授予 IAM 用户权限。

备注

  • 必须在 Google Cloud 中拥有创建和管理 IAM 策略和角色的权限,才能完成本主题中的说明。如果您不是 Google Cloud 管理员,请让 Google Cloud 管理员执行这些任务。

  • 有关数据恢复功能,请咨询存储提供商。

第 1 步:创建目录

  1. 登录 Open Catalog。

  2. 在 Open Catalog 主页的 Catalogs 区域,选择 + Create

  3. Create Catalog 对话框中,填写字段:

    1. Name 中,输入目录名称。

      目录名称区分大小写。

    2. 可选:要创建外部目录,请将 External 设置切换为 On

      有关外部目录的信息,请参阅 目录类型

    3. 对于 Storage Provider,请选择 GCS

    4. Default base location 中,输入您的云存储桶的默认基本位置。

    5. 可选:如果目录包含存储在多个位置的对象,可在 Additional locations (optional) 中,列出每个附加存储位置,用逗号分隔。

    6. 选择 Create

      对于外部目录,默认情况下禁用凭据交易功能。不过,您可以在目录中启用它。 有关详情,请参阅 [为外部目录启用凭据交易]enable-credential-vending-external-catalog.md)。

第 2 步:为 Open Catalog 账户找回 Google Cloud 服务账户

  1. 在 Open Catalog 主页的 Catalogs 区域,选择您创建的目录。

  2. Storage Details 下,复制 GCP_SERVICE_ACCOUNT ID;例如,service-account-id@project1-123456.iam.gserviceaccount.com

    Open Catalog 为整个 Open Catalog 账户提供单个 Google Cloud 服务账户,并在访问 Google Cloud 上的存储时使用该服务账户。

第 3 步:授予服务账户访问桶对象的权限

在此步骤中,您将在 Google Cloud Console 中为 Open Catalog 配置 IAM 访问权限。

创建自定义 IAM 角色

创建具有访问桶和获取对象所需权限的自定义角色。

  1. 以项目编辑者身份登录 Google Cloud Console。

  2. 在主仪表板的导航菜单中选择 IAM & Admin > Roles

  3. 选择 Create Role

  4. Title 中,输入自定义角色的标题。

  5. 可选:对于 Description,输入自定义角色的描述。

  6. 选择 Add Permissions

  7. Filter 中,选择 Service,然后选择 storage

  8. 筛选权限列表,并从列表中选择以下内容:

    • storage.buckets.get

    • storage.objects.create

    • storage.objects.delete

    • storage.objects.get

    • storage.objects.list

  9. 选择 Add

  10. 选择 Create

为 Google Cloud 服务账户分配自定义角色

请留在 Google Cloud Console 中进行此操作。

  1. 在主仪表板的导航菜单中选择 Cloud Storage > Buckets

  2. 筛选桶列表,然后选择在 Open Catalog 存储配置中指定的桶。

  3. 选择 Permissions > View by principals,然后选择 Grant access

  4. Add principals 下,粘贴之前复制的服务账户 ID。

  5. Assign roles 下,选择之前创建的自定义 IAM 角色,然后选择 Save

使用 Azure 存储创建目录

本节介绍如何使用存储配置授予 Open Catalog 对自己的 Microsoft Azure 容器的受限访问权限。Open Catalog 支持以下 Azure 云存储服务的存储配置:

  • Blob 存储

  • Data Lake Storage Gen2

  • 常规用途 v1

  • General-purpose v2

组织中的管理员会在 Azure 账户中授予 IAM 用户权限。

备注

  • 需要在 Azure 中拥有创建和管理 IAM 策略和角色的权限,才能完成本主题中的说明。如果您不是 Azure 管理员,请让 Azure 管理员执行这些任务。

  • 有关数据恢复功能,请咨询存储提供商。

第 1 步:创建目录

  1. 登录 Open Catalog。

  2. 在 Open Catalog 主页的 Catalogs 区域,选择 + Create

  3. Create Catalog 对话框中,填写字段:

    1. Name 中,输入目录名称。

      目录名称区分大小写。

    2. 可选:要创建外部目录,请将 External 设置切换为 On

      有关外部目录的信息,请参阅 目录类型

    3. 对于 Storage Provider,请选择 AZURE

    4. 对于 Default base location,通过从该列表中将适用格式应用到容器主端点的路径,输入 Azure 存储容器的默认基本位置:

      端点类型

      格式

      默认基本位置示例

      Blob

      abfss://<container_name>@<storage_account_name>.blob.core.windows.net/<directory_name>/

      abfss://my_container1@my_storageaccount1.blob.core.windows.net/my_directory1/

      Azure 数据湖存储 (ADLS)

      abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<directory_name>/

      abfss://my_container2@my_storageaccount2.dfs.core.windows.net/my_directory2/

      备注

      • 创建 Microsoft Azure 容器时,您复制了此路径和容器名称。

      • 在容器主端点的路径中,存储账户的名称是 https:// 和路径中第一个句号之间的文本。

      • 使用 abfss:// prefix, not https://

    5. 可选:如果目录包含存储在一个以上位置的对象,请在 Additional locations (optional) 字段中列出每个附加存储位置,用逗号分隔。

    6. 对于 Tenant ID,输入 Azure 租户 ID。

    7. 选择 Create

      对于外部目录,默认情况下禁用凭据交易功能。不过,您可以在目录中启用它。 有关详情,请参阅 [为外部目录启用凭据交易]enable-credential-vending-external-catalog.md)。

第 2 步:复制存储位置的值

  1. 在 Open Catalog 主页的 Catalogs 区域,选择您创建的目录。

  2. Storage Details 下,复制以下值:

    属性

    描述

    AZURE_CONSENT_URL

    Microsoft 权限请求页面的 URL。

    AZURE_MULTI_TENANT_APP_NAME

    为账户创建的 Snowflake 客户端应用程序的名称。在本部分后面的步骤中,您会授予此应用程序在允许的存储位置获取访问令牌的权限。

    您可在以下步骤中使用这些值。

第 3 步:授予 Azure 服务主体访问令牌的权限

  1. 在 Web 浏览器中,导航到 Microsoft 权限请求页面(Azure 同意 URL)。

  2. 选择 Accept

    此操作允许向为 Open Catalog 账户创建的 Azure 服务主体授予对租户内指定资源的访问令牌。仅当您授予服务主体对容器的适当权限时,才能成功获取访问令牌。Microsoft 权限请求页面会重定向到 Snowflake 公司站点 (snowflake.com)。

  3. 登录 Microsoft Azure 门户。

  4. 打开 Azure Services > Storage Accounts

  5. 选择 Open Catalog 服务主体需要访问的存储账户的名称。

  6. 选择 Access Control (IAM) > Add role assignment

  7. 选择要授予 Open Catalog 服务委托人的所需角色,如存储 Blob 数据贡献者角色。

    Storage Blob Data Contributor 角色授予对 Open Catalog 服务主体的读写访问权限,并授予对存储位置的写入访问权限。

    备注

    Open Catalog 会发布一个用户授权共享访问签名 (SAS) 令牌。访问存储 Blob 的 SAS 令牌的作用域是容器级别,而不是 Blob 或目录级别。所选角色应有权创建用户授权密钥。有关这些角色的列表,请参阅 使用 RBAC 分配权限 (https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas)。

  8. 选择 Next

  9. 选择 + Select members

  10. 一小时后,搜索并选择 Open Catalog 服务主体,即 Azure 多租户应用程序名称属性。在属性值中搜索下划线 之前 的字符串。

    重要

    • Azure 可能需要一个小时或更长时间才能创建通过此部分中的 Microsoft 请求页面请求的 Open Catalog 服务主体。如果服务主体不能立即使用,请等待一两个小时,然后再次搜索。

    • 如果删除服务主体,目录将因身份验证失败而停止工作。

  11. 选择 Select

  12. 选择 Review + assign

备注

分配角色时,变更最多可能需要 10 分钟才能生效。有关详细信息,请参阅 Microsoft Azure 文档中的 Symptom - Role assignment changes are not being detected (https://learn.microsoft.com/en-us/azure/role-based-access-control/troubleshooting?tabs=bicep#symptom---role-assignment-changes-are-not-being-detected)。

语言: 中文