V4 簽署程序可用於產生簽章,以便在 Cloud Storage XML API 要求中進行驗證。本頁說明如何使用 Google Cloud CLI 和 Cloud Storage 用戶端程式庫,透過服務帳戶憑證建立已簽署的網址。已簽署的網址可提供對特定 Cloud Storage 資源的限時讀取或寫入存取權。如要自行編寫程式來建立已簽署網址,請改為參閱「使用您自己的程式進行 V4 簽署程序」。
事前準備
執行本頁中的工作之前,請先完成下列步驟:
Enable the Service Account Credentials API.
為服務帳戶提供足夠的權限,使其可以執行已簽署網址將提出的要求。舉例來說,如果您的已簽署網址允許使用者讀取物件資料,服務帳戶本身必須具有讀取物件資料的權限。
如要執行本指南所述工作,請管理員將下列其中一個 IAM 角色授予服務帳戶:
Storage 物件使用者 (
roles/storage.objectUser
):使用這個角色建立簽署網址,以上傳及下載物件。如果簽署網址可能會覆寫現有物件,也必須具備這個角色。Storage 物件檢視者 (
roles/storage.objectViewer
):如果只想建立用於下載物件的已簽署網址,請使用這個角色。Storage 物件建立者 (
roles/storage.objectCreator
):如果您只想建立用於上傳物件的已簽署網址,且上傳的物件不會覆寫值區中的現有物件,請使用這個角色。
這些預先定義的角色具備建立簽署網址所需的權限,可下載及上傳物件。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
storage.objects.get
(如只要上傳物件,則不需此目錄)storage.objects.create
(如只要下載物件,則不需此步驟)storage.objects.delete
(如果上傳時不需要覆寫物件,則不需提供)
您或許還可透過自訂角色或其他預先定義的角色取得這些權限。如要查看哪些角色與哪些權限相關聯,請參閱「Cloud Storage 的 IAM 角色」。
具備足夠權限,可使用服務帳戶簽署 Blob。請管理員授予服務帳戶憑證建立者角色 (
roles/iam.serviceAccountTokenCreator
)。如果您使用使用者憑證進行驗證,您應該是獲派此角色的主體,且此角色應授予用於建立簽署網址的服務帳戶。
如果您使用附加至運算執行個體的服務帳戶進行驗證,服務帳戶必須是這個角色的主體,才能模擬自身,且應在包含服務帳戶的專案中授予這個角色。
這個預先定義的角色包含使用服務帳戶簽署 Blob 所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
iam.serviceAccounts.signBlob
您或許還可透過自訂角色或其他預先定義的角色取得這項權限。如要查看哪些角色與哪些權限相關聯,請參閱「Cloud Storage 的 IAM 角色」。
如需授予專案角色的操作說明,請參閱「管理專案存取權」。
建立已簽署的網址,下載物件
如要建立可從值區取得物件的已簽署網址,請完成下列步驟:
指令列
使用
gcloud storage sign-url
指令。舉例來說,下列指令會建立已簽署的網址,供使用者在 10 分鐘內下載物件:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --duration=10m
其中:
BUCKET_NAME
是物件所在的值區名稱。例如:example-bucket
。OBJECT_NAME
是要下載的物件名稱。例如:cat.jpeg
。SERVICE_ACCOUNT_EMAIL
是服務帳戶的電子郵件地址,該帳戶的金鑰將用於簽署。例如:signed-url-account@my-project.s3ns-system.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-system.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
。
建立已簽署的網址,以上傳物件
如要建立可將物件上傳至值區的已簽署網址,請完成下列步驟:
指令列
使用
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
是要上傳物件的值區名稱。例如:example-bucket
。OBJECT_NAME
是要指派給上傳物件的名稱。例如:cat.png
。SERVICE_ACCOUNT_EMAIL
是服務帳戶的電子郵件地址,該帳戶的金鑰將用於簽署。例如:signed-url-account@my-project.s3ns-system.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-system.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 值區。
用戶端程式庫
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
。