使用Trino与AWS Glue创建Delta表时遭遇S3访问被拒
问题描述
我通过以下配置将Trino与Delta Lake集成,使用Glue作为元数据存储:
connector.name=delta_lake hive.metastore=glue hive.metastore.glue.region=eu-west-3 hive.metastore.glue.aws-access-key=<maskedaccesskey> hive.metastore.glue.aws-secret-key=<maskedsecretkey> hive.metastore.glue.catalogid=<maskedcatalogid>
执行创建表语句时返回S3访问拒绝错误:
trino>USE delta_lake."mygluedatabasename"; USE trino:mygluedatabasename> CREATE TABLE orders ( -> order_id bigint, -> order_status varchar, -> totalprice double, -> order_date date -> ) -> WITH (location = 's3a://mys3bucket/deltalake/orders') -> ; Query 20240410_100938_00015_mpd3c failed: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XKAVYKRE51Z3KG6A; S3 Extended Request ID: yWIVi5SiVjes64QGN1rHzYWV+Q/kSCMpLzTzMdtBtnic+MROgcFWa/6TsRYm7bQI57poBJ3kKCc3bDPIjk4lXB==; Proxy: null)
已确认该AWS密钥对S3桶拥有list-object-versions、get-bucket-location等权限,但仍报错。
排查与解决建议
- 补全S3写入相关权限:创建Delta表时,Trino需要对目标路径执行写入、删除操作,确保IAM策略包含以下动作:
{ "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject", "s3:ListBucket", "s3:GetObject", "s3:GetBucketLocation", "s3:ListObjectVersions" ], "Resource": [ "arn:aws:s3:::mys3bucket", "arn:aws:s3:::mys3bucket/deltalake/orders/*" ] } - 校验区域一致性:确认S3桶的实际区域为
eu-west-3,与Glue配置的区域保持一致,避免跨区域访问的权限限制。 - 检查S3桶策略:排查桶策略是否存在
Deny语句拦截该IAM用户的请求,确保桶策略未覆盖IAM权限。 - 尝试修改S3路径格式:部分Trino环境对
s3a://支持存在差异,尝试将路径改为s3://mys3bucket/deltalake/orders后重新测试。 - 补充Glue元数据权限:创建表时需要同步元数据到Glue,确保IAM用户拥有以下Glue权限:
{ "Effect": "Allow", "Action": [ "glue:CreateTable", "glue:UpdateTable", "glue:GetTable", "glue:GetDatabase" ], "Resource": "arn:aws:glue:eu-west-3:<maskedcatalogid>:database/mygluedatabasename" } - 临时全权限排查:若以上操作无效,可临时给IAM用户附加
AmazonS3FullAccess和AWSGlueConsoleFullAccess权限测试,确认是否为权限遗漏,排查完成后再收紧权限。
内容的提问来源于stack exchange,提问作者dnsh
相关产品推荐
相关产品推荐

