自動修復未加密的 Amazon RDS 資料庫執行個體和叢集 - AWS 方案指引

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

自動修復未加密的 Amazon RDS 資料庫執行個體和叢集

由阿傑·拉瓦特(AWS)和喬希·喬希(AWS)創建

環境:PoC 或試點

技術:安全性、身分識別、合規性;資料庫

AWS 服務:AWS Config;AWS KMS;AWS Identity and Access Management;AWS Systems Manager;Amazon RDS

Summary

此模式說明如何使用 AWS Config、AWS Systems Manager 手冊和 AWS Key Management Service (AWS KMS) 金鑰,自動修復 Amazon Web Services (AWS) 上未加密的 Amazon 關聯式資料庫服務 (Amazon RDS) 資料庫執行個體和叢集。

加密的 RDS 資料庫執行個體可保護您的資料,防止未經授權存取基礎儲存體,進而提供額外的資料保護層。您可以使用 Amazon RDS 加密來增加 AWS 雲端中部署之應用程式的資料保護,並滿足靜態加密的合規要求。您可以在建立 RDS 資料庫執行個體時為其啟用加密,但在建立之後則無法啟用加密。不過,您可以建立資料庫執行個體的快照,然後建立該快照的加密副本,將加密新增至未加密的 RDS 資料庫執行個體。然後,您可以從加密的快照還原資料庫執行個體,以取得原始資料庫執行個體的加密副本。

此模式使用 AWS Config 規則來評估 RDS 資料庫執行個體和叢集。它會使用 AWS Systems Manager 執行手冊 (定義要在不合規的 Amazon RDS 資源上執行的動作) 和 AWS KMS 金鑰來加密資料庫快照來套用修復。然後,它會強制執行服務控制政策 (SCP),以防止在未加密的情況下建立新的資料庫執行個體和叢集。

此模式的程式碼在中提供GitHub

先決條件和限制

先決條件

  • 有效的 AWS 帳戶

  • 此病毒碼的GitHub 來源程式碼儲存庫中的檔案已下載至您的電腦

  • 未加密的 RDS 資料庫執行個體或叢集

  • 用於加密 RDS 資料庫執行個體和叢集的現有 AWS KMS 金鑰

  • 更新 KMS 金鑰資源原則的存取權

  • AWS 組態已在您的 AWS 帳戶中啟用 (請參閱 AWS 文件中的 AWS Config 入門)

限制

  • 您只能在建立 RDS 資料庫執行個體時啟用加密,而不能在建立之後啟用加密。

  • 未加密資料庫執行個體不可以有加密僅供讀取複本,加密資料庫執行個體也不可以有未加密僅供讀取複本。

  • 您無法將未加密的備份或快照還原至已加密的資料庫執行個體。

  • 大多數資料庫執行個體類別可以使用 Amazon RDS 加密。如需例外清單,請參閱 Amazon RDS 文件中的加密 Amazon RDS 資源

  • 若要將加密快照從一個 AWS 區域複製到另一個區域,您必須在目的地 AWS 區域中指定 KMS 金鑰。這是因為 KMS 金鑰專屬於建立它們所在的 AWS 區域。

  • 在整個複製過程中來源快照仍會保持加密狀態。Amazon RDS 在複製過程中使用信封加密來保護資料。如需詳細資訊,請參閱 AWS KMS 文件中的信封加密

  • 您無法解密加密已加密的資料庫執行個體。不過,您可以從加密的資料庫執行個體匯出資料,然後將資料匯入未加密的資料庫執行個體。

  • 只有在確定不再需要使用 KMS 金鑰時,才應刪除該金鑰。如果您不確定,請考慮停用 KMS 金鑰,而不是刪除它。如果您稍後需要再次使用已停用的 KMS 金鑰,可以重新啟用該金鑰,但無法復原已刪除的 KMS 金鑰。 

  • 如果您不選擇保留自動備份,則會刪除與資料庫執行個體位於相同 AWS 區域的自動備份。刪除資料庫執行個體後,便無法復原自動備份內容。

  • 您的自動備份會保留在您刪除資料庫執行個體時在資料庫執行個體上設定的保留期間內。無論您是否選擇建立最終資料庫快照,都會依照此一設定保留期間。

  • 如果啟用自動修復,此解決方案會加密具有相同 KMS 金鑰的所有資料庫。

架構

