# AWS S3 ACL 設定 ###### tags: `AWS 功能` * 存取控制清單(ACL) : 可用來管理儲存桶的權限,**<font color="#880000">主要功能是將基本的讀取 & 寫入權限授予其他 AWS 帳戶</font>**,如果未來需要給予其他AWS帳戶的需求,可以用儲存體政策解決。 結論 : 停用 ACL 沒有影響,目前線上儲存體均使用 **<font color="#880000">"儲存貯體政策 (權限限制僅供讀取)"</font>** 方式。 ## 相關設定 ### 儲存貯體政策 (權限全開未限制) ``` { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::example.strong-cdn.com", "arn:aws:s3:::example.strong-cdn.com/*" ] } ] } ``` ### 儲存貯體政策 (權限限制僅供讀取) * `GetObject` : 一般情況下要使用`Get`須設定使用者有`Read`的權限,如設定匿名使用者則不需要。 * `ListBucket` : 列出儲存桶。 ``` { "Version": "2012-10-17", "Id": "Policy1504690912147", "Statement": [ { "Sid": "Stmt1504690911380", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::example.strong-cdn.com", "arn:aws:s3:::example.strong-cdn.com/*" ] } ] } ``` ### 用儲存貯體政策(Policy)開啟 ACL 設定 * Condition 為 ACL 使用政策方式寫入 ACL 相關設定 (結論:不會用到) : ``` { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::example.strong-cdn.com", "arn:aws:s3:::example.strong-cdn.com/*" ], "Condition": { "StringEquals": { "s3:x-amz-grant-read-acp": [ "uri=http://acs.amazonaws.com/groups/global/AllUsers", "uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers" ], "s3:x-amz-acl": "bucket-owner-full-control" } } } ] } ``` ## 測試 * 皆開啟公開存取權 * 物件擁有權的設定為是否啟用 ACL * 存取控制清單(ACL)權限的設定為是否開啟 `每個人 (公有存取)`、`已驗證的使用者群組 (擁有 AWS 帳戶的任何人)` | 物件擁有權 | 用 Policy 寫入 ACL 設定 | 存取控制清單(ACL)權限 | 是否可以正常連線 | | ----- | ----- | ----- | ----- | | 開啟 | 是 | 開啟讀取權限 | 不可以 | | 開啟 | 是 | 未開啟權限 | 不可以 | | 開啟 | 否 | 開啟讀取權限 | 可以 | | 開啟 | 否 | 未開啟權限 | 可以 | | 關閉 | 是 | 停用 ACL 時無法設定 | 不可以 | | 關閉 | 否 | 停用 ACL 時無法設定 | 可以 |