AWS EC2 是 AWS 最受歡迎和使用最廣泛的服務之一。在本文中,了解一些有助于安全配置我們的 EC2 實例的方法。
Ayush Priya 的這篇文章最初發表在Kloudle 博客上。
AWS 的 Elastic Compute Cloud(通常稱為 EC2)是一項服務,允許組織啟動可用于托管和運行應用程序、數據庫等的虛擬機。EC2 實例具有多種選項,從選擇 CPU 內核數量到磁盤空間、內存和操作系統等等。EC2 服務還包含不同的配置選項和設置,供實例使用。本叔說過,“能力越大,責任越大”,在這種情況下,有很多設置可供選擇,就會出現很多錯誤配置。因此,本文將介紹如何安全地配置我們的 EC2 實例。
EC2 實例的安全配置
盡管這不是為保護您的實例而采取的詳盡操作列表,但這些配置是一個很好的起點,因為它們易于理解和實施。隨著人們熟悉 AWS 及其各種其他服務,可以采取其他(高級)措施來進一步加強 EC2 實例的安全性。目前,我們將堅持直接適用于 EC2 實例的安全設置列表。
啟用 IMDSv2
實例元數據服務 (IMDS) 提供有關實例的信息以及與其關聯的各種參數,例如在啟動時指定的用戶數據。IMDSv1 將憑證存儲在端點中,可以檢索這些憑證,然后使用這些憑證通過 AWS CLI 執行操作。在憑據被滲透的情況下,這可能是毀滅性的。因此,引入了 IMDSv2 來阻止針對濫用元數據端點的各種攻擊。IMDSv2 使用會話但不將會話令牌作為信息存儲在端點本身中,因此在后續調用中生成令牌后無法檢索令牌。
通過控制臺為新實例啟用 IMDSv2
啟動實例時,在“配置實例詳細信息”頁面下,導航到“高級詳細信息”部分,然后:
- 為“元數據可訪問”選項選擇“啟用”。
- 為“元數據版本”選項選擇“V2(需要令牌)”。
使用 AWS CLI 為新實例啟用 IMDSv2
要在使用 AWS CLI 啟動實例時啟用 IMDSv2,請在命令中使用以下標志:
aws ec2 run-instances --image-id \--metadata-options "HttpEndpoint=enabled,HttpTokens=required"
使用 AWS CLI 為現有實例啟用 IMDSv2
運行以下 AWS CLI 命令以修改實例并啟用 IMDSv2:
aws ec2 modify-instance-metadata-options --instance-id --http-tokens required --http-endpoint enabled
實施最小許可安全組規則
安全組是定義允許的入站和出站可訪問性以及從實例到各種其他資源、在公共互聯網上以及在 VPC 內的防火墻。重要的是要確保我們只公開在實例上運行的那些需要的服務,并將訪問權限限制在需要它的用戶/組。為此,我們需要添加盡可能明確的安全組規則。例如,不使用 0.0.0.0/0 作為 SSH 協議的允許源,我們可以指定需要訪問實例的團隊明確使用的通用 VPN 作為源。
AWS 有大量文檔用于創建和管理可用的安全組和規則。
定期修補
修補是指將軟件更新應用到操作系統以進行性能升級、錯誤修復和由維護操作系統的供應商發布的安全修復的活動。
修補的步驟因操作系統而異,但基本思路是相同的:使用操作系統的機制檢查是否有可用的補丁/更新并應用它。某些補丁程序還需要重新啟動系統,盡管情況并非總是如此。
例如,可以執行以下步驟來修補運行 Ubuntu 18.04 作為操作系統的 EC2 實例:
- SSH 進入 EC2 實例
- 運行sudo apt update。
- 運行sudo apt upgrade。
- 運行sudo reboot。
使用 SSM 代理并行修補多臺計算機
如果我們處理的實例數量很少,手動應用補丁就可以了;比如說,10。但在大多數現實生活中,這個數字通常比這個大,因此手動修補成為一項相當艱巨的任務。值得慶幸的是,AWS 有一項名為 Systems Manager 的服務,簡稱 SSM。SSM 可以同時在多臺機器上執行命令,省去了一次手動訪問一臺機器的麻煩,使其成為一個非常有用的工具。
“如何在云上修補 Pwnkit 漏洞 (CVE-2021-4034)”在“使用 SSM 修補 AWS 和 GCP 上的多臺機器 > AWS”部分下解釋了如何使用 AWS SSM 修補多個 EC2 服務器。
為 EBS 卷啟用定期備份
存儲在 EC2 實例上的數據應定期備份,以避免因磁盤故障、數據損壞等導致數據丟失問題。AWS Data Lifecycle Manager 是一項服務,可用于創建備份計劃以自動備份我們的 EBS 卷.
通過 AWS 控制臺啟用定期備份
要從控制臺使用 Amazon Data Lifecycle Manager 啟用定期備份,請執行以下步驟:
- 導航到 EC2 詳細信息頁面,然后選擇“Elastic Block Storage”子菜單下的“Lifecycle Manager”鏈接。
- 選擇“EBS 快照策略”并單擊“下一步”按鈕。
- 選擇目標資源類型(Volume 或 Instance),并指定標簽來標識選擇的資源類型。單擊“添加”按鈕。
- 添加備份策略的描述。
- 為策略添加必要的標簽。
- 確保在“策略狀態”部分中選擇了“啟用”選項,然后單擊“下一步”按鈕。
- 根據要求添加備份計劃的詳細信息。理想情況下,建議每天備份一次。
- 向下滾動并單擊“查看政策”按鈕。
- 最后,單擊“創建策略”按鈕以創建備份策略和計劃。
使用 AWS CLI 啟用定期備份
要使用帶有 AWS CLI 的 Amazon Data Lifecycle Manager 啟用定期備份,請執行以下步驟:
- 創建一個名為 policy.json 的文件,并根據需要在替換配置的文件中添加以下內容。
{“資源類型”:[“體積”],“目標標簽”:[{"Key": "createdBy",“價值”:“阿尤什”}],“時間表”:[{"名稱": "每日快照",“復制標簽”:是的,“添加標簽”:[{“鍵”:“類型”,“價值”:“我的每日快照”}],“創建規則”:{“間隔”:24,“間隔單位”:“小時”,《時代》:[“03:00”]},“保留規則”:{“計數”:5}}]}
- 獲取將用于為 EBS 卷創建備份的 IAM 角色的 ARN。
- 最后,運行以下 AWS CLI 命令:
aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn --policy-details file:///path/to/policy.json
加密 EBS 卷
EBS 卷應該被加密,以確保它們持有的數據不會被可能已獲得該卷訪問權限的未經授權的實體讀取或濫用。我們可以啟用配置以在創建時默認對所有 EBS 卷強制加密。
通過控制臺啟用加密
要使用 AWS CLI 為 AWS 賬戶啟用默認加密,可以使用以下步驟:
- 導航到 EC2 儀表板頁面并單擊“EBS 加密”鏈接。
- 選中“始終加密新 EBS 卷”設置的復選框“啟用”,然后單擊“更新 EBS 加密”按鈕。
使用 AWS CLI 啟用加密
要使用 AWS CLI 為 AWS 賬戶默認啟用加密,可以使用以下命令:
aws ec2 enable-ebs-encryption-by-default
補充說明
上述配置會加密在賬戶中創建的新 EBS 卷。要加密現有的卷,AWS 的文檔可以作為參考。
加密 EBS 快照
EBS 快照用作 EBS 卷的備份,可用于恢復實例狀態、從備份中啟動新實例等。由于 EBS 快照本質上等同于 EBS 卷本身,因此確保快照及其加密對應的 EBS 卷是必要的。
EC2 快照的一個很好的特性是,當為加密卷創建快照時,默認情況下該快照也會被加密。這消除了對啟用 EBS 加密設置后創建的快照的加密需求,我們在上一節中配置了加密 EBS 卷。話雖如此,可能存在我們需要加密的未加密舊快照,這可以通過創建未加密快照的副本來完成。對于新復制的快照,我們將啟用加密。
通過控制臺為快照啟用加密
要通過控制臺為現有的未加密快照啟用加密,可以執行以下步驟:
- 導航到 EC2 儀表板。
- 單擊“Elastic Block Storage”子菜單下的“Snapshots”鏈接。
- 選擇要為其制作加密副本的快照,單擊“操作”下拉菜單,然后單擊“復制快照”選項。
- 在“復制快照”頁面中,確保選中“加密”部分下的“加密此快照”復選框,然后單擊“復制快照”按鈕。
- 或者,可以選擇不同的 KMS 密鑰來代替默認密鑰。
使用 AWS CLI 為快照啟用加密
要使用 AWS CLI 為現有快照啟用加密,可以運行以下命令:
aws ec2 copy-snapshot --source-region --source-snapshot-id --encrypted --kms-key-id
使用可信 AMI
Amazon 系統映像或 AMI 是 EC2 實例的啟動配置包,需要在啟動實例時指定。這些 AMI 可以由任何人創建,并與特定的 AWS 賬戶共享,或者通過將其公開來與所有人共享。這可能導致共享惡意 AMI 的可能性。因此,作為一項安全措施,我們應該為我們的實例自己創建和使用 AMI,或者使用僅由受信任的供應商發布的公共 AMI。Amazon linux Image 就是這樣一種受信任的 AMI,它由 Amazon 自己創建和維護。其他鏡像也可以信任,盡管基于供應商,而不是名稱,例如,可以創建鏡像并將其命名為 Ubuntu,但發布者實際上可能與維護和發布 Ubuntu 操作系統的 Canonical Group 沒有關聯。
在啟動映像時選擇的 AMI 并不完全是與實例關聯的配置,因此在此安全措施的情況下無需采取特定步驟。正在使用的 AMI 需要在使用前和啟動實例時進行信任審查:
- 使用控制臺,需要從現有的可用列表中選擇 AMI。
- 使用 AWS CLI,需要提供適當的 AMI ID 來啟動實例。
利用 IAM 角色允許實例使用 AWS 資源
IAM 角色用于委派權限以對 AWS 資源執行操作并執行其所需角色。當 IAM 角色附加到 EC2 實例時,稱為實例角色,服務器可以使用該實例角色執行允許的操作;例如,將本地備份上傳到 S3 存儲桶。
最小權限訪問是一種安全最佳實踐,我們添加角色(或在其他情況下,IAM 用戶)執行其工作所需的確切權限。將此原則應用于附加到實例的 IAM 角色,僅應將實例執行其作業所需的權限添加到實例角色中,而不是其他任何內容。這可確保在憑據泄露的情況下,將損害降至最低。
為 IAM 角色配置最低權限是非常上下文相關的;即,它不能一概而論。因此,提供實例和各種用例可以使用的不同可能權限組合的詳盡列表超出了本文的范圍。
使用 VPC 和子網隔離機器
虛擬私有云
Virtual Private Cloud 或 VPC 是一種 AWS 服務,允許用戶創建邏輯上相互隔離的虛擬網絡。具體來說說EC2實例,舉個例子,我們可以想到一些EC2實例只需要訪問內部資源,不需要訪問互聯網的情況。對于此類實例,我們可以創建一個不允許來自 Inte.NET 的入站和出站連接的 VPC,因此只能在同一 VPC 中的資源之間進行通信。AWS 的文檔可用于了解如何創建新的 VPC。
通過控制臺創建 VPC
執行以下步驟以創建新的 VPC:
- 導航到 VPC 管理頁面。
- 單擊“啟動 VPC 向導”按鈕。
- 選擇“具有單個公共子網的 VPC”選項,然后單擊“選擇”按鈕。如果我們愿意,我們可以稍后添加更多子網。
- 為 VPC 提供 IPv4 CIDR 塊,然后單擊“創建 VPC”按鈕。
使用 AWS CLI 創建 VPC
運行以下命令創建一個新的 VPC,指定的 CIDR 為 192.168.0.0/16:
aws ec2 create-vpc --cidr-block 192.168.0.0/16
子網
子網是 VPC 中的子組件,可以在較小的虛擬網絡中進一步隔離資源。例如,使用 CIDR 塊 192.168.0.0/16 創建的 VPC 可以具有子網 192.168.1.0/24 和 192.168.2.0/24,其中兩個子網位于同一個 VPC 中,但彼此隔離。
通過控制臺創建子網
執行以下步驟以創建新的 VPC:
- 導航到 VPC 管理頁面。
- 單擊“虛擬私有云”菜單的“子網”鏈接。
- 單擊“創建子網”按鈕。
- 選擇 VPC 以在其中創建子網。
- 添加子網的 CIDR 塊以及可選的名稱和標簽。
- 最后,單擊“創建子網”按鈕。
使用 AWS CLI 創建子網
運行以下命令在 CIDR 塊 192.168.1.0/24 內創建新子網:
aws ec2 create-subnet --vpc-id --cidr-block 192.168.1.0/24
為實例啟用詳細監控
默認情況下,EC2 實例從啟動時就已進行基本監控。基本監控固然不錯,但往往不夠。這里提供了對 EC2 實例的詳細監控,例如 CPU 信用指標、實例指標等。
通過控制臺啟用詳細監控
執行以下步驟以通過控制臺啟用對 EC2 實例的詳細監控:
- 導航到 EC2 儀表板。
- 選擇需要開啟詳細監控的實例。點擊“操作”下拉菜單,在“監控和故障排除”子菜單下選擇“管理詳細監控選項”。
- 確保選中“啟用”復選框,然后單擊“保存”按鈕。
使用 AWS CLI 啟用詳細監控
運行以下 AWS CLI 命令以啟用對現有實例的詳細監控:
aws ec2 monitor-instances --instance-ids
運行以下 AWS CLI 命令以在啟動新實例時啟用詳細監控:
aws ec2 run-instances --image-id --monitoring Enabled=true #Amongst other options/flags
結論
EC2 是 AWS 提供的一項廣泛使用的服務,用于運行我們的應用程序等等。憑借其廣泛的可用性列表,還有一長串適用于這些實例的選項,這可能導致錯誤配置或使用不安全的默認配置。
在本文中,我們了解了我們可以采取的各種安全措施來保護我們的 EC2 實例,其中一些是通過直接在 EC2 實例上應用設置,例如使用受信任的 AMI 或啟用 IMDSv2,還有一些與實例切線一致,例如使用 VPC 將各種實例相互隔離或加密 EBS 卷和快照。在所有這些情況下,我們看到了為什么強烈建議使用這些配置,如果不是完全強制應用的話。