設定網站存取許可 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定網站存取許可

當您將儲存貯體作為靜態網站時,如果您希望您的網站是公開的,則可以授予公開讀取權限。為使得儲存貯體能為公眾讀取,您必須停用儲存貯體的封鎖公開存取設定,並編寫授予公開存取權限的儲存貯體政策。如果您的儲存貯體包含不屬於儲存貯體擁有者的物件,可能也需要新增物件存取控制清單 (ACL),以授予所有人這些物件的讀取存取權。

如果您不想停用儲存貯體的封鎖公開存取設定,但仍希望網站公開,您可以建立 Amazon CloudFront 分發來為您的靜態網站提供服務。如需詳細資訊,請參閱 Amazon R oute 53 開發人員指南中的加快您的網站與 Amazon CloudFront或使用 Amazon CloudFront 分發服務靜態網站。

注意

在網站端點上,若使用者請求的物件不存在,Amazon S3 會傳回 HTTP 回應碼 404 (Not Found)。若物件存在,但您未授予其讀取許可,網站端點會傳回 HTTP 回應碼 403 (Access Denied)。使用者可以使用回應碼推斷特定物件是否存。若不希望有此行為,請勿啟用儲存貯體的網站支援。

步驟 1:編輯 S3 封鎖公有存取設定

若要將現有的儲存貯體配置為具有公有存取權的靜態網站,您必須編輯該儲存貯體的封鎖公有存取配置。您可能還必須編輯帳戶層級的「封鎖公開存取」設定。Amazon S3 會套用儲存貯體層級和帳戶層級「封鎖公開存取」設定中限制性最高的組合。

例如,如果允許儲存貯體的公有存取,但封鎖帳戶層級的所有公有存取,則 Amazon S3 會繼續封鎖對該儲存貯體的公有存取。如果是這種情況,您就必須編輯自己的儲存貯體層級和帳戶層級封鎖公有存取設定。如需詳細資訊,請參閱「封鎖對 Amazon S3 儲存體的公開存取權」。

根據預設,Amazon S3 會封鎖對帳戶和儲存貯體的公開存取。如想要使用儲存貯體託管靜態網站,您可使用這些步驟編輯封鎖公有存取設定:

警告

在完成此步驟之前,請檢閱 封鎖對 Amazon S3 儲存體的公開存取權 以確保您了解並接受允許公開存取所涉及的風險。當您關閉封鎖公開存取設定以公開儲存貯體時,網際網路上的任何人都可以存取您的儲存貯體。我們建議您封鎖對儲存貯體的所有公用存取權。

  1. 開啟位於 https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

  2. 選擇已設定為靜態網站的儲存貯體名稱。

  3. 選擇 Permissions (許可)。

  4. Block public access (bucket settings) (封鎖公開存取 (儲存貯體設定)) (封鎖公開存取 (儲存貯體設定)) 下,選擇 Edit (編輯)。

  5. 清除 Block all public access (封鎖所有公開存取),然後選擇 Save changes (儲存變更)。

    警告

    在完成此步驟之前,請檢閱 封鎖對 Amazon S3 儲存體的公開存取權 以確保您了解並接受允許公開存取所涉及的風險。當您關閉封鎖公開存取設定以公開儲存貯體時,網際網路上的任何人都可以存取您的儲存貯體。我們建議您封鎖對儲存貯體的所有公用存取權。

    Amazon S3 會關閉儲存貯體的封鎖公開存取設定。若要建立公開的靜態網站,在新增儲存貯體原則之前,可能還需要針對您的帳戶編輯封鎖公開存取設定。如果帳戶的封鎖公開存取設定目前已開啟,您在 封鎖公開存取 (儲存貯體設定) 下會看到附註。

步驟 2:新增儲存貯體政策

若要讓儲存貯體中的物體能為公眾讀取,您必須編寫儲存貯體政策,授予所有人 s3:GetObject 許可。

編輯 S3 封鎖公用存取設定之後,您可以新增儲存貯體政策,以授予儲存貯體的公用讀取權限。當您授予公有讀取權限時,網際網路上的任何人都可以存取您的儲存貯體。

重要

以下政策僅為範例,允許完整存取您儲存貯體的內容。繼續執行此步驟之前,請檢閱如何保護 Amazon S3 儲存貯體中的檔案?,以確保您瞭解 S3 儲存貯體中檔案保護的最佳實務,以及授予公開存取權所涉及的風險。

  1. Buckets(儲存貯體) 下方,選擇儲存貯體的名稱。

  2. 選擇 Permissions (許可)。

  3. Bucket Policy (儲存貯體政策) 下方,選擇 Edit (編輯)。

  4. 若要授予您網站的公開讀取存取權,請複製以下儲存貯體政策,並將它貼上至 Bucket policy editor (儲存貯體政策編輯器)

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::Bucket-Name/*" ] } ] }
  5. Resource 更新為您的儲存貯體名稱。

    在上述範例儲存貯體政策中,Bucket-Name 是儲存貯體名稱的預留位置。若要使用此儲存貯體策略與您自己的儲存貯體搭配,您必須更新此名稱以符合您的儲存貯體名稱。

  6. 選擇 Save changes (儲存變更)。

    顯示的訊息指出已成功新增儲存貯體原則。

    如果您看到指出 Policy has invalid resource 的錯誤,請確認儲存貯體政策中的儲存貯體名稱與您的儲存貯體名稱相符。如需有關新增儲存貯體原則的資訊,請參閱如何新增 S3 儲存貯體原則?

    如果您收到錯誤訊息且無法儲存貯體原則,請檢查您的帳戶和儲存貯體的封鎖公開存取設定,以確認您允許公開存取儲存貯體。

物件存取控制清單

您可以使用儲存貯體政策,授予您物件的公有讀取許可。但是,儲存貯體政策僅適用於儲存貯體擁有者所擁有的物件。若您的儲存貯體包含不屬於儲存貯體擁有者的物件,建議儲存貯體擁有者使用物件存取控制清單 (ACL) 授予這些物件的公有 READ 許可。

S3 物件擁有權是一項 Amazon S3 儲存貯體層級設定,您可以用來同時控制上傳至儲存貯體之物件的擁有權,以及停用或啟用 ACL。根據預設,物件擁有權設定為「儲存貯體擁有者強制執行」設定,而且所有 ACL 都會停用。停用 ACL 時,儲存貯體擁有者會擁有儲存貯體中的所有物件,並使用存取管理政策專門管理對這些物件的存取。

Amazon S3 中的大多數新式使用案例不再需要使用 ACL。建議您將 ACL 保持停用狀態,除非在異常情況下必須個別控制每個物件的存取。停用 ACL 後,您可以使用政策來控制對儲存貯體中所有物件的存取,無論是誰將物件上傳到您的儲存貯體。如需詳細資訊,請參閱 控制物件的擁有權並停用儲存貯體的 ACL

重要

如果儲存貯體使用 S3 物件擁有權的儲存貯體擁有者強制執行設定,則您必須使用政策將存取權授予儲存貯體及其中的物件。在啟用儲存貯體擁有者強制執行設定的情況下,請求設定存取控制清單 (ACL) 或更新 ACL 失敗,並傳回 AccessControlListNotSupported 錯誤碼。仍支援讀取 ACL 的請求。

若使用 ACL 將物件設為可供大眾讀取,請將 READ 許可授予 AllUsers 群組,如下列授予元素所示。將此授予元素新增到物件 ACL。如需如何管理 ACL 的資訊,請參閱「存取控制清單 (ACL) 概觀」。

<Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission>READ</Permission> </Grant>