我想管理對 Amazon Simple Storage Service (Amazon S3) 資源的存取權。為此,我想使用 S3 封鎖公開存取。
解決方法
您可以設定 Amazon S3 封鎖公開存取,以實現不同層級的存取權。
新增必要權限
若要更改 S3 封鎖公開存取設定,請確保您的 AWS Identity and Access Management (IAM) 使用者或角色具有以下權限:
- s3:PutAccountPublicAccessBlock
- s3:PutBucketPublicAccessBlock
若要查看您目前的 S3 封鎖公開存取設定,請確保您的 IAM 使用者或角色具有以下權限:
- s3:GetAccountPublicAccessBlock
- s3:GetBucketPublicAccessBlock
如需詳細資訊,請參閱權限。
啟用或停用 S3 封鎖公開存取
**注意:**自 2023 年 4 月起,Amazon S3 會自動為您建立的所有儲存貯體啟用 S3 封鎖公開存取。
您可以在帳戶層級、儲存貯體層級或同時在兩個層級上,設定 S3 封鎖公開存取設定。
啟用 S3 封鎖公開存取
啟用 S3 封鎖公開存取後,Amazon S3 會執行以下動作:
- 拒絕匿名和未經驗證的請求,沒有例外。使用 Web 瀏覽器或 curl 存取的 Amazon S3 URI 和網址會收到 "HTTP 403 Access Denied" 錯誤。
- 忽略您套用於 Amazon S3 物件的新公用 ACL,並撤銷使用者對 S3 儲存貯體和物件的存取權。
停用 S3 封鎖公開存取
如果您停用 S3 封鎖公開存取,Amazon S3 會允許使用公開儲存貯體政策或公開 ACL 存取物件。您可能會因 Amazon S3 請求 (例如 LIST 或 GET) 而產生費用。如果有人對公開儲存貯體或物件發出匿名請求,AWS 會向您收取費用。AWS Config 規則和 IAM Access Analyzer for S3 會產生有關儲存貯體公開狀態的警告。
停用 S3 封鎖公開存取後,您的 Amazon S3 主控台會在外部存取摘要面板上顯示存取設定。
對 "Access Denied" 與 S3 儲存貯體錯誤進行疑難排解
當您嘗試在 S3 儲存貯體上啟用或停用 S3 封鎖公開存取時,您可能會收到 "Access Denied" 錯誤。
若要對此問題進行疑難排解,請執行下列動作:
- 確認 AWS Organizations 服務控制政策 (SCP) 未禁止在帳戶或儲存貯體層級修改 S3 封鎖公開存取。檢查 s3:PutBucketPublicAccessBlock 和 s3:PutAccountPublicAccessBlock 動作的 Deny 陳述式。
- 如果您的儲存貯體在 Access (存取) 欄顯示 Error (錯誤),請將以下權限新增至您的 IAM 政策,以列出儲存貯體和公開存取設定:
s3:GetAccountPublicAccessBlock
s3:GetBucketPublicAccessBlock
s3:GetBucketPolicyStatus
s3:GetBucketLocation
s3:GetBucketAcl
s3:ListAccessPoints
s3:ListAllMyBuckets
識別修改 S3 封鎖公開存取的 IAM 使用者或角色
查看您的 AWS CloudTrail 事件歷史記錄,找出以下 EventNames: 的事件:
- 對於帳戶層級,請檢查 PutAccountPublicAccessBlock。
- 對於儲存貯體層級,請檢查 PutBucketPublicAccessBlock。
若要找出呼叫者的 Amazon Resource Name (ARN),請檢查日誌中的 UserIdentity 欄位。日誌範例:
"userIdentity": {
"type": "AssumedRole",
"principalId": "[AccountID]:[RoleName]",
"arn": "arn:aws:sts::[AccountID]:assumed-role/[RoleName]/[RoleSession]",
接著,檢查 bucketName 以找出已修改的 S3 儲存貯體。日誌範例:
"requestParameters": {
"publicAccessBlock": "",
"bucketName": "[BucketName]"