本頁說明如何在 Cloud Storage 使用自己的加密金鑰 (亦稱為「客戶提供的加密金鑰」)。如要瞭解 Cloud Storage 中的其他加密選項,請參閱「資料加密選項」。
產生自己的加密金鑰
產生以 Base64 編碼的 AES-256 加密金鑰的方法有很多種。以下列舉幾個範例:
C++
詳情請參閱 Cloud Storage C++ API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱 Cloud Storage C# API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱 Cloud Storage Go API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱 Cloud Storage Java API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
詳情請參閱 Cloud Storage PHP API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱 Cloud Storage Python API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
使用加密金鑰上傳
如何使用客戶提供的加密金鑰上傳物件:
控制台
您無法使用 Google Cloud 主控台,透過客戶提供的加密金鑰上傳物件。請改用 Google Cloud CLI 或用戶端程式庫。
指令列
使用 gcloud storage cp 指令並加上 --encryption-key 旗標:
gcloud storage cp SOURCE_DATA gs://BUCKET_NAME/OBJECT_NAME --encryption-key=YOUR_ENCRYPTION_KEY
其中:
SOURCE_DATA是您要加密的資料來源位置。這可以是cp指令支援的任何來源位置。例如本機檔案 (如Desktop/dogs.png) 或其他 Cloud Storage 物件 (如gs://my-bucket/pets/old-dog.png)。BUCKET_NAME是這項複製指令的目的地 bucket 名稱。例如:my-bucket。OBJECT_NAME是最終加密物件的名稱。例如:pets/new-dog.png。YOUR_ENCRYPTION_KEY是用於加密上傳物件的 AES-256 金鑰。
用戶端程式庫
C++
詳情請參閱 Cloud Storage C++ API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱 Cloud Storage C# API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱 Cloud Storage Go API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱 Cloud Storage Java API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
詳情請參閱 Cloud Storage PHP API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱 Cloud Storage Python API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL透過POST物件要求呼叫 JSON API:curl -X POST --data-binary @OBJECT \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: OBJECT_CONTENT_TYPE" \ -H "x-goog-encryption-algorithm: AES256" \ -H "x-goog-encryption-key: YOUR_ENCRYPTION_KEY" \ -H "x-goog-encryption-key-sha256: HASH_OF_YOUR_KEY" \ "https://storage.googleapis.com/upload/storage/v1/b/BUCKET_NAME/o?uploadType=media&name=OBJECT_NAME"
其中:
OBJECT是您要上傳的物件路徑。例如:Desktop/dogs.png。OBJECT_CONTENT_TYPE是物件的內容類型。例如:image/png。YOUR_ENCRYPTION_KEY是用於加密上傳物件的 AES-256 金鑰。HASH_OF_YOUR_KEY是 AES-256 金鑰的 SHA-256 雜湊。BUCKET_NAME是您要向其上傳物件的值區名稱。例如:my-bucket。OBJECT_NAME是您要上傳的物件名稱 (經過網址編碼)。例如pets/dog.png,網址編碼為pets%2Fdog.png。
如要進一步瞭解特定加密的標頭,請參閱加密要求標頭。
XML API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL透過PUT物件要求呼叫 XML API:curl -X -i PUT --data-binary @OBJECT \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: OBJECT_CONTENT_TYPE" \ -H "x-goog-encryption-algorithm: AES256" \ -H "x-goog-encryption-key: YOUR_ENCRYPTION_KEY" \ -H "x-goog-encryption-key-sha256: HASH_OF_YOUR_KEY" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME"
其中:
OBJECT是您要上傳的物件路徑。例如:Desktop/dogs.png。OBJECT_CONTENT_TYPE是物件的內容類型。例如:image/png。YOUR_ENCRYPTION_KEY是用於加密上傳物件的 AES-256 金鑰。HASH_OF_YOUR_KEY是 AES-256 金鑰的 SHA-256 雜湊。BUCKET_NAME是您要向其上傳物件的值區名稱。例如:my-bucket。OBJECT_NAME是您要上傳的物件名稱 (經過網址編碼)。例如pets/dog.png,網址編碼為pets%2Fdog.png。
如要進一步瞭解特定加密的標頭,請參閱加密要求標頭。
下載您已加密的物件
如何下載儲存在 Cloud Storage 並以客戶提供的加密金鑰進行加密的物件:
控制台
您無法透過 Google Cloud 主控台下載以客戶提供的加密金鑰加密的物件。請改用 Google Cloud CLI 或用戶端程式庫。
指令列
使用 gcloud storage cp 指令並加上 --decryption-keys 旗標:
gcloud storage cp gs://BUCKET_NAME/OBJECT_NAME OBJECT_DESTINATION --decryption-keys=YOUR_ENCRYPTION_KEY
其中:
BUCKET_NAME是包含要下載物件的值區名稱。例如:my-bucket。OBJECT_NAME是您要下載的物件名稱。例如:pets/dog.png。OBJECT_DESTINATION是您要儲存物件的位置。例如:Desktop。YOUR_ENCRYPTION_KEY是指上傳物件時用於加密物件的 AES-256 金鑰。
用戶端程式庫
C++
詳情請參閱 Cloud Storage C++ API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱 Cloud Storage C# API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱 Cloud Storage Go API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱 Cloud Storage Java API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
詳情請參閱 Cloud Storage PHP API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱 Cloud Storage Python API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL透過GET物件要求呼叫 JSON API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-encryption-algorithm: AES256" \ -H "x-goog-encryption-key: YOUR_ENCRYPTION_KEY" \ -H "x-goog-encryption-key-sha256: HASH_OF_YOUR_KEY" \ -o "SAVE_TO_LOCATION" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME?alt=media"
其中:
YOUR_ENCRYPTION_KEY是用於加密物件的 AES-256 金鑰。HASH_OF_YOUR_KEY是 AES-256 金鑰的 SHA-256 雜湊。SAVE_TO_LOCATION是您要儲存物件的位置。例如:Desktop/dog.png。BUCKET_NAME是您要從中下載物件的值區名稱。例如:my-bucket。OBJECT_NAME是要下載物件的 URL 編碼名稱。例如pets/dog.png,網址編碼為pets%2Fdog.png。
如要進一步瞭解特定加密的標頭,請參閱加密要求標頭。
XML API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL透過GET物件要求呼叫 XML API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-encryption-algorithm: AES256" \ -H "x-goog-encryption-key: YOUR_ENCRYPTION_KEY" \ -H "x-goog-encryption-key-sha256: HASH_OF_YOUR_KEY" \ -o "SAVE_TO_LOCATION" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME"
其中:
YOUR_ENCRYPTION_KEY是用於加密物件的 AES-256 金鑰。HASH_OF_YOUR_KEY是 AES-256 金鑰的 SHA-256 雜湊。SAVE_TO_LOCATION是您要儲存物件的位置。例如:Desktop/dog.png。BUCKET_NAME是您要從中下載物件的值區名稱。例如:my-bucket。OBJECT_NAME是要下載物件的 URL 編碼名稱。例如pets/dog.png,網址編碼為pets%2Fdog.png。
如要進一步瞭解特定加密的標頭,請參閱加密要求標頭。
輪替加密金鑰
如何輪替客戶提供的加密金鑰:
控制台
您無法使用 Google Cloud 控制台輪替客戶提供的加密金鑰。請改用 Google Cloud CLI 或用戶端程式庫。
指令列
使用 gcloud storage objects update 指令並加上適當的旗標:
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --encryption-key=NEW_KEY --decryption-keys=OLD_KEY
其中:
BUCKET_NAME是包含要輪替金鑰物件的值區名稱。例如:my-bucket。OBJECT_NAME是您要輪替其金鑰的物件名稱。例如:pets/dog.png。NEW_KEY是您要用來加密物件的新客戶提供加密金鑰。OLD_KEY是目前用於加密物件的客戶提供加密金鑰。
用戶端程式庫
C++
詳情請參閱 Cloud Storage C++ API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
C#
詳情請參閱 Cloud Storage C# API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Go
詳情請參閱 Cloud Storage Go API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
詳情請參閱 Cloud Storage Java API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
詳情請參閱 Cloud Storage Node.js API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
PHP
詳情請參閱 Cloud Storage PHP API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
詳情請參閱 Cloud Storage Python API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Ruby
詳情請參閱 Cloud Storage Ruby API 參考說明文件。
如要驗證 Cloud Storage,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
REST API
JSON API
安裝並初始化 gcloud CLI,以便為
Authorization標頭產生存取權杖。使用
cURL透過POST物件要求呼叫 JSON API:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Length: 0" \ -H "x-goog-encryption-algorithm: AES256" \ -H "x-goog-encryption-key: NEW_ENCRYPTION_KEY" \ -H "x-goog-encryption-key-sha256: HASH_OF_NEW_KEY" \ -H "x-goog-copy-source-encryption-algorithm: AES256" \ -H "x-goog-copy-source-encryption-key: OLD_ENCRYPTION_KEY" \ -H "x-goog-copy-source-encryption-key-sha256: HASH_OF_OLD_KEY" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME/rewriteTo/b/BUCKET_NAME/o/OBJECT_NAME"
其中:
NEW_ENCRYPTION_KEY是用於加密物件的新 AES-256 金鑰。HASH_OF_NEW_KEY是新 AES-256 金鑰的 SHA-256 雜湊。OLD_ENCRYPTION_KEY是用於加密物件的目前 AES-256 金鑰。HASH_OF_OLD_KEY是 AES-256 金鑰的目前 SHA-256 雜湊。BUCKET_NAME是包含相關物件的值區名稱。例如:my-bucket。OBJECT_NAME是您要輪替其金鑰的物件名稱,並經過網址編碼。例如pets/dog.png,網址編碼為pets%2Fdog.png。
如要進一步瞭解特定加密的標頭,請參閱加密要求標頭。
XML API
XML API 不支援透過重寫物件來輪替客戶提供的加密金鑰。如要使用 XML API 將新的客戶提供金鑰套用至物件,請按照下列步驟操作:
後續步驟
進一步瞭解客戶提供的加密金鑰。