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