S3的访问控制有几种:
对用户的访问控制
对桶的访问控制
今天研究了一下对桶的访问控制。
我新建了一个桶,下面有好多的folder,需要针对某一folder设置外部匿名访问权限的开放。
如果你在控制台点击这个folder,对其设置“make public”的权限设置(图一),
他会询问你是否将该folder以及其下包含的文件(它会统计个数)全部设置为对所有人可读(图二)。
那你肯定会选择是啦,但是,这只针对当前存在于此folder中的文件所言。
问题来了,如果我们之后还会不断在这个folder下添加文件,并且新的添加进去的文件都要可以对外可读,该肿么办呢?
我要设置整个桶都对外可读吗?这样做的风险未免有些大。
一说是,在上传文件的时候,有接口可以实现该被上传的文件设置为public权限。
1 _s3Client.MakeObjectPublic(bucketName,objectKey,true); 2 _s3Client.MakeObjectPublicAsync(bucketName,objectKey,true);
此种需要在代码层实现,应用起来多有不便。灵活性又不够。当然也有他固有的优点。
另一种是,在整个bucket的permission中设置对everyone可读。嗯,不知道为什么我设置了,但是不起作用。┓( ´∀` )┏
还有一种方法比较简单,就是做一个针对此folder的策略。
在控制台点开permission-->bucket policy,复制黏贴进这段代码即可。
1 { 2 "Version": "2012-10-17", 3 "Statement": [ 4 { 5 "Sid": "AddPerm", 6 "Effect": "Allow", 7 "Principal": "*", 8 "Action": "s3:GetObject", 9 "Resource": "arn:aws-cn:s3:::bucketname/foldername/*" 10 } 11 ] 12 }
你问我,这策略怎么写啊?我想做些别的设置怎么办呢?
其实AWS自带了policygen,可以用来生成。https://awspolicygen.s3.amazonaws.com/policygen.html
A Policy is a container for permissions. The different types of policies you can create are an IAM Policy, an S3 Bucket Policy, an SNS Topic Policy, a VPC Endpoint Policy, and an SQS Queue Policy.
这是一个很好用的AWS自己的生成器,支持好多种AWS的policy,只是好像不支持中国地区。。,因此在resource中替换你原来bucket的region黏贴入Amazon Resource Name (ARN)
1 arn:aws-cn:s3:::bucketname/foldername/* 2 3 -->替换region 4 5 arn:aws:s3:::bucketname/foldername/*
生成后再把region替换回来即可啦。(~ ̄▽ ̄)~