我目前有一个名为mets-logos的存储桶。它目前有这个存储桶策略,允许任何人使用GetObjects。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mets-logos/*"
}
]
}
我希望只允许来自IP白名单的GetObjects。这是我尝试过的,但它不起作用(在IP之外仍然可以得到对象)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mets-logos/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"100.77.17.80/32",
"100.77.26.210/32",
]
}
}
}
]
}
附带问题:如果我的存储桶策略正确,我是否需要等待AWS反映此更改,还是应立即反映?
答案 0 :(得分:1)
尝试添加拒绝以及异常,如下所示:
{
"Version":"2012-10-17",
"Id":"S3PolicyId1",
"Statement":
[
{
"Sid" : "IPAllow",
"Effect" : "Deny",
"Principal": "*",
"Action" : "s3:GetObject",
"Resource" : "arn:aws:s3:::mets-logos/*",
"Condition": {
"IpAddress" : {
"aws:SourceIp": "0.0.0.0/0"
},
"NotIpAddress": {
"aws:SourceIp": "100.77.17.80/32"
},
"NotIpAddress": {
"aws:SourceIp": "100.77.26.210/32"
}
}
}
]
}
这明确拒绝访问所有IP地址,但允许您列入白名单的两个地址执行GetObject
。
如果您在IAM凭据下访问S3但又希望在存储桶级别进一步控制访问,我可以看到这将如何有用。此策略中的Deny
将覆盖现有的IAM用户策略。
要回答您的问题,政策更改会立即生效。
答案 1 :(得分:0)
对S3存储桶的访问受S3存储桶策略和连接到访问存储桶的主体的IAM访问策略的控制。
因此,IAM访问策略可能会覆盖"否则" S3存储桶策略。
你的S3存储桶策略说"如果IP是这样的那么就允许获取"。但是政策政策中没有任何内容可以说“不允许其他任何人”#34;
如果您的访问存储区的IAM用户/角色允许您的存储区s3:GetObject
(或*
),则该策略允许他们访问存储桶。
如果IAM用户/角色没有明确的"允许" for" s3:GetObject" (或" s3:*"),那么你的政策就可以了。
为了防止允许访问存储桶的用户/角色限制为IP地址,您需要将策略更改为"拒绝"任何人都不在允许的IP地址。一个明确的拒绝"在桶中政策将否决任何"允许"在IAM用户/角色的政策中。
尝试此政策。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAllButFromAllowedIp",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mets-logos/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"100.77.17.80/32",
"100.77.26.210/32",
]
}
}
}
]
}