客戶提供的加密金鑰

設定方式

這個頁面主要說明客戶提供的加密金鑰。如需其他加密選項,請參閱「資料加密選項」。

總覽

除了標準 Cloud Storage 加密之外,您還可以選擇提供以標準 Base64 編碼的專屬 AES-256 加密金鑰,也就是「客戶提供的加密金鑰」。不過如果您使用的是客戶提供的加密金鑰,Cloud Storage 就不會將您的金鑰永久儲存在自家伺服器上,也不會幫您管理。

因此,您必須為每次 Cloud Storage 作業提供金鑰,而且一旦作業完成,系統就會將這組金鑰從 Cloud Storage 伺服器中清除。Cloud Storage 只會儲存金鑰的加密編譯雜湊值,日後會以該雜湊來驗證要求。金鑰無法從這個雜湊復原,雜湊也不能用來解密您的資料。

建議您將每個金鑰備份到安全位置,並採取預防措施,確保金鑰不會與不受信任的對象共用。如果含有加密金鑰的任何檔案或機器遭到入侵,請立即輪替使用金鑰,確保所有使用遭入侵金鑰加密的物件安全無虞。

什麼時候會使用金鑰?

將客戶提供的加密金鑰套用於物件時,Cloud Storage 會在加密下列項目時使用金鑰:

  • 物件資料。
  • 物件的 CRC32C 總和檢查碼。
  • 物件的 MD5 雜湊。

標準 Cloud Storage 加密功能會用來加密物件的剩餘中繼資料,包括物件的名稱。這讓您可以讀取和更新一般中繼資料,以及列出、覆寫和刪除物件,而無需客戶提供的加密金鑰。但是,您必須要有足夠的權限才能執行所有操作。

例如,如果物件是使用客戶提供的加密金鑰進行加密,則必須使用該金鑰對物件執行操作,例如下載或將其移動。如果您嘗試讀取物件中繼資料但未提供金鑰,則只會收到中繼資料(例如物件名稱和 Content-Type ),而無法取得物件的 CRC32C 總和檢查碼或 MD5 雜湊。如果您在物件中繼資料要求中提供金鑰,則物件的 CRC32C 總和檢查碼和 MD5 雜湊就會隨附於中繼資料。

重寫行為

如果您重寫使用客戶提供的加密金鑰加密的物件,但未提供加密重寫物件的金鑰,會發生下列情況:

HTTPS 檢查

為了確保您的資料在進行讀寫作業時能透過網際網路安全傳輸,請使用傳輸層安全標準,一般稱為 TLS 或 HTTPS。提供加密金鑰時請務必採用 TLS。如果您不小心透過未加密的 (HTTP) 連線來使用加密金鑰,攻擊者可能就會趁機攔截您的金鑰。因此,如果您未使用加密連線,Cloud Storage API 會傳回錯誤訊息警告您金鑰可能會被盜用。萬一真的遇到這種情況,請立即輪替使用金鑰

限制

下文說明使用客戶提供的加密金鑰時有哪些限制:

  • 您無法透過 Google Cloud 主控台下載以客戶提供的加密金鑰進行加密的物件。同樣地,如果您透過Google Cloud 主控台上傳物件,也沒辦法使用客戶提供的加密金鑰來加密該物件。

  • Storage Transfer ServiceCloud Dataflow 不支援以客戶提供的加密金鑰加密的物件。

  • 您只能為個別物件設定客戶提供的加密金鑰;無法針對值區設定預設客戶提供的加密金鑰。

  • 如果您對使用客戶提供的加密金鑰進行加密的物件執行 compose 作業,則元件物件也必須使用同一組金鑰加密,且您必須透過撰寫要求來提供金鑰。產生的複合物件將以同樣的金鑰加密。

  • 提供以客戶提供的加密金鑰加密的物件時,Cloud Storage 會忽略與物件相關聯的 Cache-Control 中繼資料,並提供 Cache-Control 設為 private, max-age=0 的物件。

透過 REST API 使用加密金鑰

如果您使用客戶提供的加密金鑰並直接採用 JSONXML API,則必須提供 AES-256 金鑰和金鑰的 SHA256 雜湊這兩項資料。請妥善保管 AES-256 金鑰及金鑰的 SHA256 雜湊。Cloud Storage 會將您金鑰的 SHA256 雜湊儲存於物件的中繼資料,供您日後擷取。Cloud Storage 及其他人都無法使用這個 SHA256 雜湊來解密您的資料。儲存該雜湊是為了要識別用來加密特定物件的唯一 AES-256 金鑰。

