允许Athena查询S3存储桶

问题描述 投票:0回答:2

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

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::13cols/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "18.72.1.2/32",
                        "11.119.2.8/32",
                        "12.939.49.346/32",
                        "4.26.2.219/32"
                    ]
                }
            }
        }
    ]
}

我知道这个链接......

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

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

amazon-s3 amazon-athena
2个回答
0
投票

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

用户或角色策略与存储桶策略的组合不是联合,而是更像交集。我的意思是,如果用户或角色策略没有授予说s3:GetObject,则存储桶策略授予该操作无关紧要。用户或角色策略以及存储桶策略都必须授予它。当你考虑到校长时,实际上会更加复杂 - 但你的桶政策适用于所有人,所以情况并非如此。

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

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

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

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


0
投票

那是正确的。您的存储桶策略说:如果传入请求不是来自其中一个IP地址,那么不要让任何人对此S3存储桶执行任何操作。

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

为避免这种情况,您应该找到授予人们访问权限的任何策略,并对这些策略设置IP地址限制,以便他们说“允许这些人访问存储桶,但前提是他们来自其中一个IP地址”。这样,它纯粹是一个Allow政策,而不是AllowDeny

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

© www.soinside.com 2019 - 2024. All rights reserved.