下圖說明 AWS CloudFormation 實作的架構。請注意,您也可以使用 AWS Cloud Development Kit (AWS CDK) 來實作此模式。

用於修復未加密的 Amazon RDS CloudFormation 執行個體的 AWS 實作。

工具

工具

  • AWS 可 CloudFormation協助您自動設定 AWS 資源。它使您可以使用模板文件來創建和刪除資源集合作為一個單元(堆棧)一起。

  • AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可在程式碼中定義雲端基礎設施,並使用熟悉的程式設計語言進行佈建。

AWS 服務和功能

  • AWS Config 會追蹤 AWS 資源的組態及其與其他資源的關係。它也可以評估這些 AWS 資源的合規性。此服務使用可設定的規則,根據所需的組態評估 AWS 資源。您可以針對常見的合規案例使用一組 AWS Config 受管規則,也可以為自訂案例建立自己的規則。當發現 AWS 資源不合規時,您可以透過 AWS Systems Manager 工作手冊指定修復動作,並選擇性地透過 Amazon Simple Notification Service (Amazon SNS) 主題傳送警示。換句話說,您可以將修復動作與 AWS Config 規則建立關聯,然後選擇自動執行它們以解決不合規的資源,而無需手動介入。如果資源在自動修復之後仍不合規,您可以將規則設定為再次嘗試自動修復。

  • Amazon Relational Database Service (Amazon RDS) 可讓您更輕鬆地在雲端中設定、操作和擴展關聯式資料庫。Amazon RDS 的基本建置區塊是資料庫執行個體,這是 AWS 雲端中隔離的資料庫環境。Amazon RDS 提供一系列針對不同關聯式資料庫使用案例進行優化的執行個體類型。執行個體類型包含 CPU、記憶體、儲存和網路容量的各種組合,可讓您彈性地為資料庫選擇適當的資源組合。每個執行個體類型都包含多種執行個體大小,可讓您根據目標工作負載的需求擴展資料庫。

  • AWS Key Management Service (AWS KMS) 是一項受管服務,可讓您輕鬆建立和控制 AWS KMS 金鑰,以加密資料。KMS 金鑰是根金鑰的邏輯表示法。KMS 金鑰包含金鑰 ID、建立日期、說明和金鑰狀態等中繼資料。

  • AWS Identity and Access Management (IAM) 可透過控制誰經過身份驗證和授權使用 AWS 資源,協助您安全地管理對 AWS 資源的存取。

  • 服務控制原則 (SCP) 可讓您集中控制組織中所有帳戶的最大可用權限。SCP 可協助您確保帳戶符合組織的存取控制準則。SCP 不會影響管理帳戶中的使用者或角色。它們只會影響組織中的成員帳戶。在沒有將政策對帳戶的影響進行徹底測試之前,我們強烈建議您不要將 SCP 連接到組織的根帳戶。而是建立一個組織單位 (OU),您可以將您的帳戶一次移到一個帳戶中,或至少以少量的方式移動帳戶,以確保您不會意外將使用者鎖定在金鑰服務之外。

Code

此模式的原始程式碼和範本可在GitHub 儲存庫中取得。該模式提供兩種實作選項:您可以部署 AWS CloudFormation 範本來建立修復角色,以加密 RDS 資料庫執行個體和叢集,或使用 AWS CDK。存放庫具有這兩個選項的單獨資料夾。

史詩」區段提供部署 CloudFormation 範本的 step-by-step 指示。如果您想要使用 AWS CDK,請依照儲存庫中 README.md 檔案中的指示操作。 GitHub

最佳實務

  • 啟用靜態和傳輸中的資料加密。

  • 在所有帳戶和 AWS 區域啟用 AWS 組態。

  • 記錄對所有資源類型的配置變更。

  • 定期輪替您的 IAM 登入資料。

  • 利用 AWS Config 的標記功能,讓管理、搜尋和篩選資源變得更加容易。

史诗

任務描述所需技能

下載 CloudFormation 範本。

GitHub 存放庫下載unencrypted-to-encrypted-rds.template.json檔案。

DevOps 工程師

建立 CloudFormation 堆疊。

  1. 登入 AWS 管理主控台,然後在 https://console.aws.amazon.com/cloudformation/ 開啟 CloudFormation 主控台。 

  2. 啟動unencrypted-to-encrypted-rds.template.json範本以建立新堆疊。

如需部署範本的詳細資訊,請參閱 AWS CloudFormation 文件

DevOps 工程師

