HMAC 金鑰

設定方式

本頁面將說明雜湊式訊息驗證碼 (HMAC) 金鑰,這類金鑰可用於驗證對 Cloud Storage XML API 發出的要求。如要在其他雲端儲存空間供應商和 Cloud Storage 之間移動資料,HMAC 金鑰相當實用,因為 HMAC 金鑰可讓您重複使用現有程式碼來存取 Cloud Storage。

總覽

HMAC 金鑰是一種與帳戶 (通常是服務帳戶) 相關聯的憑證。您可以使用 HMAC 金鑰,透過 HMAC-SHA256 簽署演算法建立簽章。您建立的簽章會包含在傳送至 Cloud Storage XML API 的要求中。簽名會顯示特定要求是否已獲得與 HMAC 金鑰相關聯的帳戶授權。

HMAC 金鑰主要包含兩個部分:存取 ID 和密鑰。

  • 存取 ID:與特定帳戶連結的英數字串。

    • 連結至服務帳戶時,字串長度為 61 個字元。

    • 連結至使用者帳戶時,字串長度為 24 個字元。

    以下是存取 ID 的範例:

    GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • 密鑰:與特定存取 ID 連結的 40 個字元 Base64 編碼字串。密鑰是預先共用的金鑰,只有您和 Cloud Storage 知道。您會在驗證程序中使用密鑰建立簽章。以下是密鑰範例:

    bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

存取 ID 和密鑰都會用來識別 HMAC 金鑰,但密鑰是更敏感的資訊,因為密鑰是用來建立簽章。

您可以視需要對資源啟用 restrictAuthTypes 限制,限制由 HMAC 金鑰簽署的要求存取權。

儲存密鑰

為服務帳戶建立 HMAC 金鑰時,您會取得金鑰的密鑰一次。您必須妥善保管密鑰和相關聯的存取 ID。如果遺失密鑰,您或 Google Cloud都無法取回,必須為服務帳戶建立新的 HMAC 金鑰,才能繼續驗證要求。

如要為使用者帳戶建立 HMAC 金鑰,您必須使用該使用者帳戶登入Google Cloud 控制台,然後前往您具備 resourcemanager.projects.get IAM 權限的專案,在 Cloud Storage 設定選單中選取「互通性」分頁標籤。建立完成後,您可以在任何專案的「互通性」分頁中查看金鑰的密鑰,前提是您具備 resourcemanager.projects.get 權限。

儲存 Secret 的最佳做法

  • 請勿分享 HMAC 金鑰密鑰。請妥善保管 HMAC 金鑰密鑰,就像保管任何存取憑證一樣。

  • 為了確保最佳安全性,建議您定期變更金鑰以完成金鑰輪替。

  • 如果您認為有人盜用您的 HMAC 金鑰,請立即刪除受影響的 HMAC 金鑰,並建立新的金鑰。

  • 變更 HMAC 密鑰時,應在刪除舊金鑰之前使用新的 HMAC 金鑰更新代碼。刪除 HMAC 金鑰後,金鑰會立即失效,且無法復原。

限制

  • HMAC 密鑰只能用於向 XML API 傳送要求,而不能將要求傳送到 JSON API。

  • 每個服務帳戶最多可有 10 個 HMAC 金鑰。不過,已刪除的金鑰不會計入這項限制配額。

  • 建立服務帳戶 HMAC 金鑰後,最多可能需要 60 秒才能使用。刪除服務帳戶後,其 HMAC 金鑰可能仍會繼續運作,最長可達 5 分鐘。相反地,取消刪除擁有 HMAC 金鑰的服務帳戶後,最多可能需要 5 分鐘,金鑰才會再次可用。

  • 如果對資源啟用 restrictAuthTypes 限制,就無法再為該資源中指定的帳戶類型建立或啟用 HMAC 金鑰。

遷移使用者帳戶中的 HMAC 金鑰

一般來說,將 HMAC 金鑰與服務帳戶 (而不是使用者帳戶) 建立關聯是比較好的做法,尤其是對於實際工作負載而言:

  • 服務帳戶可提供更完善的管理監督機制,並消除個別使用者帳戶帶來的安全性和隱私權影響。

  • 服務帳戶可降低依賴使用者帳戶之服務中斷的風險,比方說,因使用者離開專案或公司而停用使用者帳戶。

如果您目前將 HMAC 金鑰與使用者帳戶搭配使用,但想要遷移到服務帳戶,請注意以下幾點:

  • 您的專案必須具備服務帳戶,並且具備 HMAC 金鑰。

  • 必須授予服務帳戶所需權限,才能在 Cloud Storage 中執行操作。

    在Storage Object Admin 角色提供使用物件的廣泛權限,不過您可能想要分別建立不同的服務帳戶來執行不同的動作。舉例來說,您可能想將一個服務帳戶用於讀取,其中包含 Storage Object Viewer 角色,並將第二個服務帳戶用於寫入,而這個帳戶具有 Storage Object Creator角色。

  • 您應該測試一下,確認服務帳戶的運作正常,然後再將更新推送至實際工作環境。

  • 將正式環境工作轉移至服務帳戶 HMAC 金鑰後,請檢查下列 Cloud Monitoring 指標,確認與使用者帳戶相關聯的 HMAC 金鑰不再使用:

    指標 說明
    storage.googleapis.com/authn/authentication_count 使用 HMAC 金鑰驗證要求的次數。

    您可以設定下列標籤,追蹤遷移期間仍在使用中的使用者帳戶金鑰:

    • access_id:識別提出要求的存取 ID。您也可以在金鑰輪替期間使用 access_id,觀察流量從一個金鑰移至另一個金鑰的過程。

    • authentication_method:指出金鑰是使用者帳戶金鑰或服務帳戶金鑰。

  • 在您驗證使用者帳戶 (HMAC 金鑰已不再使用) 之後,您應該刪除這些 HMAC 金鑰,這麼可以降低不當存取資料的風險。

  • 如果使用者帳戶已不再用於存取 Cloud Storage 資源,請撤銷其所擁有的 Cloud Storage 存取權。

  • 您可以選擇啟用 restrictAuthTypes 限制,為使用者帳戶 HMAC 金鑰增添一層安全保障。

後續步驟