V4 簽署程序可用於產生簽章,以便在 Cloud Storage XML API 要求中進行驗證。本頁面說明如何使用 Google Cloud CLI 和 Cloud Storage 用戶端程式庫,透過服務帳戶憑證建立經簽署的網址。經簽署的網址可授予特定 Cloud Storage 資源的限時讀取或寫入權限。如要自行編寫程式來建立經簽署的網址,請改為參閱「使用自己的程式進行 V4 簽署」。
V4 經簽署的網址中包含的查詢字串參數會由簽章驗證。如果使用經簽署的網址的要求包含不屬於簽章的查詢參數,要求就會失敗。這樣一來,您就能使用 response-content-disposition 等參數,覆寫已驗證 GET 要求的物件中繼資料。
事前準備
執行本頁的工作前,請先完成下列步驟:
啟用 Service Account Credentials API (如果尚未啟用)。
啟用 API 所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過 Service Usage 管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。為服務帳戶授予足夠權限,使其能執行經簽署的網址提出的要求。舉例來說,如果經簽署的網址允許使用者讀取物件資料,服務帳戶本身必須具備讀取物件資料的權限。
如要執行本指南所述的工作,請要求管理員將下列其中一個 IAM 角色授予服務帳戶:
Storage 物件使用者 (
roles/storage.objectUser):使用這個角色建立經簽署的網址,用於上傳及下載物件。如果經簽署的網址可能覆寫現有物件,也需要這個角色。Storage 物件檢視者 (
roles/storage.objectViewer):如果只想建立經簽署的網址來下載物件,請使用這個角色。Storage 物件建立者 (
roles/storage.objectCreator):如果只想建立經簽署的網址來上傳物件,且上傳的物件不會覆寫 bucket 中的現有物件,請使用這個角色。
這些預先定義的角色具備必要權限,可建立用於下載及上傳物件的經簽署的網址。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
storage.objects.get(如果只想上傳物件,則不需提供)storage.objects.create(如果只想下載物件,則不需要)storage.objects.delete(如果上傳時不需要覆寫物件,則不需提供)
您或許還可透過自訂角色或其他預先定義的角色取得這些權限。如要查看哪些角色與哪些權限相關聯,請參閱「Cloud Storage 的 IAM 角色」。
具備足夠權限,可使用服務帳戶簽署 blob。請要求管理員授予服務帳戶權杖建立者角色 (
roles/iam.serviceAccountTokenCreator)。如果您使用使用者憑證進行驗證,則應是獲派這個角色的主體,且這個角色應授予將用於建立已簽署網址的服務帳戶。
如果您使用附加至運算執行個體的服務帳戶進行驗證,該服務帳戶必須是這個角色的主體,才能模擬自身,且應在包含服務帳戶的專案中授予這個角色。
這個預先定義的角色具備使用服務帳戶簽署 blob 所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
iam.serviceAccounts.signBlob
您或許還可透過自訂角色或其他預先定義的角色取得這項權限。如要查看哪些角色與哪些權限相關聯,請參閱「Cloud Storage 的 IAM 角色」。
如要瞭解如何授予專案角色,請參閱「管理專案存取權」。
建立經簽署的網址,以便下載物件
如要建立可從 bucket 取得物件的已簽署網址,請完成下列步驟:
指令列
使用
gcloud storage sign-url指令。舉例來說,下列指令會建立經簽署的網址,允許使用者在 10 分鐘內下載物件:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --duration=10m
其中:
BUCKET_NAME是物件所在的 bucket 名稱。例如:example-bucket。OBJECT_NAME是要下載的物件名稱。例如:cat.jpeg。SERVICE_ACCOUNT_EMAIL是服務帳戶的電子郵件地址,其金鑰會執行簽署。例如:signed-url-account@my-project.iam.gserviceaccount.com。
如果作業成功,回應會與以下內容相似:
--- expiration: '2023-07-14 23:19:35' http_verb: GET resource: gs://example-bucket/cat.jpeg signed_url: https://storage.googleapis.com/example-bucket/cat.jpeg? x-goog-signature=11ae9c61ca84dd0bec319f7d52a38029e5873caa2eeced0568 ef96076258cfc1a925a9683cc907d210036b61af9e06a13bf4a15b15fab3916669b e2f4c9f66ea6be822bec5858af519a6da705415b5768721197be213103fa09b8a18 8a143be77a24351517ff208a2c62cfebb78040daf1f953907080bd98f9462739d11 1355b1d9bcf54705b862f37392c031fde0d52add1a4d3bbb98a22e8b7023f6a1623 2e0a2dd56e524d410624d28663e557fafaf4ba0a04290a1066f894713857b429258 d14f056066c7622baf114c124e645688e19b4df3c4a7925f580693c93fa9c1dae7f dff0edff7259c72f3f0eadc5a9f9f556c83c9c8dc02ee3af8d20ab634bad&x-goog -algorithm=GOOG4-RSA-SHA256&x-goog-credential=signed-url-account%40 my-project.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2Fgoog 4_request&x-goog-date=20230714T221935Z&x-goog-expires=600&x-goog-si gnedheaders=host
任何人都可以使用這個網址,在指定時間長度 (在本例中為 10 分鐘) 內存取相關聯的資源 (在本例中為
cat.jpeg)。
用戶端程式庫
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
建立經簽署的網址以上傳物件
如要建立可將物件上傳至 bucket 的經簽署的網址,請完成下列步驟:
指令列
使用
gcloud storage sign-url指令。舉例來說,下列指令會建立經簽署的網址,允許使用者上傳檔案一小時:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --http-verb=PUT --duration=1h --headers=content-type=CONTENT_TYPE
BUCKET_NAME是要上傳物件的 bucket 名稱。例如:example-bucket。OBJECT_NAME是要指派給上傳物件的名稱。例如:cat.png。SERVICE_ACCOUNT_EMAIL是服務帳戶的電子郵件地址,其金鑰會執行簽署。例如:signed-url-account@my-project.iam.gserviceaccount.com。CONTENT_TYPE是上傳物件的內容類型。例如:image/png。
如果作業成功,回應會與以下內容相似:
--- expiration: '2023-07-14 23:35:47' http_verb: PUT resource: gs://example-bucket/cat.png signed_url: https://storage.googleapis.com/example-bucket/cat.png? x-goog-signature=2f670a686102963e0574f3c1a3b4d29ee4aa406c1528d42d2 30195d17fef73834b254314de7d7990afd48538a84b66f20010e7ecd90a900490e 6119b7e56a912f71c8d64285c40e86f31b8fec51cf8c7a61ded81de3cedac9c1ca b92474b7371740fdac20b2d8d092b15396f79443bbde954a4174ed11aef6c2cf5f a4d72a84ff60fd6003ed0a505b0e40b6207ddbaec2a15778f715c3ec7537a1b14f b6661b2abaa5736f1670a412ca7e2555c830591f0595c01ff95af7f2206abe2e27 41948c16d4bd4c7cbb25f41277ece59236c06e00ca6c63ae2eb3efc22c216bb24c e1b8b3801d07fd3a7ed3f2df3db6e59c6fc3cc76a002335dd936efd0237cf584e3 6&x-goog-algorithm=GOOG4-RSA-SHA256&x-goog-credential=signed-url-a ccount%40my-project.iam.gserviceaccount.com%2F20230714%2Fus%2Fstor age%2Fgoog4_request&x-goog-date=20230714T223547Z&x-goog-expires=36 00&x-goog-signedheaders=content-type%3Bhost
任何人都可以使用這個網址,在指定時間長度內 (本例為 1 小時),將資源 (本例為
cat.png) 上傳至指定的 Cloud Storage 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
限制
使用 Cloud Storage 工具產生經簽署的網址時,不支援 HMAC 憑證。