S3的访问控制有几种:html
对用户的访问控制web
对桶的访问控制ide
今天研究了一下对桶的访问控制。ui
我新建了一个桶,下面有好多的folder,须要针对某一folder设置外部匿名访问权限的开放。spa
若是你在控制台点击这个folder,对其设置“make public”的权限设置(图一),3d
他会询问你是否将该folder以及其下包含的文件(它会统计个数)所有设置为对全部人可读(图二)。code
那你确定会选择是啦,可是,这只针对当前存在于此folder中的文件所言。htm
问题来了,若是咱们以后还会不断在这个folder下添加文件,而且新的添加进去的文件都要能够对外可读,该肿么办呢?blog
我要设置整个桶都对外可读吗?这样作的风险未免有些大。接口
一说是,在上传文件的时候,有接口能够实现该被上传的文件设置为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替换回来便可啦。(~ ̄▽ ̄)~