【问题标题】:S3 bucket policy is not allowing Athena to perform query executionS3 存储桶策略不允许 Athena 执行查询
【发布时间】:2019-10-06 22:59:03
【问题描述】:

我正在对 S3 存储桶执行 Amazon Athena 查询。我们称之为athena-bucket。今天,我需要通过 VPC 端点限制此存储桶。所以我尝试了这个 S3 存储桶策略:

{
   "Version": "2012-10-17",
   "Statement": [

       {
           "Sid": "VPCe and SourceIP",
           "Effect": "Deny",
           "NotPrincipal": {
               "AWS": [
                   "arn:aws:iam::**********:user/user_admin",
                   "arn:aws:iam::**********:root",

               ]
           },
           "Action": "s3:*",
           "Resource": [
               "arn:aws:s3:::athena-bucket",
               "arn:aws:s3:::athena-bucket/abc/*"
           ],
           "Condition": {
               "StringNotEquals": {
                   "aws:sourceVpce": [
                       "vpce-XXXXxxxxe",
                       "vpce-xxxxxxxxxx",
                       "vpce-XXXXXXXXXXXXXX"
                   ]
               },
               "NotIpAddress": {
                   "aws:SourceIp": [
                       "publicip/32",
                       "publicip2/32"

                   ]
               }
           }
       }
   ]
}

请注意,Athena 拥有访问上述存储桶的完全权限。我想使用 S3 存储桶策略来限制仅来自特定 IP 地址和 VPC 端点的访问。

但是,尽管请求是通过策略中提到的 VPC 端点路由的,但我收到了 access denied error

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-athena


    【解决方案1】:

    实际上有一个解决方案可以满足您的要求。以下策略条件允许来自您的所有 VPC 终端节点 Athena 的操作:

    {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Sid": "VPCe and SourceIP",
               "Effect": "Deny",
               "NotPrincipal": {
                   "AWS": [
                       "arn:aws:iam::**********:user/user_admin",
                       "arn:aws:iam::**********:root",
                   ]
               },
               "Action": "s3:*",
               "Resource": [
               "arn:aws:s3:::athena-bucket",
               "arn:aws:s3:::athena-bucket/abc/*"
               ],
               "Condition": {
                   "ForAllValues:StringNotEquals": {
                       "aws:sourceVpce": [
                           "vpce-XXXXxxxxe",
                           "vpce-xxxxxxxxxx",
                           "vpce-XXXXXXXXXXXXXX"
                       ],
                       "aws:CalledVia": [ "athena.amazonaws.com" ]
                   }
               }
           }
       ]
    }
    

    条件的“ForAllValues”部分将这个 AND 条件转换为 OR。

    不确定您的 IP 限制将如何处理此问题,因为您无法判断 Athena 来自哪些 IP。

    【讨论】:

      【解决方案2】:

      Amazon Athena 是一项基于 Internet 的服务。它直接访问 Amazon S3,并且通过 Amazon VPC 连接。

      如果您将存储桶限制为只能通过 VPC 终端节点访问,Amazon Athena 将无法访问它。

      【讨论】:

      • 嗨,John,感谢您的回复,但我想限制 s3 对 vpce 的访问,同时 athena 应该能够访问 S3。有可能吗?
      • 不,这是不可能的,因为 Amazon Athena 无法通过 VPC 终端节点访问。
      • 还有其他可能的解决方案吗?我想拒绝所有的 vpce 和 ip,除了一些之外,还允许 Athena 使用存储桶策略!再次感谢。
      • Deny 策略始终覆盖 Allow 策略。因此,一种选择是使用Deny 策略,而是将您的限制添加到任何授予对存储桶的访问权限的Allow 策略中。然后,还 Allow Athena 访问存储桶。这是可能的,因为没有覆盖 Athena AllowDeny 策略。请记住 - 默认情况下拒绝访问,因此您应该小心任何授予对存储桶访问权限的策略。
      猜你喜欢
      • 2019-08-26
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 2018-05-21
      • 2013-10-25
      相关资源
      最近更新 更多