我正在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"
]
}
}
}
]
}
请注意,雅典娜拥有访问上述存储桶的完全权限。我想使用S3存储桶策略来限制仅来自某些IP地址和VPC端点的访问。
但是,尽管请求是通过策略中提到的VPC端点进行路由的,但我仍然收到access denied error
。
答案 0 :(得分:1)
Amazon Athena是一项基于Internet的服务。它直接访问Amazon S3 ,并且不通过Amazon VPC连接。
如果您限制存储桶只能通过 VPC端点访问,则Amazon Athena将无法访问它。
答案 1 :(得分:0)
实际上,您可以找到一种解决方案来满足您的要求。以下策略条件允许来自您所有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,因此不确定如何使用IP限制。