這個頁面主要說明客戶提供的加密金鑰。如需其他加密選項,請參閱「資料加密選項」。
總覽
除了標準 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 雜湊就會隨附於中繼資料。
重寫行為
如果您重寫使用客戶提供的加密金鑰加密的物件,但未提供加密重寫物件的金鑰,會發生下列情況:
如果在要求中加入適當的解密金鑰,重寫的物件會使用目的地值區的預設 Cloud Key Management Service 加密金鑰加密,如果沒有這類金鑰,則會使用標準 Cloud Storage 加密。
如果要求中未包含適當的解密金鑰,系統會傳回錯誤。
HTTPS 檢查
為了確保您的資料在進行讀寫作業時能透過網際網路安全傳輸,請使用傳輸層安全標準,一般稱為 TLS 或 HTTPS。提供加密金鑰時請務必採用 TLS。如果您不小心透過未加密的 (HTTP) 連線來使用加密金鑰,攻擊者可能就會趁機攔截您的金鑰。因此,如果您未使用加密連線,Cloud Storage API 會傳回錯誤訊息警告您金鑰可能會被盜用。萬一真的遇到這種情況,請立即輪替使用金鑰。
限制
下文說明使用客戶提供的加密金鑰時有哪些限制:
您無法透過 Google Cloud 主控台下載以客戶提供的加密金鑰進行加密的物件。同樣地,如果您透過Google Cloud 主控台上傳物件,也沒辦法使用客戶提供的加密金鑰來加密該物件。
Storage Transfer Service 和 Cloud Dataflow 不支援以客戶提供的加密金鑰加密的物件。
您只能為個別物件設定客戶提供的加密金鑰;無法針對值區設定預設客戶提供的加密金鑰。
如果您對使用客戶提供的加密金鑰進行加密的物件執行
compose
作業,則元件物件也必須使用同一組金鑰加密,且您必須透過撰寫要求來提供金鑰。產生的複合物件將以同樣的金鑰加密。提供以客戶提供的加密金鑰加密的物件時,Cloud Storage 會忽略與物件相關聯的
Cache-Control
中繼資料,並提供Cache-Control
設為private, max-age=0
的物件。
透過 REST API 使用加密金鑰
如果您使用客戶提供的加密金鑰並直接採用 JSON 或 XML 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 不支援。如需金鑰輪替範例,請參閱輪替加密金鑰一文。
後續步驟
- 瞭解如何使用客戶提供的加密金鑰。