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) 或 NAT 於 Route 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 的命令視窗,此時代表你已成功並且完成相關的設定。