为 AWS Glue 配置目录集成

本主题介绍如何为 AWS Glue 创建目录集成,并授予 Snowflake 对 AWS Glue Data Catalog 的受限访问权限。

备注

要完成本节中的说明,您必须在 Amazon Web Services (AWS) 中拥有创建和管理 IAM 策略和角色的权限。如果您不是 AWS 管理员,请让 AWS 管理员来执行这些任务。

第 1 步:配置 AWS Glue Data Catalog 的访问权限

最佳实践是为 Snowflake 创建一个新的 IAM 策略来访问 AWS Glue Data Catalog。然后,您可以将策略附加到 IAM 角色,并使用 AWS 为该角色生成的安全凭据来访问目录中的文件。有关说明,请参阅《AWS Identity and Access Management 用户指南》中的 创建 IAM 策略 (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html) 和 修改角色权限策略 (https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)。

Snowflake 至少需要 AWS Glue Data Catalog 的以下权限才能访问有关表的信息。

  • glue:GetTable

  • glue:GetTables

以下示例策略(JSON 格式)提供了访问指定数据库中所有表所需的权限。

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "AllowGlueCatalogTableAccess",
         "Effect": "Allow",
         "Action": [
            "glue:GetTable",
            "glue:GetTables"
         ],
         "Resource": [
            "arn:aws:glue:*:<accountid>:table/*/*",
            "arn:aws:glue:*:<accountid>:catalog",
            "arn:aws:glue:*:<accountid>:database/<database-name>"
         ]
      }
   ]
}
Copy

备注

  • 您可以修改此策略的 Resource 元素以进一步限制允许的资源(例如,目录、数据库或表)。有关更多信息,请参阅 AWS Glue 定义的资源类型 (https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-resources-for-iam-policies)。

  • 如果您对 AWS Glue 使用加密,则必须修改策略以添加 AWS 密钥管理服务 (AWS KMS) 权限。有关更多信息,请参阅 在 AWS Glue 中设置加密 (https://docs.aws.amazon.com/glue/latest/dg/set-up-encryption.html)。

第 2 步:在 Snowflake 中创建目录集成

使用 CREATE CATALOG INTEGRATION 命令为 AWS Glue Data Catalog 创建目录集成。

以下示例创建了一个使用 AWS Glue Data Catalog 的目录集成。该示例为可选的 GLUE_REGION 参数指定了一个值。

CREATE CATALOG INTEGRATION glueCatalogInt
  CATALOG_SOURCE=GLUE
  CATALOG_NAMESPACE='my.catalogdb'
  TABLE_FORMAT=ICEBERG
  GLUE_AWS_ROLE_ARN='arn:aws:iam::123456789012:role/myGlueRole'
  GLUE_CATALOG_ID='123456789012'
  GLUE_REGION='us-east-2'
  ENABLED=TRUE;
Copy

第 3 步:检索 Snowflake 账户的 AWS IAM 用户和外部 ID

要检索创建目录集成时为 Snowflake 账户创建的 AWS IAM 用户和外部 ID 的相关信息,请执行 DESCRIBE CATALOG INTEGRATION 命令。在下一节中,您将这些信息提供给 AWS 以建立信任关系。

以下示例命令描述了在上一步中创建的目录集成:

DESCRIBE CATALOG INTEGRATION glueCatalogInt;
Copy

记录以下值:

描述

GLUE_AWS_IAM_USER_ARN

为 Snowflake 账户创建的 AWS IAM 用户,例如 arn:aws:iam::123456789001:user/abc1-b-self1234。Snowflake 会为整个 Snowflake 账户配置单一 IAM 用户。您账户中的所有 Glue 目录集成都使用该 IAM 用户。

GLUE_AWS_EXTERNAL_ID

建立信任关系所需的外部 ID。

您要在下一部分提供这些值。

第 4 步:授予 IAM 用户访问 AWS Glue Data Catalog 的权限

更新与创建目录集成 (GLUE_AWS_ROLE_ARN) 时用 ARN 指定的 相同 IAM 角色的信任策略。将您在 第 3 步:检索 Snowflake 账户的 AWS IAM 用户和外部 ID 中记录的值添加到信任策略中。

有关说明,请参阅 修改信任策略 (https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy)。

以下示例信任策略演示了在何处指定 GLUE_AWS_IAM_USER_ARNGLUE_AWS_EXTERNAL_ID 值:

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

其中:

  • glue_iam_user_arn 是您记录的 GLUE_IAM_USER_ARN 值。

  • glue_aws_external_id 是您记录的 GLUE_AWS_EXTERNAL_ID 值。

备注

  • 出于安全原因,如果您创建新的目录集成(或使用 CREATE OR REPLACE CATALOG INTEGRATION 语法重新创建现有目录集成),新的目录集成将具有不同的外部 ID,并且无法解析信任关系,除非您使用新的外部 ID 修改信任策略。

  • 为了验证权限配置是否正确,请使用这个目录集成 创建一个 Iceberg 表。在您创建引用此目录集成的 Iceberg 表之前,Snowflake 不会验证权限设置是否正确。

后续步骤

为 AWS Glue 配置目录集成后,您可以 创建以 AWS Glue 作为目录的 Iceberg 表

要更新表并与 AWS Glue 中的更改保持同步,请使用 ALTER ICEBERG TABLE ...REFRESH 语句。有关更多信息,请参阅 刷新使用 AWS Glue 作为目录的 Iceberg 表的元数据

语言: 中文