【发布时间】: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。 -
我的意思是我仍然可以列出存储桶的内容(编辑问题以澄清这一点)
标签: amazon-web-services amazon-s3 acl amazon-iam