为 AWS Glue 配置目录集成¶
重要
要与 AWS Glue 集成,我们建议您为 AWS Glue Iceberg REST 端点配置目录集成,支持其他 Iceberg 表功能,如由目录分发的凭据。
有关说明,请参阅 为 AWS Glue Iceberg REST 配置目录集成。
为 AWS Glue 创建目录集成,并授予 Snowflake 对 AWS Glue Data Catalog 的受限访问权限。
备注
要完成本节中的说明,您必须在 Amazon Web Services (AWS) 中拥有创建和管理 IAM 策略和角色的权限。如果您不是 AWS 管理员,请让 AWS 管理员来执行这些任务。
要将标准 Snowflake 数据库中的 Iceberg 表从 AWS Glue 目录集成迁移到 AWS Glue Iceberg REST 目录集成,请参阅 SYSTEM$SET_CATALOG_INTEGRATION。
第 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:GetTableglue: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>"
]
}
]
}
备注
您可以修改此策略的
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) 命令为 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;
第 3 步:检索 Snowflake 账户的 AWS IAM 用户和外部 ID¶
要检索创建目录集成时为 Snowflake 账户创建的 AWS IAM 用户和外部 ID 的相关信息,请执行 DESCRIBE CATALOG INTEGRATION 命令。在下一节中,您将这些信息提供给 AWS 以建立信任关系。
以下示例命令描述了在上一步中创建的目录集成:
DESCRIBE CATALOG INTEGRATION glueCatalogInt;
记录以下值:
值
描述
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_ARN 和 GLUE_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>"
}
}
}
]
}
其中:
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 配置目录集成后,您可以创建 Iceberg 表。
要更新表并与 AWS Glue 中的更改保持同步,请使用 ALTER ICEBERG TABLE ... 语句。有关更多信息,请参阅 刷新表的元数据。