我想允许对我的S3存储桶进行公共读取访问,但2个文件夹除外。
在2个文件夹中,我想仅允许访问来自特定网络的访问者。
有没有办法定义这个?
答案 0 :(得分:3)
有几种不同的方式可以授予对存储在Amazon S3中的数据的访问权限:
您的用例适合Bucket Policies。
您可以使用以下政策授予对整个Amazon S3广告资源的访问权限:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}
您可以根据一系列IP地址授予访问权限,如下所示:
{
"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"},
"NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"}
}
}
]
}
您的情况,您希望"允许对我的S3存储桶进行公共读取访问,除了2个文件夹"稍微困难一点,因为它是"除了"用例。
选项1:特定文件夹
例如:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource":["arn:aws:s3:::examplebucket/folder1/*",
"arn:aws:s3:::examplebucket/folder2/*"]
},
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": ["arn:aws:s3:::examplebucket/folder3/*",
"arn:aws:s3:::examplebucket/folder4/*"],
"Condition": {
"IpAddress": {"aws:SourceIp": "54.240.143.0/24"}
}
]
}
但是,这需要您专门列出每个文件夹。
选项2:除......以外的所有内容
在此规则中,您授予公共访问权限,但如果它们不是来自正确的IP范围,则拒绝某些文件夹:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource":["arn:aws:s3:::examplebucket/*"]
},
{
"Sid": "IPAllow",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": ["arn:aws:s3:::examplebucket/folder3/*",
"arn:aws:s3:::examplebucket/folder4/*"],
"Condition": {
"NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"}
}
]
}
请注意Deny
与NotIpAddress
的使用,如果请求不是来自定义的IP地址范围,则表示拒绝访问。
但是,DENY
会覆盖ALLOW
,因此这也意味着除非您来自该IP地址范围,否则您将无法访问受限制的存储桶 - 即使您的IAM用户已经过明确授予ALLOW
权限。例如,如果您是具有S3中所有权限的管理员,则如果您来自给定的IP范围,仍将拒绝访问受限文件夹。因此,它可能对您来说限制太多,因为它会影响所有使用,即使通过控制台/ API访问也是如此。