本實驗旨在通過 AWS 管理控制臺為 Amazon S3 存儲桶中的對象配置訪問控制列表(ACL),驗證不同用戶或服務對 S3 存儲桶對象的訪問權限。實驗將模擬多角色場景(如所有者、匿名用戶、其他 AWS 賬戶),測試對象級別的讀寫權限是否按 ACL 策略生效,幫助理解 S3 對象 ACL 的精細化權限管理機制。
Amazon S3 的 ACL(Access Control List)是一種基于對象的權限控制方式,允許用戶為單個對象定義讀(READ)和寫(WRITE)權限。
ACL 可授權給以下兩類主體:
預定義組:如所有用戶(http://acs.amazonaws.com/groups/global/AllUsers,即匿名公開訪問)。
AWS 賬戶:通過 Canonical ID 或 ARN 指定其他賬戶的用戶或角色。
ACL 與存儲桶策略(Bucket Policy)的區別:
作用范圍:ACL 僅控制單個對象的權限,而存儲桶策略可管理整個存儲桶或前綴路徑的權限。
權限粒度:ACL 僅支持基礎讀寫權限,存儲桶策略支持更復雜的條件(如 IP 限制、時間窗口)。
優先級:當對象 ACL 與存儲桶策略沖突時,拒絕(Deny)規則優先,其次為顯式允許(Allow)。
步驟一:準備實驗環境
登錄 AWS 控制臺,導航至 S3 服務,創建一個新存儲桶(如 acl-experiment-bucket-2024),保持默認配置。
上傳一個測試對象(如 test.txt 文件)至存儲桶。
步驟二:配置對象 ACL
在存儲桶中找到 test.txt,點擊右側權限選項卡,選擇訪問控制列表。
添加新權限:
場景 1:允許匿名用戶讀取對象
在 Grantee 輸入 http://acs.amazonaws.com/groups/global/AllUsers,勾選 Read 權限。
場景 2:授權另一個 AWS 賬戶寫入對象
輸入目標賬戶的 Canonical ID(可在目標賬戶的 IAM 控制臺獲?。?,勾選 Write 權限。
保存 ACL 配置。
步驟三:對比存儲桶策略(可選)
若需測試優先級,可在存儲桶的 權限 > 存儲桶策略 中添加一條拒絕匿名讀寫的策略(示例如下):
json
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Principal": "*",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::acl-experiment-bucket-2024/test.txt"
}]
}
1. 測試匿名讀取權限
在瀏覽器中直接訪問 test.txt 的公開 URL
例如:https://acl-experiment-bucket-2024.s3.amazonaws.com/test.txt
預期結果:
若僅 ACL 允許匿名讀且無存儲桶策略拒絕,頁面應顯示文件內容。
若存儲桶策略顯式拒絕匿名訪問,則返回 403 Forbidden。
2. 測試跨賬戶寫入權限
使用被授權的 AWS 賬戶,通過 AWS CLI 或控制臺嘗試上傳文件至 acl-experiment-bucket-2024/test.txt。
預期結果:
若 ACL 授予寫入權限且無存儲桶策略阻止,上傳成功。
若存儲桶策略拒絕跨賬戶寫入,則操作失敗。
3. 檢查 ACL 記錄
返回對象的 訪問控制列表 頁面,確認權限列表與配置一致,驗證主體和權限類型是否正確。
通過本實驗,可直觀理解 S3 對象 ACL 的權限分配邏輯,并掌握如何結合存儲桶策略實現多層級訪問控制,滿足企業級數據安全需求。