要求標頭

在您的 JSON 或 XML 要求中納入以下 HTTP 標頭:

標頭名稱 說明
x-goog-encryption-algorithm 字串 要使用的加密演算法。您必須使用值 AES256
x-goog-encryption-key 字串 您 AES-256 加密金鑰的 RFC 4648 Base64 編碼字串。
x-goog-encryption-key-sha256 字串 加密金鑰 SHA256 雜湊的 RFC 4648 Base64 編碼字串。

如果您透過 JSON API 執行重寫作業,以上所列的標頭將用於加密目標物件,而下列標頭用於解密來源物件:

標頭名稱 說明
x-goog-copy-source-encryption-algorithm 字串 要使用的加密演算法。您必須使用值 AES256
x-goog-copy-source-encryption-key 字串 您 AES-256 加密金鑰的 RFC 4648 Base64 編碼字串。
x-goog-copy-source-encryption-key-sha256 字串 來源物件加密金鑰 SHA256 雜湊的 RFC 4648 Base64 編碼字串。

回應

JSON

使用 JSON API 時,系統會在回應主體中傳回客戶提供的加密金鑰中繼資料,其中包含下列屬性:

屬性名稱 說明
customerEncryption 物件 用於要求的加密相關資訊。
customerEncryption.encryptionAlgorithm 字串 使用的加密演算法,一律包含值 AES256
customerEncryption.keySha256 字串 加密金鑰 SHA256 雜湊的 RFC 4648 Base64 編碼字串。您可使用這個 SHA256 雜湊來識別解密物件需要的唯一 AES-256 加密金鑰;請務必妥善保管該雜湊。

XML

使用 XML API 時,回應包含以下標頭:

標頭名稱 說明
x-goog-encryption-algorithm 字串 使用的加密演算法,一律包含值 AES256
x-goog-encryption-key-sha256 字串 加密金鑰 SHA256 雜湊的 RFC 4648 Base64 編碼字串。您可使用這個 SHA256 雜湊來識別解密物件需要的唯一 AES-256 加密金鑰;請務必妥善保管該雜湊。

如遇下列情況會傳回 HTTP 400 錯誤:

  • 您使用客戶提供的加密金鑰上傳物件,並嘗試在未提供金鑰的情況下對物件執行其他作業 (除了要求或更新大部分的中繼資料或刪除物件以外的作業)。
  • 您使用客戶提供的加密金鑰上傳物件,並嘗試以不正確的金鑰對物件執行其他作業。
  • 您未使用客戶提供的加密金鑰來上傳物件,但嘗試以客戶提供的加密金鑰來對物件執行其他作業。
  • 您指定了無效的加密演算法、金鑰或 SHA256 雜湊。

使用 gcloud storage 的加密金鑰

Google Cloud CLI 支援使用客戶提供的加密金鑰。 使用 gcloud CLI 和客戶提供的加密金鑰時,請注意下列事項:

  • 在指令中,指定為加密金鑰的金鑰會同時做為加密金鑰,以及視需要做為解密金鑰。

  • 您最多可指定 100 個解密金鑰,這些金鑰只會用來解密物件

  • 解密時,系統會計算所有提供的加密和解密金鑰的 SHA256 雜湊,並比對物件中繼資料中的 SHA256 雜湊,選取要用於特定物件的正確金鑰。

  • 為現有物件新增或輪替客戶提供的加密金鑰時,系統會重寫物件做為要求的一部分。即使是 gcloud storage objects update 指令也適用這項規則。

  • 如果物件使用客戶提供的金鑰加密,則可傳回 MD5 或 CRC32C 雜湊的清單指令,會對每個這類物件執行額外的中繼資料 GET 要求。這些額外要求會大幅減緩列出物件的速度,比列出以標準 Cloud Storage 加密機制加密的物件慢得多。

  • 如果加密金鑰在寫入或複製作業部分完成時可能或確實發生變更,例如在強制結束或發生網路逾時後重新執行 cp 上傳作業,作業就會重新啟動,確保目的地物件是以新金鑰寫入。

加密金鑰輪替

如果物件使用客戶提供的加密金鑰進行加密,您可以重寫物件來輪替該物件的金鑰。JSON API 支援重寫作業,但 XML API 不支援。如需金鑰輪替範例,請參閱輪替加密金鑰一文。

後續步驟