如何使用 Amazon S3 加密功能保護 S3 物件
許多企業將資料儲存於雲端儲存服務中。雲端儲存服務之所以廣受歡迎,正是因為其卓越的可靠性與高可用性,這兩者對企業而言至關重要。亞馬遜是市場上提供公有雲服務的主要廠商之一,其服務稱為亞馬遜網路服務(AWS)。亞馬遜提供高水準的安全保障,包括用於存取檔案與服務的加密網路連線。加密技術能降低資料在網路傳輸過程中遭攔截的風險。資料對每家企業和每位使用者而言都至關重要。 沒有人希望自己的資料遺失、損毀或遭竊。
正因如此,亞馬遜在其各類雲端儲存服務中提供了資料加密選項。這些雲端儲存選項包含 EBS 儲存卷(一種用於虛擬機器(執行個體)的高效能儲存方案),以及 Amazon S3——這是一項專為儲存備份、檔案庫、應用程式檔案及其他資料所開發的雲端儲存服務。 您可以透過 AWS 加密選項,對 Amazon S3 儲存桶及其內部的檔案進行加密。這篇部落格文章將介紹 Amazon S3 加密相關內容,包括加密類型與設定方法。
關於資料加密
資料加密是一種透過編碼資訊來保障資料安全的過程。資料會利用密碼或加密(密碼)金鑰,以及特殊的加密演算法進行編碼。隨後,只要使用正確的密碼或加密(解密)金鑰,即可存取這些加密資料。資料加密的用途在於保護數位資料的機密性,即使未經授權者獲得了該資料的邏輯或實體存取權限。若未經授權者取得加密資料,在沒有金鑰或密碼的情況下,該資料將無法被讀取。 現代加密演算法使得破解長加密金鑰或複雜密碼變得極為困難,甚至幾乎不可能。可使用的加密演算法包括 AES、3DES、RSA、Blowfish 等。加密技術主要分為對稱金鑰加密與非對稱金鑰加密兩大類。
Amazon 建議在 Amazon S3 儲存桶中儲存資料時使用 S3 加密。提出此建議的首要原因在於安全性。 加密能提升安全性和隱私保護等級。然而,雲端儲存資料應進行加密還有另一個原因。Amazon 儲存來自不同國家的用戶資料。有時,若客戶或組織被懷疑違反法律,某個國家可能會要求提交資料以供調查。然而,Amazon 必須遵守其他國家(其公民為 Amazon 客戶的國家)的授權協議與法律,因此可能會產生衝突。
若用戶資料已加密且亞馬遜未持有加密金鑰,則無法將該用戶資料提供給第三方組織或個人(即使提供了加密資料,那也只是一組無用且無法讀取的位元)。 試想一種情況:美國為調查需要,要求取得某位歐洲亞馬遜客戶的資料。這種情況下該如何處理?您可能已經知道,歐洲公民的個人資料受《一般資料保護條例》(GDPR)保護。請參閱白皮書以了解更多相關資訊 《歐盟一般資料保護條例》.
Amazon S3 加密類型
S3 加密是如何運作的?Amazon 為儲存於 Amazon S3 中的資料提供了多種加密類型。S3 是否經過加密?預設情況下,儲存於 S3 儲存桶中的資料並未加密,但您可以設定 AWS S3 加密設定。
您應在回答以下問題後,定義要使用的加密方法:
- 誰負責對資料進行加密和解密?
- 誰負責儲存私鑰?
- 誰負責管理私鑰?
讓我們來看看針對儲存於儲存桶中的 S3 物件,AWS 提供哪些加密方法。
伺服器端加密
伺服器端加密 (SSE) 是最簡單的数据加密選項。所有繁重的加密操作皆在 AWS 雲端環境的伺服器端執行。 您將原始(未加密)資料傳送至 AWS,當資料儲存至雲端儲存時,便會在 AWS 端進行加密。當您需要取回資料時,Amazon 會讀取加密資料,在 Amazon 伺服器端解密所需資料,然後透過網路將未加密的資料傳送給您。此過程對終端使用者而言是透明的。
SSE-S3 這是最簡單的方法——AWS 會負責管理與處理金鑰,以加密您所選定的資料。您無法直接查看該金鑰,也無法手動使用此金鑰來加密或解密資料。此方法採用 AES-256 作為加密演算法。AES(進階加密標準)是一種對稱區塊加密演算法,其加密金鑰長度為 256 位元。如果您完全信任 AWS,請使用此 S3 加密方法。
SSE-KMS 這是一種與 SSE-S3 略有不同的方法。AWS Key Management Service (KMS) 用於在 Amazon 伺服器端對 S3 資料進行加密。資料金鑰由 AWS 管理,但使用者需自行管理 AWS KMS 中的客戶主金鑰 (CMK)。使用 SSE-KMS 加密類型的優勢在於使用者控制權與稽核追蹤。
透過 SSE-C, 加密金鑰由客戶提供,AWS 不會儲存這些金鑰。提供的金鑰會傳遞給 AWS,以處理每個與資料加密或解密相關的請求。使用者必須確保金鑰的安全性。S3 資料加密是在 AWS 伺服器端進行的。僅可使用 HTTPS 連線(不可使用 HTTP)。
客戶端加密
使用 S3 客戶端加密時,所有加密操作均由客戶端負責。在此情況下,資料並非由 AWS 進行加密,而是由使用者端進行加密。在使用者資料中心加密的資料會直接上傳至 AWS。S3 客戶端加密提供兩種選項:主金鑰可儲存於客戶端或伺服器端。 若主密鑰儲存於客戶端,則客戶端須全權負責加密作業。此方法的優勢在於 Amazon 永遠不會知曉用戶的加密密鑰,且資料絕不會以未加密狀態儲存於 Amazon 伺服器上。用戶需在將資料傳送至 Amazon S3 之前進行加密,並在從 Amazon S3 擷取資料後進行解密。
什麼是 Amazon S3 加密客戶端?
Amazon S3 加密客戶端用於在用戶端對資料進行加密。系統會隨機產生一個一次性加密金鑰,並用於在物件層級進行資料加密,這意味著同一個 Amazon S3 儲存桶中可以同時存在加密與未加密的物件。 AmazonS3EncryptionClient 是一個用於 AWS SDK 的公開類別。您可以使用 AWS SDK(適用於 Java、C++、Python、.NET 及其他支援的程式語言),來建立能與 Amazon S3 協作的自訂應用程式,並藉此在客戶端對傳送至 S3 的資料進行加密,以及對從 S3 接收的資料進行解密。
如何設定 AWS S3 加密?
- 請登入 AWS 的網頁介面。您的帳戶必須具備足夠的權限,才能編輯 S3 設定。
- 前往 Amazon S3 頁面(連結可能因您的地區和帳戶而異):
https://s3.console.aws.amazon.com/s3/home
- 請選擇您要設定加密設定的儲存桶,或建立一個新的儲存桶。
- 在"桶"設定頁面上,點擊
Properties按一下"分頁"按鈕,然後點擊Default encryption.
- 加密設定頁面已開啟。預設情況下,S3 儲存桶的加密選項處於停用狀態。
- 選擇所需的選項,例如 AES-256。這是使用 Amazon S3 管理金鑰 (SSE-S3) 的伺服器端加密。您可以檢視儲存桶政策。點擊
Save以儲存該儲存桶的加密設定。這些設定將作為未來新增至此儲存桶之物件的預設 S3 加密設定。
- 點擊
Save. - 現在已設定預設加密功能。所有儲存於 S3 儲存桶中的新物件,都將依照設定的配置進行加密。建議您在建立儲存桶時即啟用加密功能。您也可以稍後在儲存桶層級啟用加密功能。不過,若您在事後才設定加密選項,這些設定將不會影響已上傳至儲存桶的未加密檔案。

- 若要選擇 AWS-KMS 加密,請點選相應的選項。在此情況下,請從下拉式清單中選取一個金鑰。

儲存桶中自訂物件的加密
讓我們來探討如何對已上傳至儲存桶且加密設定設為 無.
在 AWS 的網頁介面中開啟您的儲存桶。您可以在 Overview 標籤頁。點擊該物件(檔案或目錄)即可查看目前套用至此物件的加密設定。物件的屬性與權限將顯示於彈出視窗中。如下方截圖所示,上傳的檔案並未加密(加密:無)。
選取一個或多個物件,然後點擊 Actions 然後點擊 Change encryption 以變更 S3 儲存桶中自訂物件的加密設定。
在彈出的視窗中,選擇所需的加密類型(例如 AES-256),然後點擊 Save.
在確認視窗中,請勾選將受新加密設定影響的選取物件,然後按一下 Change.
現在已為選定的物件設定加密。
請注意,在為整個儲存桶設定加密設定後,於啟用加密前已上傳至儲存桶的檔案將保持未加密狀態。若您的 S3 儲存桶中含有大量物件,可能難以找出並選取所有必須加密的未加密物件。 若要在已啟用加密功能的儲存桶中選取未加密物件,您可以使用 Amazon S3 Inventory 或 AWS CLI。
您應先識別出未加密的物件,然後將這些物件重新上傳,以便使用為整個儲存桶設定的預設 S3 儲存桶加密等級進行加密。 若您不希望在現有儲存桶(例如 bucket1)中搜尋未加密的 S3 物件,可建立一個新儲存桶(bucket2),將 bucket1 中的所有檔案複製到 bucket2,然後再將所有檔案從 bucket2 複製回 bucket1。
您可透過 AWS CLI 重新寫入檔案來複製未加密的物件 copy 透過定義加密方法來執行該指令,例如: --sse 可在不建立新儲存桶的情況下啟用 SSE-S3 128 位元加密:
aws s3 cp s3://mybucket/myfile.zip s3://mybucket/myfile.zip --sse
重新寫入後,檔案將被加密。請注意,檔案的屬性(例如建立時間和修改時間)在重新寫入後將會改變。您的應用程式若能讀取這些屬性(檔案建立/最後修改的日期和時間),並利用這些資訊來處理儲存於 Amazon S3 儲存桶中的檔案,在檔案重新寫入後,其運作行為可能會與預期不符。
若您為提升成本效益而在 AWS S3 儲存桶中啟用了生命週期管理選項,可能會發生某些問題。 例如,您可以設定生命週期配置,以刪除 6 個月前建立或修改的檔案。舊檔案會自動刪除,雲端儲存空間的使用量隨之減少,您支付的雲端儲存費用也將降低。當 最後修改時間 當即將被刪除的舊檔案其時間戳記(最後修改日期/時間)被重新寫入時,生命週期管理特點會將此檔案識別為近期建立的檔案,且該檔案在一段時間內(例如如上所述的 6 個月)不應被刪除。結果導致儲存桶中存放更多檔案,進而造成更高成本。
若啟用版本控制功能,系統會為物件建立一個新的加密版本。該物件的先前版本則保持未加密狀態。
透過 AWS CLI 上傳物件
AWS CLI 在以下使用情境中也能派上用場:當您需要使用加密選項將檔案複製到 Amazon S3 或從 Amazon S3 複製檔案時。您也可以使用此命令列介面,在同一個 S3 儲存桶內複製物件,或將物件從一個儲存桶複製到另一個儲存桶。若儲存桶的預設加密設定與上傳檔案必須使用的加密設定不同,您可以透過 CLI 設定上傳至儲存桶的檔案加密選項。 以下是於 bash 中使用 AWS CLI 指令的範例。
將檔案從本地端複製至 AWS S3 儲存桶,並設定伺服器端加密 (SSE-S3 加密):
aws s3 cp /directory/file-name s3://bucket-name/file-encrypted --sse AES256
將檔案從 AWS S3 複製並解密至本機磁碟:
aws s3 cp s3://bucket-name/file-encrypted /directory/file-name
使用 SSE-KMS 加密功能,將檔案從本地磁碟上傳並加密至 S3 儲存桶:
aws s3 cp /directory/file-name s3://bucket-name/file-encrypted --sse aws:kms
從 S3 儲存桶下載並解密檔案至本機磁碟:
aws s3 cp s3://bucket-name/file-encrypted /directory/file-name
結論
Amazon S3 加密功能可協助您保護儲存在 AWS S3 儲存桶中的雲端資料,對於敏感資料而言,這點尤為重要。AWS S3 加密可在 Amazon 的伺服器端或客戶的客戶端進行。密鑰可儲存於伺服器端或客戶端。如果您考慮對即將儲存於 S3 儲存桶中的物件使用 Amazon S3 加密,請在建立儲存桶時啟用加密功能。 若您已使用某個儲存桶,且其中儲存的物件尚未加密,您可以為這些物件啟用加密功能。不過,在此情況下,有幾項注意事項需特別留意。
採用加密是提升安全性並防止第三方存取資料的明智之舉。除了使用 AWS 加密功能外,也請考慮執行 AWS S3 備份與 AWS EC2 備份 以提升您資料的安全性。



