我不想公开访问我的S3存储桶。但是我希望它可以从本地组织网络访问而无需AWS CLI或任何凭证。我该如何实现?
我尝试使用主体为*且源IP为组织网络的公共IP的存储桶策略。
答案 0 :(得分:1)
是的,那是正确的方法。
来自Bucket Policy Examples - Amazon Simple Storage Service:
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"IpAddress": {"aws:SourceIp": "54.240.143.0/24"}
}
}
]
}
答案 1 :(得分:0)
如果打算授予对特定CIDR范围的匿名访问权限,同时还允许IAM策略向特定人员(例如管理员)授予其他访问权限,那么这将是不合适的。 >
如果您要遵循AWS documentation提出的初始示例-您将得到一个看起来可能与此类似的政策。
{
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "x.x.x.x/xx"
}
}
}
]
}
在桌子上敲了几次头后,您会发现此政策无效。 S3存储桶似乎没有隐含的拒绝规则(类似于如何设置IAM访问策略)。
默认情况下,除非已通过策略授予默认帐户访问权限,否则它们将无法访问S3。 但是,S3默认情况下被设计为允许任何IP地址访问。因此,要阻止IP,您必须在策略中明确指定拒绝,而不是允许。
一旦您了解了这一点,该政策就很容易调整。您只需将策略从允许仅从我的IP地址访问变为拒绝从任何不是我的IP地址访问。
{
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPDeny",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "xxx.x.x/xx"
}
}
}
] }
希望这会有所帮助!