S3 存储桶策略不允许 Athena 执行查询

S3 bucket policy is not allowing Athena to perform query execution

我正在 S3 存储桶上执行 Amazon Athena 查询。我们称它为 athena-bucket。今天,我收到了一项要求,要求通过 VPC Enpoints 限制此存储桶。所以我尝试了这个 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 Athena 是一项 Internet-based 服务。它直接访问 Amazon S3并且通过 Amazon VPC 连接。

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

实际上有一个解决方案可以让你得到你所要求的。以下策略条件允许来自所有 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。