本頁面說明如何設定您擁有的物件,讓公開網際網路中的所有使用者都能讀取,以及如何從 bucket 移除公開存取權。如要瞭解如何存取已公開的資料,請參閱「存取公開資料」。
物件公開共用後,只要物件維持公開狀態,任何知道物件 URI 的使用者都能存取該物件。
必要的角色
如要取得將物件設為可公開讀取所需的權限,請要求管理員為您授予 bucket 的下列角色,該 bucket 包含您要公開的資料:
如要將 bucket 中的所有物件設為可公開讀取:儲存空間管理員 (
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] (權限) 分頁標籤。
在「權限」部分,點選 「授予存取權」按鈕。
系統會顯示「授予存取權」對話方塊。
在「New principals」(新增主體) 欄位中輸入
allUsers。在「選取角色」下拉式選單中,在篩選方塊中輸入
Storage Object Viewer,然後從篩選結果中選取「Storage 物件檢視者」。按一下 [儲存]。
點選「允許公開存取」。
授予公開存取權後,每個物件的「公開存取權」欄都會顯示「複製網址」按鈕。按一下這個按鈕,即可取得物件的公開網址。公開網址與直接右鍵點選物件取得的連結不同。這兩個連結都能存取物件,但使用者無須登入帳戶,即可透過公開網址存取物件。詳情請參閱「要求端點」。
如要瞭解如何透過 Google Cloud 控制台取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」一文。
如要瞭解如何解決機構政策錯誤和權限錯誤,請參閱「排解公開資料問題」。指令列
-
在 Google Cloud 控制台中啟用 Cloud Shell。
控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。 Google Cloud 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 政策,授予 allUsers「Storage 物件檢視者」(roles/storage.objectViewer) 角色:
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
點選含有要公開物件的 bucket 名稱。
請按照下列步驟建立資料夾:
按一下「建立資料夾」按鈕。
輸入資料夾的名稱。資料夾轉換為受管理資料夾後,名稱開頭為這個名稱的物件,就會受到資料夾上設定的 IAM 角色限制。
點選「建立」。
請按照下列步驟將資料夾轉換為受管理資料夾:
在顯示 bucket 內容的窗格中,找到您建立的資料夾名稱,然後按一下「更多選項」圖示 。
按一下「編輯權限」。
在顯示的視窗中按一下 [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。
控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。 Google Cloud 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是包含受管理資料夾的值區名稱,您要將 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是要建立代管資料夾的 bucket 名稱。例如: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是包含受管理資料夾的值區名稱,您要將 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 政策會顯示在「權限」部分。
在「View by principals」(按照主體查看) 分頁中,選取要移除的
allUsers主體核取方塊。按一下「- 移除存取權」按鈕。
在隨即出現的重疊視窗中,按一下「確認」。
如要瞭解如何透過 Google Cloud 控制台取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」一文。
指令列
-
在 Google Cloud 控制台中啟用 Cloud Shell。
控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。 Google Cloud 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是要移除存取權的值區名稱。例如:my-bucket。
後續步驟
- 存取已設為公開的資料。
- 進一步瞭解值區和物件的存取控管選項。