---
# System prepended metadata

title: 開通AWS EC2 System Manager
tags: [AWS]

---

# AWS 連線方式

在安全連線上我們可以藉由SSM的方式來達到相對於具有ssh key的更安全的方式

這邊說明兩個做法

## Instance Connect
![image](https://hackmd.io/_uploads/BydpTWz1xe.png)

在EC2上點選Connect
![image](https://hackmd.io/_uploads/HkCKjXQkxx.png)
這裡會區分兩種連線方式，一個是走Public IP 另一個是走Private Connect
![image](https://hackmd.io/_uploads/B1WTiQmkgg.png)

這邊以簡單的Public IP的方式進行
若設定上沒有太大問題就可以直接連線


需要注意兩點
一個是他必須要具備Public IP
另一個是還是要有key pair(即使我們不用SSH Key的方式連線)


## System Session Manager

架構圖如下
![image](https://hackmd.io/_uploads/HJjy0ZMJlg.png)


第一次設定時需注意SSM 會需要比較多的設定步驟

1. 我們需要檢查
2. IAM身份具有AmazonSSMManagedInstanceCore，並且沒有存在Premission Boundary
3. MetaData具有IMDSv2(需要藉由IMDS取得Credentials)
4. 具有amazon-ssm-agent
5. 網路連線可以暢通`ssm.<region>.amazonaws.com`

都做完以後會變成 像這樣的架構邏輯
![image](https://hackmd.io/_uploads/B1tzYm7kgx.png)

以下為檢查步驟

檢查 IAM Role 是否正確掛載
`curl http://169.254.169.254/latest/meta-data/iam/info`
![image](https://hackmd.io/_uploads/BJ1aKQm1el.png)
確認 Instance Profile 應該只有這個權限
`AmazonSSMManagedInstanceCore`

檢查Metadata是否可用

```
curl http://169.254.169.254/latest/meta-data/placement/availability-zone
```

![image](https://hackmd.io/_uploads/H1tKVfG1xe.png)

測試網路連線

網路這段需要注意設定VPC subnet 以及IGW
另一種方式是走VPC Endpoint 但就會需要收費

```
ping ssm.ap-southeast-1.amazonaws.com
dig ssm.ap-southeast-1.amazonaws.com
curl https://ssm.ap-southeast-1.amazonaws.com
```
![image](https://hackmd.io/_uploads/HyxvL9XXkge.png)
確認一下Instance metadate service有勾選Enable
底下的Option or Require是 IMDSv1 IMDSv2的差別
> [Instance Metadata Service Version 1 (IMDSv1) – a request/response method
Instance Metadata Service Version 2 (IMDSv2) – a session-oriented method]

![image](https://hackmd.io/_uploads/BJIi4Lm1ge.png)

重新安裝並啟用SSM agent(預設就有，有需要的話再執行)

```
sudo yum erase amazon-ssm-agent -y
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent
```

檢查log有無權限錯誤
`sudo journalctl -u amazon-ssm-agent -xe`
依照本次案例 會看到Permission Boundary的限制導致
![Pasted Graphic 3](https://hackmd.io/_uploads/rk3B1MG1gx.png)
若有出現則將此刪掉
![image](https://hackmd.io/_uploads/r14kgzGyxg.png)

若都檢查完成，此時點選Session Manager應該就可以順利連線了
![image](https://hackmd.io/_uploads/S1YNjQQkel.png)
