【发布时间】:2017-07-25 11:26:07
【问题描述】:
我为 S3 存储桶中不属于我的账户的文件创建了 Athena 表。 这些表是分区的,当我运行 MSCK REPAIR TABLE 命令时它成功并显示分区不在 Metastore 中。但是当我查询表格时,它会给出以下错误
“您的查询有以下错误:
执行查询的权限不足。
此查询针对“......”数据库运行,除非查询限定。请在我们的论坛上发布错误消息或使用查询 ID 联系客户支持:......”
这可能是什么问题?
【问题讨论】:
我为 S3 存储桶中不属于我的账户的文件创建了 Athena 表。 这些表是分区的,当我运行 MSCK REPAIR TABLE 命令时它成功并显示分区不在 Metastore 中。但是当我查询表格时,它会给出以下错误
“您的查询有以下错误:
执行查询的权限不足。
此查询针对“......”数据库运行,除非查询限定。请在我们的论坛上发布错误消息或使用查询 ID 联系客户支持:......”
这可能是什么问题?
【问题讨论】:
您描述的问题是由错误设置的访问策略引起的。我猜想,Athena 帐户有listBucket 权限,但没有getObject。
作为示例,我使用以下存储桶策略来测试跨账户访问。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::bucketname","arn:aws:s3:::bucketname/*"],
"Principal": "*"
}
]
}
请更改该示例中的主体,否则您的数据将在整个互联网上公开。
【讨论】:
我遇到了类似的问题,原来我的表是使用 AWS Glue 创建的。为 Glue 添加权限解决了这个问题。
【讨论】:
即使我遇到了同样的问题,但问题是有时政策传播需要时间,具体取决于您的服务所在的不同区域。
以下是我所指的策略样本示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Corss-Account-Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AWS-ACCOUNT-ID:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::example-bucket",
"arn:aws:s3:::example-bucket/*"
]
}
]
}
【讨论】: