將加密資料上傳到 Amazon S3 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將加密資料上傳到 Amazon S3

Amazon S3 同時支援伺服器端加密和用戶端加密。此主題討論伺服器端和用戶端加密之間的差異,並說明將用戶端加密與 Amazon Redshift 搭配使用的步驟。伺服器端加密對 Amazon Redshift 來說是透明的。

伺服器端加密

伺服器端加密是靜態資料加密,也就是說,Amazon S3 會在上傳資料時加密您的資料,並在您存取資料時將資料解密。使用 COPY 命令載入資料表時,與從 Amazon S3 上伺服器端加密或未加密的物件載入時沒有差異。如需伺服器端加密的相關資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用伺服器端加密

用戶端加密

在用戶端加密中,您的用戶端應用程式會管理您的資料的加密、加密金鑰和相關工具。您可以使用用戶端加密將資料上傳至 Amazon S3 儲存貯體,然後使用 COPY 命令載入資料搭配 ENCRYPTED 選項和私有加密金鑰,以提供更高的安全性。

您可以使用封套加密來加密您的資料。利用封套加密,您的應用程式會以獨佔方式處理所有加密。您的私有加密金鑰和未加密的資料永遠不會傳送到 AWS,因此請務必安全地管理加密金鑰。如果您遺失加密金鑰,您將無法取消加密資料,也無法復原加密金鑰 AWS。封套加密會結合快速對稱加密的效能,同時保有非對稱金鑰所提供金鑰管理的更高安全性。一次性使用對稱金鑰 (信封對稱金鑰) 是由您的 Amazon S3 加密用戶端產生,用來加密您的資料,然後該金鑰會由您的根金鑰加密,並隨著您的資料儲存在 Amazon S3。Amazon Redshift 在載入期間存取您的資料時,系統會使用您的實際金鑰來擷取並解密加密的對稱金鑰,然後將資料解密。

若要在 Amazon Redshift 中使用 Amazon S3 用戶端加密資料,請參閱《Amazon Simple Storage Service 使用者指南》使用用戶端加密保護資料來遵循所述步驟,並搭配您使用的其他要求:

  • 對稱加密 – 適用於 Java 的 AWS 開發套件 AmazonS3EncryptionClient 類別使用上述基於對稱金鑰加密的封套加密程序。使用此類別來建立 Amazon S3 用戶端,以上傳用戶端加密的資料。

  • 256 位元 AES 根對稱金鑰 – 根金鑰會加密信封金鑰。您可以將根金鑰傳遞至您的 AmazonS3EncryptionClient 類別執行個體。儲存此金鑰,因為您將需要用它將資料複製到 Amazon Redshift。

  • 用來儲存加密信封金鑰的物件中繼資料 – 依預設,Amazon S3 會將信封金鑰儲存為 AmazonS3EncryptionClient 類別的物件中繼資料。儲存為物件中繼資料的加密信封金鑰會在解密程序期間使用。

注意

若您在初次使用加密 API 時得到密碼套件加密錯誤訊息,您的 JDK 版本可能包含將加密及解密轉換之金鑰長度上限限制為 128 位元的 Java Cryptography Extension (JCE) 管轄權政策檔案。如需有關解決此問題的資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用適用於 Java 的 AWS SDK 指定用戶端加密

如需使用 COPY 命令將用戶端加密檔案載入至您的 Amazon Redshift 資料表的詳細資訊,請參閱從 Amazon S3 載入加密的資料檔案

範例:上傳用戶端加密資料

如需如何使用適用於 Java 的 AWS SDK 上傳用戶端加密資料的範例,請參閱《Amazon Simple Storage Service 使用者指南》中的使用用戶端加密保護資料

第二個選項會顯示在用戶端加密期間要讓資料可以在 Amazon Redshift 中載入,您必須進行的選擇。具體來說,此範例會顯示使用物件中繼資料來儲存加密的信封金鑰和使用 256 位元 AES 根對稱金鑰。

此範例提供使用適用於 Java 的 AWS SDK 建立 256 位元 AES 對稱根金鑰並將其儲存至 檔案的範例程式碼。然後該範例會使用可先在用戶端上先加密樣本資料的 S3 加密用戶端,將物件上傳至 Amazon S3。此範例也會下載物件,並驗證資料一致。