透過 AWS SSM 連線至 macOS EC2 並啟用 VNC 遠端桌面 GUI
名詞說明
AWS:Amazon Web Services 亞馬遜的雲端服務
SSM:AWS Systems Manager 可以透過 AWS 直接連上內部 VPC 的機器 (不需要在 public subnet)
EC2:AWS 的虛擬雲端計算服務
VNC:Virtual Network Computing 遠端控制
步驟
確定使用的 User 有
ssm:StartSession權限確定要連線的 EC2 有 IAM Role 並被賦予
AmazonSSMManagedInstanceCore權限

AmazonSSMManagedInstanceCore 權限
確定 EC2 上有安裝 SSM Agent,macOS 可以查看:在 macOS 專用 EC2 執行個體使用 SSM Agent - AWS Systems Manager
接著我們等到 EC2 確定啟動完畢 (macOS 啟動到可以連線需要約 5 分鐘),可以以下指令連線測試
aws ssm start-session --target <instance-id><instance-id> 請帶上 EC2 的 instance id

SSM 連線
確認看看是否可以正常連線,可以下 sudo -i 來切換成 root
- 當我們確定可以透過 SSM 連上 EC2 後,接著我們要安裝並啟動 macOS 畫面共用,請安裝以下指令
sudo defaults write /var/db/launchd.db/com.apple.launchd/overrides.plist com.apple.screensharing -dict Disabled -bool false
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.screensharing.plist- 接著要透過 VNC 連線,需要指定 User,但我們沒辦法拿到 root 密碼,所以只能在建立一個帳號,或是使用預設的 ec2-user,這邊先使用預設帳號,並新增密碼
sudo /usr/bin/dscl . -passwd /Users/ec2-user- 接著開啟新的一個 Terminal 下此指令,透過 SSM 將本機與 EC2 內部的 Port 做 Port forwarding
aws ssm start-session \
--target <instance-id> \
--document-name "AWS-StartPortForwardingSession" \
--parameters '{"portNumber":["5900"], "localPortNumber":["5900"]}'就會看到這個類似的畫面

SSM Port Forwarding
- 開啟瀏覽器或是開啟 macOS 內建的螢幕共享,打上
vnc://localhost:5900就可以看到此畫面囉

VNC 連線到 macOS
備註
假設是建立其他的 User (不是用 ec2-user),在第一次連線時,還是需要先登入 ec2-user 才可以切換其他帳號
參考資料
How can I access my Amazon EC2 macOS instance through a GUI?:Access an EC2 macOS instance through a GUI
AWS Systems Manager 使用 Port-Forwarding:https://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-port-forwarding