# 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 時無法設定 | 可以 |