如何使用 Amazon S3 加密功能保護 S3 物件

許多企業將資料儲存於雲端儲存服務中。雲端儲存服務之所以廣受歡迎,正是因為其卓越的可靠性與高可用性,這兩者對企業而言至關重要。亞馬遜是市場上提供公有雲服務的主要廠商之一,其服務稱為亞馬遜網路服務(AWS)。亞馬遜提供高水準的安全保障,包括用於存取檔案與服務的加密網路連線。加密技術能降低資料在網路傳輸過程中遭攔截的風險。資料對每家企業和每位使用者而言都至關重要。 沒有人希望自己的資料遺失、損毀或遭竊。

正因如此,亞馬遜在其各類雲端儲存服務中提供了資料加密選項。這些雲端儲存選項包含 EBS 儲存卷(一種用於虛擬機器(執行個體)的高效能儲存方案),以及 Amazon S3——這是一項專為儲存備份、檔案庫、應用程式檔案及其他資料所開發的雲端儲存服務。 您可以透過 AWS 加密選項,對 Amazon S3 儲存桶及其內部的檔案進行加密。這篇部落格文章將介紹 Amazon S3 加密相關內容,包括加密類型與設定方法。

直接備份至 AWS S3 | NAKIVO

直接備份至 AWS S3 | NAKIVO

透過簡單的 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 加密?

  1. 請登入 AWS 的網頁介面。您的帳戶必須具備足夠的權限,才能編輯 S3 設定。
  2. 前往 Amazon S3 頁面(連結可能因您的地區和帳戶而異):
    https://s3.console.aws.amazon.com/s3/homeOpening the S3 bucket to configure Amazon S3 encryption
  3. 請選擇您要設定加密設定的儲存桶,或建立一個新的儲存桶。
  4. 在"桶"設定頁面上,點擊 Properties 按一下"分頁"按鈕,然後點擊 Default encryption.Amazon S3 bucket encryption is disabled by default
  5. 加密設定頁面已開啟。預設情況下,S3 儲存桶的加密選項處於停用狀態。
  6. 選擇所需的選項,例如 AES-256。這是使用 Amazon S3 管理金鑰 (SSE-S3) 的伺服器端加密。您可以檢視儲存桶政策。點擊 Save 以儲存該儲存桶的加密設定。這些設定將作為未來新增至此儲存桶之物件的預設 S3 加密設定。Changing default S3 bucket encryption settings
  7. 點擊 Save.
  8. 現在已設定預設加密功能。所有儲存於 S3 儲存桶中的新物件,都將依照設定的配置進行加密。建議您在建立儲存桶時即啟用加密功能。您也可以稍後在儲存桶層級啟用加密功能。不過,若您在事後才設定加密選項,這些設定將不會影響已上傳至儲存桶的未加密檔案。
    S3 encryption at rest is configured
  9. 若要選擇 AWS-KMS 加密,請點選相應的選項。在此情況下,請從下拉式清單中選取一個金鑰。
    Using AWS-KMS for AWS encryption

儲存桶中自訂物件的加密

讓我們來探討如何對已上傳至儲存桶且加密設定設為 .

在 AWS 的網頁介面中開啟您的儲存桶。您可以在 Overview 標籤頁。點擊該物件(檔案或目錄)即可查看目前套用至此物件的加密設定。物件的屬性與權限將顯示於彈出視窗中。如下方截圖所示,上傳的檔案並未加密(加密:無)。

AWS encryption for the file stored in an S3 bucket is set to none

選取一個或多個物件,然後點擊 Actions 然後點擊 Change encryption 以變更 S3 儲存桶中自訂物件的加密設定。

Changing AWS S3 encryption settings for custom files stored in an S3 bucket

在彈出的視窗中,選擇所需的加密類型(例如 AES-256),然後點擊 Save.

Changing AWS S3 encryption settings for custom files stored in an S3 bucket

在確認視窗中,請勾選將受新加密設定影響的選取物件,然後按一下 Change.

Confirmation that all affected S3 objects will change AWS encryption

現在已為選定的物件設定加密。

請注意,在為整個儲存桶設定加密設定後,於啟用加密前已上傳至儲存桶的檔案將保持未加密狀態。若您的 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 備份 以提升您資料的安全性。

試試看 NAKIVO Backup & Replication

試試看 NAKIVO Backup & Replication

立即申請免費試用,全面體驗本解決方案的所有資料保護特點。15 天免費試用。無功能或容量限制。無需提供信用卡資訊。

People also read