既然S3是存放資料的空間,那一定少不了資料的權限管理啦。設定S3權限的方式主要有以下幾種:
針對bucket和底下的object,選取要依照哪種方式設定權限。
直接在AWS IAM寫policy設定指定的User或Role存取S3 Bucket的相關權限。
在bucket底下寫policy指定有哪些AWS的user和role可以存取bucket。
Principal放允許存取bucket的AWS user和role,Action則是權限的範圍,像是Put、list和Get等…,Resource則是要設定權限的bucket。
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [{
"Sid": "DenyObjectsThatAreNotSSEKMS",
"Principal": "*",
"Effect": "Deny",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "true"
}
}
}]
}
有的時候如果都在Bucket底下寫policy,會隨著用這個bucket的應用程式越來越多,讓policy變得複雜不好管理,這時就可以使用access point讓不同應用程式有不同policy。而且在新增access point的時候,Network也可以選擇使用VPC,這樣用VPC去控制,哪個網路區域的resource才能存取這個bucket。
ACL是一個比較直覺地控制權限的方式,提供一個選單讓你選擇是否要讓其他AWS帳戶、一般的end user或bucket的owner,有讀寫的權限。ACL的設定方式很簡單易懂,但限制也比較多,無法針對特定User或特定網路區域的resource去管控權限。