本頁面說明如何將您擁有的物件設為可供公開網際網路上的所有人讀取,以及如何從值區移除公開存取權。如要瞭解如何存取已設為公開的資料,請參閱「存取公開資料」一文。
當物件公開共用時,只要物件為公開,有該物件 URI 的任何使用者就都可以存取物件。
必要的角色
如要取得讓物件可供公開讀取的必要權限,請管理員為包含您要公開的資料的儲存桶授予下列角色:
如何將值區中的所有物件設為可公開讀取:Storage 管理員 (
roles/storage.admin
)如何將個別物件設為可公開讀取:Storage 物件管理員 (
roles/storage.objectAdmin
)- 如果您打算使用 Google Cloud 控制台,就必須具備「Storage Admin」(
roles/storage.admin
) 角色,而非「Storage Object Admin」角色。
- 如果您打算使用 Google Cloud 控制台,就必須具備「Storage Admin」(
如要移除值區中所有物件的公開存取權:Storage 管理員 (
roles/storage.admin
)
這些角色包含將物件設為公開所需的權限。如要查看所需的確切權限,請展開「必要權限」部分:
所需權限
storage.buckets.get
storage.buckets.getIamPolicy
storage.buckets.setIamPolicy
storage.buckets.update
storage.objects.get
storage.objects.getIamPolicy
storage.objects.setIamPolicy
storage.objects.update
如要使用Google Cloud 主控台執行本頁面的工作,您只需要具備下列權限:
storage.buckets.list
storage.objects.list
如需值區角色授予作業的操作說明,請參閱「搭配使用值區與 IAM」。
將值區中的所有物件設為可公開讀取
如要將值區中的所有物件設為可供公開網路上的所有使用者讀取,請將 Storage 物件檢視者 (roles/storage.objectViewer
) 角色授予主要對象 allUsers
:
控制台
- 在 Google Cloud 控制台,前往 Cloud Storage「Buckets」頁面。
在值區清單中,找出您要設為公開的值區名稱,然後點選這個名稱。
選取靠近頁面上方的 [Permissions] (權限) 分頁標籤。
在「權限」部分中,按一下
「授予存取權」按鈕。系統會隨即顯示「授予存取權」對話方塊。
在「New principals」(新增主體) 欄位中輸入
allUsers
。在「請選擇角色」下拉式選單中,在篩選器方塊中輸入
Storage Object Viewer
,然後從篩選結果中選取「Storage 物件檢視者」。按一下 [儲存]。
按一下「Allow public access」(允許公開存取)。
授予公開存取權後,「public access」欄中的每個物件都會顯示「Copy URL」按鈕。您可以按一下這個按鈕,取得物件的公開網址。公開網址與物件上直接按下滑鼠右鍵來取得的連結不同。這兩個連結都可用來存取物件,但使用公開網址就不需要登入使用者帳戶。詳情請參閱「要求端點」一文。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱疑難排解。
如要瞭解如何解決組織政策錯誤和權限錯誤,請參閱「排解將資料設為公開的疑難排解」。指令列
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
在開發環境中執行
buckets add-iam-policy-binding
指令:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
其中
BUCKET_NAME
是您要公開物件的值區名稱。例如: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,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Terraform
您可以使用 Terraform 資源,將值區中的所有物件設為公開。
REST API
JSON API
建立包含下列資訊的 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
是您要公開物件的值區名稱。例如:my-bucket
。
XML API
XML API 不支援將值區中的所有物件設為可公開讀取。使用 Google Cloud 控制台或 gcloud storage
。
將值區的部分內容設為可公開讀取
使用代管資料夾,控管名稱前置字串與代管資料夾名稱相符的物件存取權。舉例來說,您可以使用名為 my-folder
的代管資料夾,控管對名為 my-folder/cats.jpg
和 my-folder/dogs.jpg
的物件存取權。
如要讓這類物件可供公開存取,請先建立受管理的資料夾,然後在資料夾上設定 IAM 政策,授予 allUsers
Storage 物件檢視者 (roles/storage.objectViewer
) 角色:
控制台
- 在 Google Cloud 控制台,前往 Cloud Storage「Buckets」頁面。
按一下包含要設為公開物件的值區名稱。
請按照下列步驟建立資料夾:
按一下「建立資料夾」按鈕。
輸入資料夾的名稱。資料夾轉換為受管理的資料夾後,名稱以此名稱開頭的物件就會受到資料夾上設定的 IAM 角色限制。
按一下 [建立]。
請按照下列步驟將資料夾轉換為受管理的資料夾:
在顯示值區內容的窗格中,找出您建立的資料夾名稱,然後按一下「More options」圖示
。按一下「編輯存取權」。
在顯示的視窗中按一下 [Enable] (啟用)。
請按照下列步驟,為資料夾新增 IAM 政策,授予
allUsers
roles/storage.objectViewer
角色:如果受管理資料夾的「權限」窗格尚未開啟,請依序按一下受管理資料夾的「更多選項」圖示
,然後按一下「編輯存取權」。在「Permissions」窗格中,按一下
「Add principal」按鈕。在「New principals」(新增主體) 欄位中輸入
allUsers
。在「請選擇角色」下拉式選單中,在篩選框中輸入
Storage Object Viewer
,然後從篩選結果中選取「Storage Object Viewer」。按一下 [儲存]。
按一下「Allow public access」(允許公開存取)。
授予公開存取權後,「public access」欄中會針對每個適用的物件顯示「Copy URL」按鈕。您可以按一下這個按鈕,取得物件的公開網址。公開網址與直接按物件滑鼠右鍵取得的連結不同。這兩個連結都可用來存取物件,但使用公開網址就不需要登入使用者帳戶。詳情請參閱「要求端點」一文。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱疑難排解。
如要瞭解如何解決組織政策錯誤和權限錯誤,請參閱「排解將資料設為公開的疑難排解」。指令列
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
在開發環境中,使用
gcloud storage managed-folders create
指令建立受管理的資料夾:gcloud storage managed-folders create gs://BUCKET_NAME/MANAGED_FOLDER_NAME/
其中:
BUCKET_NAME
是您要建立受控資料夾的值區名稱。例如: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
建立包含下列資訊的 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
透過setIamPolicy
ManagedFolder 要求呼叫 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/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。以下是授予 allUsers
物件存取權的 ACL 檔案範例:
<AccessControlList> <Entries> <Entry> <Scope type="AllUsers"/> <Permission>READ</Permission> </Entry> </Entries> </AccessControlList>
移除值區中所有物件的公開存取權
如要移除值區內所有物件的公開存取權,請移除授予 allUsers
roles/storage.objectViewer
角色的 IAM 政策:
控制台
- 在 Google Cloud 控制台,前往 Cloud Storage「Buckets」頁面。
在值區清單中,點選要移除公開存取權的值區名稱。
選取 [權限] 分頁標籤。
套用至值區的 IAM 政策會顯示在「權限」部分。
在「View by principals」分頁中,選取要移除的
allUsers
主體核取方塊。按一下「- 移除存取權」按鈕。
在隨即顯示的重疊視窗中,按一下「確認」。
如要瞭解如何在 Google Cloud 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱疑難排解。
指令列
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
在開發環境中執行
buckets remove-iam-policy-binding
指令:
gcloud storage buckets remove-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
其中 BUCKET_NAME
是您要撤銷存取權的值區名稱。例如:my-bucket
。
REST API
JSON
取得已套用至 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 政策的值區名稱。例如: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
。
後續步驟
- 存取已設為公開的資料。
- 進一步瞭解值區和物件的存取權控管選項。