拒绝除特定范围之外的所有 IP 访问 AWS S3
Posted
技术标签:
【中文标题】拒绝除特定范围之外的所有 IP 访问 AWS S3【英文标题】:Deny access to AWS S3 to all IPs except specific ranges 【发布时间】:2019-02-08 15:47:47 【问题描述】:我有一个 S3 存储桶(“myBucket”),只有用户可以访问,我们称之为“s3user”。我为此用户附加了一个 IAM 策略,如下所示:
"Version": "2012-10-17",
"Statement": [
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::myBucket"
,
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:GetObjectVersion"
],
"Resource": "*"
]
我将此 IAM 策略附加到用户“s3User”,授予对“myBucket”的只读访问权限。到目前为止一切顺利。
现在,我添加了第二个策略,但现在不是 IAM 策略而是 S3 存储桶策略,如下所示:
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
"Sid": "IPAllow",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::myBucket/*",
"Condition":
"NotIpAddress":
"aws:SourceIp": [
"1.2.3.4/27",
"2.3.4.1/28",
"5.6.7.8/29"
]
]
我预计此显式拒绝将拒绝所有不来自指定源 IP 范围的请求。但是,它仍然让我列出来自其他 IP 的存储桶的内容。似乎桶策略根本没有效果。
根据this AWS S3 article,当您有多个策略时,它们都会被应用并且显式拒绝优先于显式允许,所以我认为这应该有效,但事实并非如此。
知道为什么我不能根据源 IP 地址拒绝对存储桶的请求吗?
谢谢!
【问题讨论】:
“让我从其他 IP 访问存储桶”是什么意思?具体是哪些命令?Deny
策略指的是 mybucket/*
,可能不适用于单独的 mybucket
,因此仍可能允许 ListBucket
。
我的意思是我仍然可以列出存储桶的内容(编辑问题以澄清这一点)
【参考方案1】:
您应该更新您的 Deny
政策,以包括在存储桶本身而不是其内容 (/*
) 上执行的操作:
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
"Sid": "DenyOutsideIPfromBucket",
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:GetObjectVersion"
],
"Resource": ["arn:aws:s3:::myBucket/*", "arn:aws:s3:::myBucket"],
"Condition":
"NotIpAddress":
"aws:SourceIp": [
"1.2.3.4/27",
"2.3.4.1/28",
"5.6.7.8/29"
]
]
当然,如果唯一有权访问存储桶的用户是具有 IAM 策略的用户,您可以简单地在原始 IAM 策略上添加一个IpAddress
条件,这样他们就只能使用给定集合中的存储桶IP 地址。这将避免需要 Deny
策略。
【讨论】:
谢谢,周一会检查这是否有效并通知您。 更新:成功了。我编辑了您的答案,在同一个声明中声明了两个资源(存储桶及其内容),以避免重复 IP 地址。 你好@John,我们也有类似的要求。用户需要对 S3 存储桶的只读访问权限,并且我们已将以下 IAM 策略应用于用户,正如您建议的那样,我们没有应用任何存储桶策略,因为这是唯一具有特定 IP 地址的用户。还是不行。请建议 "Version": "2012-10-17", "Statement": [ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::marketplace-logs", "arn:aws:s3:::marketplace-logs/*", ], "Condition": "IpAddress": "aws:SourceIp": "13.xxx.xxx.xxx/32" ]
@nitin194 请创建一个新问题,而不是通过对旧问题的评论提出问题。以上是关于拒绝除特定范围之外的所有 IP 访问 AWS S3的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS 上拒绝除 cloudwatch 之外的所有出站流量