我試圖使用儲存貯體政策或物件存取控制清單 (ACL) 授予對 Amazon Simple Storage Service (Amazon S3) 儲存貯體中物件的公開讀取存取權。但出現權限不足或存取遭拒的錯誤。
簡短說明
假設您使用下列儲存貯體政策來授予對儲存貯體中物件的公開讀取存取權:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::example-bucket/*"
]
}
]
}
您可能會遇到權限不足或存取遭拒錯誤,原因如下:
- 您沒有 s3:PutBucketPolicy 權限,無法更新或建立 Amazon S3 儲存貯體政策。
- 您沒有 s3:PutObjectAcl 權限,無法修改物件的 ACL。
- S3 儲存貯體政策或物件的 ACL 與您的 S3 封鎖公開存取設定衝突。
解決方法
授予所需權限
確定您使用的 AWS Identity and Access Management (IAM) 使用者或角色具有下列權限:
- s3:PutBucketPolicy,可以為 S3 儲存貯體建立或更新儲存貯體政策
- s3:PutObjectAcl,可以更新物件的 ACL,以授予公開讀取存取權
更新封鎖公開存取設定
依預設,所有 Amazon S3 資源 (例如儲存貯體、物件和相關子資源) 都是私有,不允許公開存取。存取點、儲存貯體和帳戶的封鎖公開存取設定可協助您管理對 Amazon S3 資源的公開存取。這些設定覆寫 S3 儲存貯體政策和物件 ACL,以便您可以限制對這些資源的公開存取權。當您設定的儲存貯體政策或物件 ACL 與「封鎖公開存取」設定衝突時,便無法建立儲存貯體政策來授予公開讀取存取權。S3 也會拒絕修改儲存貯體政策或物件 ACL 的權限,以限制授予公開讀取存取權。
Amazon S3 封鎖公開存取提供四種設定,以封鎖對儲存貯體和物件的公開存取。這些設定是獨立的,可以任意組合使用。
- BlockPublicAcls - 封鎖使用新 ACL 授予的公開存取: Amazon S3 封鎖您套用至新增儲存貯體或物件的公開存取權限。S3 也拒絕為現有儲存貯體和物件建立新的公開存取 ACL。此設定不會變更允許公開存取使用 ACL 之 S3 資源的任何現有權限。
- **略過公有 ACL - 封鎖使用任何 ACL 授予的公開存取:**Amazon S3 會忽略授予儲存貯體和物件公開存取權的所有 ACL。
- **封鎖公有政策 - 封鎖使用新的公有儲存貯體或存取點政策授予的公開存取:**Amazon S3 封鎖使用新儲存貯體和存取點政策,無法授予對儲存貯體和物件的公開存取權限。此設定不會變更任何允許公開存取 S3 資源的現有政策。
- **限制公有儲存貯體 - 封鎖使用任何公有儲存貯體或存取點政策授予的公開跨帳戶存取權:**Amazon S3 會忽略使用授予對儲存貯體和物件的公有存取權的政策,對儲存貯體或存取點的公開跨帳戶存取權。
如需詳細資訊,請參閱 Amazon S3 封鎖公開存取 - 為您的帳戶和儲存貯體提供另一層保護。
請務必根據您的使用案例更新 S3 封鎖公開存取設定。
注意:
- 如果您正在使用 ACL 授予對物件的公開讀取存取權,請關閉下列「封鎖公開存取」設定:
- 如果您使用 S3 儲存貯體政策授予對物件的公開讀取存取權,請關閉下列封鎖公開存取設定:
- 您無法使用儲存貯體 ACL 或物件 ACL,對於將 S3 物件擁有權設定為強制執行的儲存貯體擁有者的儲存貯體授予公開讀取存取權。在這種情況下,您必須使用政策授予對儲存貯體和儲存貯體中物件的存取權。設定或更新 ACL 的請求失敗,您會收到存取控制清單不受支援的錯誤訊息。讀取 ACL 的請求仍受支援。
如果您為帳戶中的所有 S3 儲存貯體開啟了「封鎖公開存取」設定,則會看到儲存貯體和物件未公開訊息。如需詳細資訊,請參閱為您的帳戶設定封鎖公開存取設定。
**重要事項:**當您授予對物件的公開讀取存取權時,網際網路上的任何人都可以存取這些物件。如果您不希望如此,請確保您的 S3 儲存貯體無法公開存取。如需詳細資訊,請參閱 Amazon S3 安全最佳實務。
相關資訊
如何授予對 Amazon S3 儲存貯體中部分物件的公開讀取存取權?