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替換回來便可啦。(~ ̄▽ ̄)~