V4 簽署程序可用於產生簽章,以便在 Cloud Storage XML API 要求中進行驗證。本頁面說明如何使用 Google Cloud CLI 和 Cloud Storage 用戶端程式庫,透過服務帳戶憑證建立經簽署的網址。經簽署的網址可授予特定 Cloud Storage 資源的限時讀取或寫入權限。如要自行編寫程式來建立經簽署的網址,請改為參閱「使用自己的程式進行 V4 簽署」。
V4 經簽署的網址中包含的查詢字串參數會由簽章驗證。如果使用經簽署的網址的要求包含不屬於簽章的查詢參數,要求就會失敗。這樣您就能使用 response-content-disposition 等參數,覆寫已驗證 GET 要求的物件中繼資料。
事前準備
執行本頁的工作前,請先完成下列步驟:
啟用 Service Account Credentials API (如果尚未啟用)。
啟用 API 時所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (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.s3ns.iam.gserviceaccount.com。
如果作業成功,回應會與以下內容相似:
--- expiration: '2023-07-14 23:19:35' http_verb: GET resource: gs://example-bucket/cat.jpeg signed_url: https://storage.s3nsapis.fr/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.s3ns.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 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
C#
詳情請參閱 Cloud Storage C# API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Go
詳情請參閱 Cloud Storage Go API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Java
詳情請參閱「Cloud Storage Java API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Node.js
詳情請參閱「Cloud Storage Node.js API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
PHP
詳情請參閱 Cloud Storage PHP API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Python
詳情請參閱「Cloud Storage Python API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Ruby
詳情請參閱「Cloud Storage Ruby API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
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.s3ns.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.s3nsapis.fr/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.s3ns.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 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
C#
詳情請參閱「Cloud Storage C# API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Go
詳情請參閱 Cloud Storage Go API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Java
詳情請參閱「Cloud Storage Java API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
PHP
詳情請參閱 Cloud Storage PHP API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Python
詳情請參閱「Cloud Storage Python API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Rust
限制
使用 Cloud Storage 工具產生經簽署的網址時,系統不支援 HMAC 憑證。