为 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>"
]
}
]
}
备注
您可以修改此策略的
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;
第 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 配置目录集成后,您可以 创建以 AWS Glue 作为目录的 Iceberg 表。
要更新表并与 AWS Glue 中的更改保持同步,请使用 ALTER ICEBERG TABLE ...REFRESH 语句。有关更多信息,请参阅 刷新使用 AWS Glue 作为目录的 Iceberg 表的元数据。