【发布时间】:2018-08-29 07:52:18
【问题描述】:
我不想让我的 S3 存储桶公开访问。但我希望无需 AWS CLI 或任何凭证即可从我的本地组织网络访问它。我怎样才能实现它?。
我尝试了将主体作为 * 并将源 IP 作为组织网络的公共 IP 的存储桶策略。
【问题讨论】:
标签: amazon-web-services amazon-s3
我不想让我的 S3 存储桶公开访问。但我希望无需 AWS CLI 或任何凭证即可从我的本地组织网络访问它。我怎样才能实现它?。
我尝试了将主体作为 * 并将源 IP 作为组织网络的公共 IP 的存储桶策略。
【问题讨论】:
标签: amazon-web-services amazon-s3
是的,这是正确的做法。
来自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"}
}
}
]
}
【讨论】:
GetObject 的权限。如果没有其他存储桶策略,并且对象具有私有 ACL,则内容将保持私有。
Deny 将从存储桶中阻止它们。如果这是意图,那很好。但是,如果目的是授予对特定 CIDR 范围的匿名访问权限,同时还允许 IAM 策略向特定人员(例如管理员)授予额外访问权限,则不合适。
如果打算授予对特定 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"
}
}
}
] }
希望这会有所帮助!
【讨论】: