将 Amazon S3 访问权限管控与 Amazon Glue 结合使用
在 Glue 5.0 版中,Amazon S3 访问权限管控提供了一种可扩展的访问控制解决方案,您可以使用该解决方案来增强对 Amazon Glue 中 Amazon S3 数据的访问。如果您的 S3 数据有复杂或大规模的权限配置,则可以使用 S3 访问权限管控来扩展用户和角色的 S3 数据权限。
使用 S3 访问权限管控可增强对 Amazon S3 数据的访问权限,其超出运行时角色或 IAM 角色授予的权限,这些权限附加到具有对 Amazon Glue 作业的访问权限的身份。有关更多信息,请参阅《Amazon S3 用户指南》中的使用 S3 Access Grants 管理访问权限。
Amazon Glue 如何与 S3 访问权限管控结合使用
Amazon Glue 版本 5.0 及更高版本提供与 S3 访问权限管控的本机集成。您可以在 Amazon Glue 上启用 S3 访问权限管控并运行 Spark 作业。当您的 Spark 作业请求获取 S3 数据时,Amazon S3 会提供限定于特定存储桶、前缀或对象的临时凭证。
下面是 Amazon Glue 如何访问 S3 访问权限管控管理访问权限的数据的高级概述。

用户提交使用 Amazon S3 中存储的数据的 Amazon Glue Spark 作业。
Amazon Glue 请求 S3 访问权限管控为允许访问存储桶、前缀或对象的用户提供临时凭证。
Amazon Glue 以 Amazon Security Token Service (STS) 令牌的形式为用户返回临时凭证。令牌限定为访问 S3 存储桶、前缀或对象。
Amazon Glue 使用 STS 令牌从 S3 中检索数据。
Amazon Glue 从 S3 接收数据并将结果返回给用户。
Amazon Glue 的 S3 访问权限管控注意事项
将 S3 访问权限管控与 Amazon Glue 结合使用时,请注意以下行为和限制。
功能支持
Amazon Glue 版本 5.0 及更高版本支持 S3 访问权限管控。
当您将 S3 访问权限管控与 Amazon Glue 结合使用时,Spark 是唯一支持的作业类型。
将 S3 访问权限管控与 Amazon Glue 结合使用时,Delta Lake 和 Hudi 是唯一支持的开放表格式。
以下功能不支持与 S3 访问权限管控结合使用:
Apache Iceberg 表
向使用 IAM 角色的 Amazon S3 发送 Amazon CLI 请求
通过开源 S3A 协议访问 S3
行为注意事项
Amazon Glue 提供凭证缓存来确保用户无需在 Spark 作业中重复请求相同的凭证。因此,Amazon Glue 在请求凭证时总是会请求默认级别的权限。有关更多信息,请参阅《Amazon S3 用户指南》中的请求对 S3 数据的访问。
使用 Amazon Glue 设置 S3 访问权限管控
先决条件
调用者或管理员创建了 S3 访问权限管控实例。
设置 Amazon Glue 策略和作业配置
要使用 Amazon Glue 设置 S3 访问权限管控,您必须配置信任和 IAM 策略,并通过作业参数传递配置。
对用于授权的角色(运行会话或作业的 Amazon Glue 角色)配置以下最低信任和 IAM 策略。
信任策略:
{ "Sid": "Stmt1234567891011", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity", "sts:SetContext" ], "Effect": "Allow", "Principal": { "Service": "access-grants.s3.amazonaws.com" }, "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012", "aws:SourceArn": "arn:aws:s3:
<region>
:123456789012:access-grants/default" } } }IAM 策略:
{ "Sid": "S3Grants", "Effect": "Allow", "Action": [ "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:
<region>
:123456789012:access-grants/default" }, { "Sid": "BucketLevelReadPermissions", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": [ "arn:aws:s3:<region>
:123456789012:access-grants/default" ] } } }, { "Sid": "ObjectLevelReadPermissions", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectVersionAcl", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" }, "ArnEquals": { "s3:AccessGrantsInstanceArn": [ "arn:aws:s3:<region>
:123456789012:access-grants/default" ] } } }在您的 Amazon Glue 作业中,通过 Amazon Glue 作业参数或
SparkConf
传递下面的 Spark 配置。--conf spark.hadoop.fs.s3.s3AccessGrants.enabled=true \ --conf spark.hadoop.fs.s3.s3AccessGrants.fallbackToIAM=false