將加密資料上傳到 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 加密用戶端會產生對稱金鑰 (信封對稱金鑰) 來加密您的資料,然後該金鑰會由根金鑰加密,並與資料一 one-time-use 起存放在 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 簡單儲存服務使用者指南中的使用 AWS SDK for Java 指定用戶端加密

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

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

如需如何使用 Java AWS SDK 上傳用戶端加密資料的範例,請參閱 Amazon 簡單儲存服務使用者指南中的使用用戶端加密保護資料

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

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