2017-07-25 37 views
0

我爲S3存儲桶中不屬於我的帳戶的文件創建了Athena表。 表被分區,當我運行MSCK REPAIR TABLE命令時,它成功並顯示不在Metastore中的分區。但是,當我查詢表它給下面的錯誤查詢Athena表的問題源存儲桶來自不同的帳戶

「您所查詢的有如下錯誤(S):

沒有足夠的權限來執行查詢

此查詢運行反對」 .... ..「數據庫,除非查詢資格請張貼錯誤消息對我們的詢問ID論壇或聯繫客戶支持:...........」

這可能是什麼問題嗎?

回答

0

您描述的問題是由錯誤設置的訪問策略引起的。我猜想,雅典娜帳戶具有listBucket特權,但不是getObject

作爲示例,我使用以下存儲桶策略來測試跨帳戶訪問權限。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Action": [ 
     "s3:GetObject", 
     "s3:ListBucket" 
     ], 
     "Effect": "Allow", 
     "Resource": ["arn:aws:s3:::bucketname","arn:aws:s3:::bucketname/*"], 
     "Principal": "*" 
    } 
    ] 
} 

請更改樣本中的委託人或將您的數據公開爲整個互聯網。

+0

我期待在源AWS賬戶的區權限。在公開訪問下,我可以看到列出對象,寫入對象,讀取存儲桶權限,寫入授予「任何AWS用戶」的存儲桶權限。這不夠嗎?但是,在「訪問其他AWS賬戶」下沒有添加賬戶。 – Sarang

+0

對我來說,在控制檯中向任何用戶添加READ訪問權限不起作用。我必須明確使用存儲桶策略才能運行。 –

0

我也有類似的問題,事實證明,我的表是使用AWS膠水創建。向Glue添加權限解決了問題。

0

即使我有同樣的問題,但美中不足的是,有時根據不同區域的服務都放在策略傳播需要時間。

  • 提供Principal的「*」值可能不是一個好主意,因爲這會讓您的存儲桶全局訪問。
  • 然後將所有s3權限授予其他AWS賬戶。
  • 現在,由於我們已經給了另一個帳戶的root權限,Athena作爲一個內部的服務將能夠進行必要的連接。
  • 爲了清楚起見,您只需將桶名稱放在同一個AWS賬戶中即可,無需擔心位置。

下面是我指的是政策樣品的例子:

{ "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/*" ] } ] }