我有这个存储桶策略,它可以正常工作。唯一的问题是它不允许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
但不确定如何将其与当前政策合并。
您有一个存储桶策略,其范围限定为存储桶,并适用于尝试对该存储桶执行操作的任何用户或角色。您引用的链接是关于用户和角色策略,仅适用于特定用户。当用户或角色在存储桶上进行操作时,其策略和存储桶策略的组合决定了它们允许执行的操作。
用户或角色策略与存储桶策略的组合不是联合,而是更像交集。我的意思是,如果用户或角色策略没有授予说s3:GetObject
,则存储桶策略授予该操作无关紧要。用户或角色策略以及存储桶策略都必须授予它。当你考虑到校长时,实际上会更加复杂 - 但你的桶政策适用于所有人,所以情况并非如此。
您说您的政策有效,但不允许来自Athena的查询。这是事实,因为它是一个存储桶策略,它不会授予任何用户或角色任何东西,它只是指定允许用户或角色做什么,否则允许他们访问存储桶。此外,您的政策只是否认事情。明确否认并不意味着允许其他所有内容,只是意味着即使其他内容允许您的策略中提到的内容,您的策略也会否决(在这种情况下:即使用户或角色策略允许s3:GetObject
您的策略也会拒绝该操作如果源IP与上述其中一个匹配 - 这是你的意图,我推测)。
用于运行Athena查询的用户或角色必须具有权限
您链接到的托管策略将有助于1-3,但您必须编写4.执行查询时,IAM将评估1-4加上存储桶策略,以查看是否允许用户或角色运行查询。
那是正确的。您的存储桶策略说:如果传入请求不是来自其中一个IP地址,那么不要让任何人对此S3存储桶执行任何操作。
因此,即使允许访问存储桶的某个人运行Athena查询,上述策略也会阻止它们,因为Athena不会进入其中一个IP地址。
为避免这种情况,您应该找到授予人们访问权限的任何策略,并对这些策略设置IP地址限制,以便他们说“允许这些人访问存储桶,但前提是他们来自其中一个IP地址”。这样,它纯粹是一个Allow
政策,而不是Allow
和Deny
。
然后,Allow
桶访问正在运行Athena查询的用户,但不要通过IP地址限制它们(因为Athena请求不会来自您的IP地址范围)。