我为S3存储桶中不属于我帐户的文件创建了Athena表。 这些表是分区的,当我运行MSCK REPAIR TABLE命令时,它成功并显示不在Metastore中的分区。但是,当我查询表时,它会给出以下错误
“您的查询有以下错误:
执行查询的权限不足。
此查询针对“......”数据库运行,除非查询限定。请在我们的论坛上发布错误消息或通过查询ID联系客户支持:...........“
这可能是什么问题?
答案 0 :(得分:0)
您所描述的问题是由错误设置的访问策略引起的。我猜,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": "*"
}
]
}
请更改该样本中的主体,否则您的数据将在整个互联网上公开。
答案 1 :(得分:0)
我遇到了类似的问题,结果表明我的表是使用AWS Glue创建的。向Glue添加权限解决了这个问题。
答案 2 :(得分:0)
即使我遇到了同样的问题,但有时问题是政策传播需要时间,具体取决于您的服务所在的不同区域。
以下是我所指的政策样本示例:
{
"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/*"
]
}
]
}