本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將加密資料上傳到 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 使用者指南》的使用用戶端加密保護資料來遵循所述步驟,並搭配您使用的其他要求:
-
對稱加密 – SDK適用於 Java AWS
AmazonS3EncryptionClient
類別的 使用前面所述的信封加密,這是以對稱金鑰加密為基礎。使用此類別來建立 Amazon S3 用戶端,以上傳用戶端加密的資料。 -
256 位元AES根對稱金鑰 – 根金鑰會加密信封金鑰。您可以將根金鑰傳遞至您的
AmazonS3EncryptionClient
類別執行個體。儲存此金鑰,因為您將需要用它將資料複製到 Amazon Redshift。 -
用來儲存加密信封金鑰的物件中繼資料 – 依預設,Amazon S3 會將信封金鑰儲存為
AmazonS3EncryptionClient
類別的物件中繼資料。儲存為物件中繼資料的加密信封金鑰會在解密程序期間使用。
注意
如果您API第一次使用加密時收到密碼加密錯誤訊息,則 版本的 Java 密碼編譯延伸模組 (JCE) 司法管轄區政策檔案JDK可能會將加密和解密轉換的金鑰長度上限限制為 128 位元。如需解決此問題的相關資訊,請參閱 Amazon Simple Storage Service 使用者指南 中的使用適用於 Java 的 AWS SDK 指定用戶端加密。
如需使用 COPY命令將用戶端加密檔案載入 Amazon Redshift 資料表的相關資訊,請參閱 從 Amazon S3 載入加密的資料檔案。
範例:上傳用戶端加密資料
如需如何使用適用於 Java 的 AWS SDK上傳用戶端加密資料的範例,請參閱 Amazon Simple Storage Service 使用者指南 中的使用用戶端加密保護資料。
第二個選項會顯示在用戶端加密期間要讓資料可以在 Amazon Redshift 中載入,您必須進行的選擇。具體來說,範例顯示使用物件中繼資料來存放加密的信封金鑰,以及使用 256 位元AES根對稱金鑰。
此範例提供範例程式碼, AWS SDK使用 for Java 建立 256 位元AES對稱根金鑰,並將其儲存至 檔案。然後該範例會使用可先在用戶端上先加密樣本資料的 S3 加密用戶端,將物件上傳至 Amazon S3。此範例也會下載物件,並驗證資料一致。