檢閱 CloudFormation 參數和值。

  1. 檢閱堆疊詳細資料並根據您的環境需求更新值。

  2. 選擇 [建立堆疊] 以部署範本。

DevOps 工程師

檢閱資源。

建立堆疊後,其狀態會變更為「建立 _ 完成」。在 CloudFormation 主控台中檢閱建立的資源 (IAM 角色、AWS Systems Manager 工作手冊)。

DevOps 工程師
任務描述所需技能

更新您的 KMS 金鑰政策。

  1. 請確定金鑰別名alias/RDSEncryptionAtRestKMSAlias存在。 

  2. 金鑰政策聲明應包含 IAM 修復角色。(檢查您在之前史詩中部署的 CloudFormation 模板創建的資源。) 

  3. 在下列金鑰政策中,請更新粗體顯示的部分,以符合您的帳戶和建立的 IAM 角色。

{ "Sid": "Allow access through RDS for all principals in the account that are authorized to use RDS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam:: <your-AWS-account-ID>”:role/<your-IAM-remediation-role>" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:ListGrants", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "rds.us-east-1.amazonaws.com", "kms:CallerAccount": "<your-AWS-account-ID>" } } }
DevOps 工程師
任務描述所需技能

檢視不符合標準的資源。

  1. 若要檢視不合規資源的清單,請在 https://console.aws.amazon.com/config/ 開啟 AWS Config 主控台。 

  2. 在功能窗格中,選擇 [規則],然後選擇規rds-storage-encrypted則。

AWS Config 主控台中列出的不合規資源將是執行個體,而不是叢集。修復自動化會加密執行個體和叢集,並建立新加密的執行個體或新建立的叢集。但是,請確定不要同時修復屬於同一叢集的多個執行個體。

在修復任何 RDS 資料庫執行個體或磁碟區之前,請確定 RDS 資料庫執行個體未使用中。請確認建立快照時未發生任何寫入作業,以確保快照包含原始資料。請考慮強制執行維護時段,在此期間執行修復。

DevOps 工程師

修復不符合標準的資源。

  1. 當您準備好且維護時段生效時,請選擇要修復的資源,然後選擇 [修正]

    動作狀態欄現在應該會顯示已排入佇列的動作執行

  2. 在 Systems Manager 中檢視修復的進度和狀態。開啟 AWS Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/。在瀏覽窗格中,選擇 [自動化],然後選取對應自動化的執行 ID,以檢視進一步的詳細資訊。

DevOps 工程師

確認 RDS 資料庫執行個體可用。

自動化完成後,即可使用新加密的 RDS 資料庫執行個體。加密的 RDS 資料庫執行個體將具有前置詞,encrypted 後面接著原始名稱。例如,如果未加密的 RDS 資料庫執行個體名稱為database-1,則新加密的 RDS 資料庫執行個體將encrypted-database-1為。

DevOps 工程師

終止未加密的執行個體。

修復完成並驗證新加密的資源後,您可以終止未加密的執行個體。在終止任何資源之前,請務必確認新加密的資源符合未加密的資源。

DevOps 工程師
任務描述所需技能

強制執行 SCP。

強制執行 SCP 以防止 future 在未經加密的情況下建立資料庫執行個體和叢集。使用GitHub 儲存庫中提供的rds_encrypted.json檔案以達到此目的,並遵循 AWS 文件中的指示進行。 

安全工程師

相關資源

參考

工具

指南和模式

其他資訊

常見問答集

問:AWS Config 如何運作?

答:當您開啟 AWS Config 時,它會先探索您帳戶中存在的受支援 AWS 資源,並為每個資源產生一個組態項目。AWS Config 也會在資源組態變更時產生組態項目,並在您啟動組態記錄器時保留資源組態項目的歷史記錄。根據預設,AWS Config 會為 AWS 區域中每個受支援的資源建立組態項目。如果您不希望 AWS Config 為所有支援的資源建立組態項目,可以指定要追蹤的資源類型。

問:AWS 組態和 AWS 組態規則與 AWS Security Hub 有何關聯?

答:AWS Security Hub 是一種安全和合規服務,可提供安全和合規狀態管理即服務。它使用 AWS Config 和 AWS Config 規則做為評估 AWS 資源組態的主要機制。AWS Config 規則也可用於直接評估資源組態。其他 AWS 服務也會使用 Config 規則,例如 AWS Control Tower 和 AWS Firewall Manager。