2022年3月10日 星期四

Bastion Host 防禦/堡壘主機 最佳作法於 AWS 上

 AWS 上可以建立自已的虛擬主機,也就是 EC2,但為了安全性等原因,所以通常會將 EC2 放置在私有網段 (Private Subnet),而會找一台主機放置在公開網段 (Public Subnet),這也是我們所說的 Bastion Host (防禦/堡壘主機),但這樣就沒有問題了嗎?其實還是有下列的問題。

可能遇到的問題:

1. Key Pair 的管理問題,由於 Key Pair 是以檔案的方式進行管理,所以當使用者離職後,就無法有效的管理。
2. 必須將 Bastion Host 放置於公開網段,而且需要開啟埠端口(RDP 3389/SSH 22)。
3. 無法稽核使有用者輸入過那些指令。
4. 不需要特別登入 AWS Console 即可進行連結。
5. 可以同時支援 Windows 與 Linux 的使用,這邊比較難的事,在 Session Manager 登入時只能透過文字介面與 PowerShell 的介面方式登入,但本篇我們會說明如何透過 Session Manager Port Forward 的功能達到圖型化介面 GUI 的方式進行登入。

由於目前已有許多的客戶已在透過 Systems Manager Session Manager 來當作連線的方式,所以接下來我們來說明該如何完成上述的項目,藉以達到一個遠端登入最好的管理方式。

1. 請先建立一個私有網段 (Private Subnet),也就是不要附加 Internet Gateway (IGW) 或 NATRoute Table 中。

VPC with public and private subnets (NAT)
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html

2. 由於在私有網段 (Private Subnet) ,所以必須建立相對應的 VPC Endpoint,請參考下列的文章,分別建立三個 VPC Endpoint。

  • ssm.region.amazonaws.com
  • ec2messages.region.amazonaws.com
  • ssmmessages.region.amazonaws.com

上述前二個是 SSM 的必要條件,而第三個是當你要使用 SSM Session Manager 時,就一定要使用。

另外由於我們想將 Session Manager 的所有活動記錄,也就是使用者所有的輸入指令都記錄下來,所以我們要將 Session activity logs 全部放置在同一個 S3 中,然後可以再透過 Amazon Athena 進行查詢,藉以找出是否有人有輸入特殊指令,如刪除檔案、查看敏感檔案等。

  • com.amazonaws.region.s3

另外由於 S3 的 endpoint 比較不同,所以最後,我們必須在 EC2 中的 Security Group 中特別設定加入一組 prefix list 這樣才可以正常的輸出 Session activity logs 到 S3 中。

Step 6: (Optional) Create a Virtual Private Cloud endpoint
https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-create-vpc.html

3. 請先針對 Systems Manager 建立一個最小權限的 IAM role,藉以後續可以附加在 EC2 Instance 中。

IAM Policy: AmazonSSMManagedInstanceCore

另外由於上述的 Policy 不包含 S3,所以也請同時加上 S3 的權限,如果你想簡單化這部份,你也可以直接使用 IAM Role [AmazonEC2RoleforSSM] 即可,但如果想要細部設定只可以使用特定的 S3 時,即可參考下列的連結。

Step 4: Create an IAM instance profile for Systems Manager
https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html

4. 上述的動作完成後,即已完成環境的設定,所以此時,請嘗試啟動一台 Windows EC2,並且在啟動的過程中,將你在步驟3建立的 IAM 給附加上。

注意,此部份你不需要開啟任何的 3389 port 或是 22 port,所以我的 inbound 是空白的,沒有新增開啟任何的規則。

5. 此時你可以先到 Systems Manager -> Fleet Manager 中確認你的主機是否已有顯示在清單中。

6. 此時你可以透過 EC2 中的 Connect -> Session Manger 進行連線,或是從 Systems Manager -> Session Manager 中進行連線,連線成功後,你會發現只有 PowerShell 的命令視窗,此時代表你已成功並且完成相關的設定。



7. 目前新功能上來說,也可以透過 Systems Manager -> Fleet Manager -> Node actions -> Connect with Remote Desktop 直接連接,但可惜這個方法目前無法使用剪貼簿導向,但可以看出在使用上已更加的方便了。


8. 接下來,我要說明如何透過 Systems Manager Session Manager 中的 Port Forwarding 的功能進行。

9. 請設定一個身份,可以執行 Session Manager 的動作,你也可以參考下列的文章。


10. 設定完成後,請完成安裝 AWS Command Line Interface (CLI) 與 Systems Manager CLI Extension,藉以可以啟動 Port Forwarding 的功能。


11. 安裝完成後,我們嘗試執行下列的指令,進行 Port Forwarding 的功能。

aws ssm start-session --target i-00e2a0ca3c861a3b5 --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["3389"], "localPortNumber":["9999"]}' --region ap-northeast-1


12. 最後,我們再透過 RDP Client 的軟體進行連線,你就會發現,可以在不開任何的 Port 的情況下,進行連線了。


13. 最後,我們要設定將所有的 Session Manager 的記錄輸出至 S3 中,所以請至 Systems Manager -> Preferences -> Edit





沒有留言:

張貼留言