本頁面說明如何讓公開網際網路上的所有使用者都能讀取您擁有的物件,以及如何移除 bucket 的公開存取權。如要瞭解如何存取已公開的資料,請參閱「存取公開資料」。
公開共用物件後,只要物件維持公開狀態,任何知道物件 URI 的使用者都能存取該物件。
必要的角色
如要取得將物件設為可公開讀取所需的權限,請要求管理員為您授予 bucket 的下列角色,該 bucket 包含您要公開的資料:
如要將 bucket 中的所有物件設為可公開讀取:Storage 管理員 (
roles/storage.admin)如要將個別物件設為可公開讀取:Storage 物件管理員 (
roles/storage.objectAdmin)- 如果您打算使用 Google Cloud 控制台,則需要「Storage 管理員」(
roles/storage.admin) 角色,而非「Storage 物件管理員」角色。
- 如果您打算使用 Google Cloud 控制台,則需要「Storage 管理員」(
如要移除 bucket 中所有物件的公開存取權:Storage 管理員 (
roles/storage.admin)
這些角色具備將物件設為公開所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
storage.buckets.getstorage.buckets.getIamPolicystorage.buckets.setIamPolicystorage.buckets.updatestorage.objects.getstorage.objects.getIamPolicystorage.objects.setIamPolicystorage.objects.update
只有在使用Google Cloud 控制台執行本頁工作時,才需要下列權限:
storage.buckets.liststorage.objects.list
如需如何授予 bucket 角色的操作說明,請參閱「在 bucket 上設定及管理 IAM 政策」。
將 bucket 中的所有物件設為可公開讀取
如要讓公開網路中的所有使用者都能讀取 bucket 中的所有物件,請在 bucket 中授予主體 allUsers Storage 物件檢視者 (roles/storage.objectViewer) 角色。
Storage 物件檢視者 (roles/storage.objectViewer) 角色包含 storage.objects.list 權限,可讓使用者列出 bucket 中的物件。如要使用權限較低的角色,只允許使用者取得物件,但不列出物件,請改為授予 Storage 舊版物件讀取者 (roles/storage.legacyObjectReader) 角色。
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,點選要設為公開的 bucket 名稱。
選取靠近頁面上方的 [Permissions] (權限) 分頁標籤。
在「Permissions」(權限) 區段中,按一下 「Grant access」(授予存取權) 按鈕。
系統會顯示「授予存取權」對話方塊。
在「New principals」(新增主體) 欄位中輸入
allUsers。在「選取角色」下拉式選單中,在篩選方塊中輸入
Storage Object Viewer,然後從篩選結果中選取「Storage 物件檢視者」。按一下 [儲存]。
點選「允許公開存取」。
授予公開存取權後,公開存取權欄中的每個物件都會顯示「Copy URL」(複製網址) 按鈕。按一下這個按鈕,即可取得物件的公開網址。公開網址與直接按一下滑鼠右鍵點選物件取得的連結不同。這兩個連結都能存取物件,但公開網址不需要使用者登入帳戶。詳情請參閱「要求端點」。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」。
如要瞭解如何解決組織政策錯誤和權限錯誤,請參閱「排解公開資料的問題」。指令列
-
在 Google Cloud 控制台啟用 Cloud Shell。
Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。
在開發環境中執行
buckets add-iam-policy-binding指令:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
其中
BUCKET_NAME是要公開物件的 bucket 名稱。例如:my-bucket。
用戶端程式庫
C++
詳情請參閱「Cloud Storage C++ API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱 Cloud Storage C# API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱「Cloud Storage Go API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱 Cloud Storage Java API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
詳情請參閱 Cloud Storage PHP API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱「Cloud Storage Python API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
詳情請參閱「Cloud Storage Ruby API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Rust
Terraform
您可以使用 Terraform 資源,將 bucket 中的所有物件設為公開。
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。建立包含下列資訊的 JSON 檔案:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":["allUsers"] } ] }
使用
cURL來透過PUT值區要求呼叫 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
其中:
JSON_FILE_NAME是您在步驟 2 建立的檔案路徑。BUCKET_NAME是要公開物件的 bucket 名稱。例如:my-bucket。
XML API
XML API 不支援將 bucket 中的所有物件設為可公開讀取。使用 Google Cloud 控制台或 gcloud storage。
將部分 bucket 設為可公開讀取
使用代管資料夾,即可控管名稱前置字串與代管資料夾名稱相符的物件存取權。舉例來說,名為 my-folder 的代管資料夾可用於控管名為 my-folder/cats.jpg 和 my-folder/dogs.jpg 的物件存取權。
如要將這類物件設為可公開存取,請先建立代管資料夾,然後在資料夾上設定 IAM 政策,將 Storage 物件檢視者 (roles/storage.objectViewer) 角色授予 allUsers:
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
點選含有要公開物件的 bucket 名稱。
請按照下列步驟建立資料夾:
按一下「建立資料夾」按鈕。
輸入資料夾名稱。資料夾轉換為代管資料夾後,名稱開頭為此名稱的物件,將受制於資料夾上設定的 IAM 角色。
點選「建立」。
請按照下列步驟,將資料夾轉換為受管理資料夾:
在顯示 bucket 內容的窗格中,找到您建立的資料夾名稱,然後按一下「More options」(更多選項) 圖示 。
按一下「編輯權限」。
在顯示的視窗中按一下 [Enable] (啟用)。
在資料夾中新增 IAM 政策,授予
allUsers「Storage 物件檢視者」(roles/storage.objectViewer) 角色,步驟如下:如果代管資料夾的「權限」窗格尚未開啟,請點選代管資料夾的「更多選項」圖示 ,然後點選「編輯權限」。
在「Permissions」(權限) 窗格中,按一下「Add principal」(新增主體) 按鈕。
在「New principals」(新增主體) 欄位中輸入
allUsers。在「選取角色」下拉式選單的篩選方塊中輸入
Storage Object Viewer,然後從篩選結果中選取「Storage 物件檢視者」。按一下 [儲存]。
點選「允許公開存取」。
授予公開存取權後,每個適用物件的「公開存取權」欄都會顯示「複製網址」按鈕。按一下這個按鈕,即可取得物件的公開網址。公開網址與直接按一下滑鼠右鍵點選物件取得的連結不同。這兩個連結都能存取物件,但使用者無須登入帳戶,即可透過公開網址存取物件。詳情請參閱「要求端點」。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」。
如要瞭解如何解決機構政策錯誤和權限錯誤,請參閱「排解公開資料問題」。指令列
-
在 Google Cloud 控制台啟用 Cloud Shell。
Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。
在開發環境中,使用
gcloud storage managed-folders create指令建立代管資料夾:gcloud storage managed-folders create gs://BUCKET_NAME/MANAGED_FOLDER_NAME/
其中:
BUCKET_NAME是要建立代管資料夾的 bucket 名稱。例如:my-bucket。MANAGED_FOLDER_NAME是要建立的代管資料夾名稱。例如:my-managed-folder。
在開發環境中,使用
gcloud storage managed-folders add-iam-policy-binding指令,將allUsers新增至受管理資料夾的 IAM 政策:gcloud storage managed-folders add-iam-policy-binding gs://BUCKET_NAME/MANAGED_FOLDER_NAME --member=allUsers --role=roles/storage.objectViewer
其中:
BUCKET_NAME是包含代管資料夾的 bucket 名稱,您要將 IAM 政策新增至該資料夾。例如:my-bucket。MANAGED_FOLDER_NAME是要新增公開存取權的受管理資料夾名稱。例如:my-managed-folder。
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。建立包含下列資訊的 JSON 檔案:
{ "name": "MANAGED_FOLDER_NAME" }
其中
MANAGED_FOLDER_NAME是要建立的代管資料夾名稱。例如:my-managed-folder。使用
cURL來透過Insert ManagedFolder要求呼叫呼叫 JSON API:curl -X POST --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders"
其中:
JSON_FILE_NAME是您在上一步建立的檔案路徑。BUCKET_NAME是要在其中建立代管資料夾的值區名稱。例如:my-bucket。
建立包含下列資訊的 JSON 檔案:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":["allUsers"] } ] }
使用
cURL呼叫 JSON API,並傳送setIamPolicyManagedFolder 要求:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAME/iam"
其中:
JSON_FILE_NAME是您在上一步建立的檔案路徑。BUCKET_NAME是 bucket 的名稱,其中包含您要新增 IAM 政策的代管資料夾。例如:my-bucket。MANAGED_FOLDER_NAME是要新增 IAM 政策的代管資料夾名稱。例如:my-managed-folder。
XML API
XML API 不支援使用代管資料夾。使用其他工具 (例如 Google Cloud 控制台),或使用 Set Object ACL 要求在個別物件上設定 ACL。以下是 ACL 檔案範例,可將物件的 allUsers 存取權授予使用者:
<AccessControlList>
<Entries>
<Entry>
<Scope type="AllUsers"/>
<Permission>READ</Permission>
</Entry>
</Entries>
</AccessControlList>移除 bucket 內所有物件的公開存取權
如要移除 bucket 中所有物件的公開存取權,請移除授予「Storage 物件檢視者」(allUsers) 角色 (roles/storage.objectViewer) 的 IAM 政策:
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,點選要移除公開存取權的 bucket 名稱。
選取 [權限] 分頁標籤。
適用於 bucket 的 IAM 政策會顯示在「Permissions」(權限) 部分。
在「View by principals」(按照主體查看) 分頁中,勾選要移除的
allUsers主體核取方塊。按一下「- 移除存取權」按鈕。
在隨即顯示的疊加視窗中,按一下「確認」。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」。
指令列
-
在 Google Cloud 控制台啟用 Cloud Shell。
Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。
在開發環境中執行
buckets remove-iam-policy-binding指令:
gcloud storage buckets remove-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
其中 BUCKET_NAME 是要撤銷存取權的 bucket 名稱。例如:my-bucket。
REST API
JSON
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。取得套用至 bucket 的現有政策。方法是使用
cURL透過GET getIamPolicy要求呼叫 JSON API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
其中
BUCKET_NAME是要查看 IAM 政策的 bucket 名稱。例如:my-bucket。建立 JSON 檔案,其中包含您在上一個步驟中擷取的政策,並編輯該檔案,從政策中移除
allUsers主體的繫結。使用
cURL來透過PUT setIamPolicy要求呼叫呼叫 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
其中:
JSON_FILE_NAME是您在步驟 3 建立的檔案路徑。BUCKET_NAME是要移除存取權的 bucket 名稱。例如:my-bucket。
後續步驟
- 存取已設為公開的資料。
- 進一步瞭解 Bucket 和物件的存取權控管選項。