Google Cloud Storage 簽署網址 (Signed URL) 安全分享檔案教學

更新於 發佈於 閱讀時間約 9 分鐘

各位讀者好

你是否也遇過這個常見的挑戰:儲存在 Google Cloud Storage (GCS) 私有值區 (Private Bucket) 中的檔案,需要暫時提供給特定使用者或外部應用程式下載,但又不想將整個值區或物件設為公開,更不想為此建立複雜的 IAM 權限?

在這個情況下我們可以使用 Signed URL (簽署網址)!🔐

Signed URL 是一個帶有時效性的特殊網址,它將權限驗證資訊直接簽署在 URL 中。任何持有此 URL 的人,都可以在其過期前,暫時擁有下載(或上傳/刪除)該私有物件的權限,時間一到,網址自動失效。這是一種兼具安全、彈性與便利的存取控制方法。

今天,就讓我們來看看如何快速建立 GCS 的 Signed URL 吧!

開始之前:你需要什麼?

  1. 開啟所需的 API:使用 Signed URL 會需要開啟 IAM Service Account Credentials API (圖1)
  2. 服務帳戶 (Service Account):這是代表你的應用程式或服務執行操作的「機器人帳號」。我們會用它的金鑰來簽署 URL (圖2)
  3. 正確的 IAM 權限:服務帳戶本身至少需要具備以下之一的角色才能執行 Signed URL 設定。另外一定需要 roles/iam.serviceAccountTokenCreator的角色進行 Token 生成
    • Storage Object User (roles/storage.objectUser): Use this role to create signed URLs for both uploading and downloading objects. This role is also required if the signed URL could overwrite an existing object.
    • Storage Object Viewer (roles/storage.objectViewer): Use this role if you only want to create signed URLs for downloading objects.
    • Storage Object Creator (roles/storage.objectCreator): Use this role if you only want to create signed URLs for uploading objects and the uploaded object won't overwrite an existing object in the bucket.
圖1

圖1

圖2

圖2



方法一:使用 gcloud CLI (最快速的開發測試方法)

對於開發者和維運人員來說,gcloud 命令列工具是最直接的方式。適合臨時產生 URL 進行測試。

指令範例:

gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --duration=10m --region=asia-east1

參數說明:

  • BUCKET_NAME is the name of the bucket where the object is located. For example, example-bucket.
  • OBJECT_NAME is the name of the object to download. For example, cat.jpeg.
  • SERVICE_ACCOUNT_EMAIL is the email address of a service account whose key will do the signing. For example, signed-url-account@my-project.iam.gserviceaccount.com.

Flag --duration 是指 Signed URL 的有效時間 (分鐘為單位)。以上面的範例來說,Signed URL 有效時間為 10 分鐘。

✨ 實際範例:假設我要分享 aws-me-sw Bucket 裡面的 me_files.zip,有效時間為 10 分鐘:

gcloud storage sign-url gs://aws-me-sw/me_files.zip --impersonate-service-account=forsignedurl@tw-xx-xx-xxxxxce.iam.gserviceaccount.com --duration=10m --region=asia-east1

執行後,你會在終端機得到一長串的 URL,直接將它交給使用者即可!

raw-image



方法二:使用 Python Client Library (應用程式整合首選)

當你的應用程式需要動態產生下載連結時(例如,使用者點擊「下載發票」按鈕),就需要用程式碼來實現。

Python 程式碼範例:

import datetime

from google.cloud import storage


def generate_download_signed_url_v4(bucket_name, blob_name):
"""Generates a v4 signed URL for downloading a blob.

Note that this method requires a service account key file. You can not use
this if you are using Application Default Credentials from Google Compute
Engine or from the Google Cloud SDK.
"""
# bucket_name = 'your-bucket-name'
# blob_name = 'your-object-name'

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

url = blob.generate_signed_url(
version="v4",
# This URL is valid for 15 minutes
expiration=datetime.timedelta(minutes=15),
# Allow GET requests using this URL.
method="GET",
)

print("Generated GET signed URL:")
print(url)
print("You can use this URL with any user agent, for example:")
print(f"curl '{url}'")
return url

這段程式碼可以輕易地整合到你的 Web 應用程式後端 (如 Django, Flask),為使用者提供安全的檔案下載功能。


