允许雅典娜查询S3存储桶

时间:2019-04-05 05:58:25

标签: amazon-s3 amazon-athena

我有这个存储桶策略,它可以正常运行。唯一的问题是它不允许雅典娜查询。如何将其修改为所有雅典娜?

# result of `dput(GL)`
GL <- structure(list(well = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L), .Label = c("101", "684"), class = "factor"), year = structure(c(1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("1994", "1995", "1996"
), class = "factor"), month = structure(c(3L, 2L, 4L, 1L, 3L, 
2L, 4L, 1L, 3L, 2L, 4L, 1L, 3L, 2L, 4L, 1L, 3L, 2L, 4L, 1L, 3L, 
2L, 4L, 1L), .Label = c("Apr", "Feb", "Jan", "Mar"), class = "factor"), 
    value = structure(c(3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 
    1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L), .Label = c("8.12", 
    "8.21", "8.53", "8.62"), class = "factor"), area = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("H", "R"), class = "factor")), row.names = c(NA, 
-24L), class = "data.frame")

我知道此链接...

https://docs.aws.amazon.com/athena/latest/ug/managed-policies.html

但不确定如何将其与当前政策合并。

3 个答案:

答案 0 :(得分:1)

  

雅典娜不支持限制或允许访问Amazon S3   基于aws:SourceIp条件键的资源。

每个AWS Athena文档在这里: https://docs.aws.amazon.com/athena/latest/ug/s3-permissions.html

答案 1 :(得分:0)

您有一个存储桶策略,该策略的作用域范围为该存储桶,并且适用于试图对该存储桶进行操作的任何用户或角色。您引用的链接是关于用户和角色策略的,仅适用于特定用户。当用户或角色在存储桶上进行操作时,其策略与存储桶策略的组合将决定允许他们执行的操作。

用户或角色策略与存储桶策略的组合不是联合,而是更像是交叉点。我的意思是,如果用户或角色策略未授予“ s3:GetObject”,则存储桶策略授予该操作并不重要。用户或角色策略都必须授予它。考虑到委托人的情况实际上甚至更加复杂-但是您的存储桶策略适用于每个人,因此情况并非如此。

您说您的政策有效,但不允许来自雅典娜的查询。的确如此,因为这是存储桶策略,因此它不授予任何用户或角色任何东西,它只是指定允许用户或角色执行的操作(如果允许他们访问存储桶)。此外,您的政策只是否认。明确拒绝并不意味着允许其他所有内容,仅意味着即使其他内容允许您的策略中提到的内容,您的策略也会推翻该规则(在这种情况下:即使用户或角色策略允许s3:GetObject如果源IP与所提到的其中一个匹配,则会拒绝该操作-我想这是您的意图。

您用于运行Athena查询的用户或角色必须具有以下权限:

  1. 在雅典娜中运行查询,
  2. 访问Glue中的目录对象(即数据库和表)
  3. 访问可存储查询结果的S3存储桶,并且
  4. 访问S3存储桶和运行查询需要读取的对象。

您链接到的托管策略将帮助1-3,但您必须编写4。执行查询时,IAM将评估1-4以及存储桶策略,以查看是否允许用户或角色运行查询。

答案 2 :(得分:0)

是正确的。您的存储桶策略说:如果传入请求不是来自这些IP地址之一,则不要让任何人对此S3存储桶做任何事情。

因此,即使允许允许访问存储桶的某人正在运行Athena查询,上述策略也会阻止它们,因为Athena不会进入这些IP地址之一。

为避免这种情况,您应该找到允许人们访问的任何策略,并将IP地址限制置于那些策略上,以便他们说出“允许这些人访问存储桶,但仅如果它们来自这些IP地址之一”。这样,它纯粹是Allow策略,而不是AllowDeny

然后,Allow对正在运行Athena查询的用户进行存储桶访问,但不按IP地址限制它们(因为Athena请求不会来自您的IP地址范围)。

相关问题