💡 最佳實踐與提醒

  • 最小權限原則:賦予服務帳戶的權限越少越好。如果只是下載,roles/storage.objectViewer 就足夠。
  • 最短有效時間:URL 的壽命應該盡可能短,滿足使用情境即可。不要設定長達數天或數週的下載連結。
  • 保護 URL:Signed URL 就等同於一把臨時鑰匙。請透過 HTTPS 傳輸,並視其為敏感資訊,不要公開在網頁原始碼或日誌中。
  • 優先使用 V4 簽署:V4 是目前最新、最安全的簽署流程,建議所有新應用程式都採用。


Signed URL 是管理雲端儲存權限的利器,讓你無需在安全與便利之間妥協。

你在什麼情境下會使用 Signed URL 呢?

歡迎在底下留言分享你的經驗或提出問題!👇

留言
avatar-img
留言分享你的想法!
avatar-img
隨意寫寫
0會員
5內容數
分享大小事
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
Thumbnail
需求情境: 為了讓多人使用 App,必須有驗證程序,以識別特定使用者,存取各自擁有的資源。 解決方案: 引用 google 所提供的雲端服務平台 Firebase,其中有多種驗證功能可選用。基於個人對 google 的偏愛,決定先採用 google signin 的方法,實作 login lo
Thumbnail
本篇文章主要是在準備 Professional Google Workspace Administrator 考試時,使用官方教材所截錄出來的考試範圍(官方文件),另外也是企業剛導入 Google Workspace 時常見的設定的整理。
Thumbnail
本篇文章主要是在準備 Professional Google Workspace Administrator 考試時,使用官方教材所截錄出來的考試範圍(官方文件),另外也是企業剛導入 Google Workspace 時常見的設定的整理。
Thumbnail
Google Cloud Arcade 是一個免費、以遊戲來學習 Google Cloud 的平台,在這裡您可以透過實作的Labs 來解決主題任務和每週任務,每個月的主題任務和每週任務都會更新,充實掌握雲端技能。
Thumbnail
Google Cloud Arcade 是一個免費、以遊戲來學習 Google Cloud 的平台,在這裡您可以透過實作的Labs 來解決主題任務和每週任務,每個月的主題任務和每週任務都會更新,充實掌握雲端技能。
Thumbnail
Google 提供了免費的雲端服務 Google Apps Script (GAS) ,我們可以撰寫一些簡易的程式APP,串接其他 Google 雲端服務 如 Google Docs ,Sheets …,就能夠幫助我們利用雲端硬碟做日常工作
Thumbnail
Google 提供了免費的雲端服務 Google Apps Script (GAS) ,我們可以撰寫一些簡易的程式APP,串接其他 Google 雲端服務 如 Google Docs ,Sheets …,就能夠幫助我們利用雲端硬碟做日常工作
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
介紹幾種免費雲端空間,容量大且有密碼保護功能,包括GigaFile、AC data、FILENOW、おくりん坊 Okurin和Easyupload。
Thumbnail
介紹幾種免費雲端空間,容量大且有密碼保護功能,包括GigaFile、AC data、FILENOW、おくりん坊 Okurin和Easyupload。
Thumbnail
本篇文章將描述如何產生GCP的服務帳戶金鑰,並利用該金鑰在DBeaver或是其他透過支援JDBC的軟體連接到BigQuery服務。
Thumbnail
本篇文章將描述如何產生GCP的服務帳戶金鑰,並利用該金鑰在DBeaver或是其他透過支援JDBC的軟體連接到BigQuery服務。
Thumbnail
AWS CloudFront + S3 遇到 CORS 解決方式
Thumbnail
AWS CloudFront + S3 遇到 CORS 解決方式
Thumbnail
本文介紹了 Google Cloud 的網絡服務層級之間的差異。讀者可以瞭解到 Google Cloud 的 VPC(Virtual Private Cloud)具有全球級的特點,以及 Premium Tier 和 Standard Tier 之間不同的差異。
Thumbnail
本文介紹了 Google Cloud 的網絡服務層級之間的差異。讀者可以瞭解到 Google Cloud 的 VPC(Virtual Private Cloud)具有全球級的特點,以及 Premium Tier 和 Standard Tier 之間不同的差異。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News