【AWS EC2】AWS CLIを使ったEC2接続方法（SSH接続、SSM接続）

# **EC2接続方法（SSH接続、SSM接続）**
### **SSH接続とは？？？**
　SSH接続は、PCからサーバーの専用ポートへ直接接続し、秘密鍵などで認証する方法です。サーバー側でSSHポート（22番）を開放する必要があります。

### **SSM接続とは？？？**
　SSM接続は、サーバーのSSM AgentがAWSのサービスへ外向きに通信してセッションを確立する方法です。サーバー側で特定のポートを開放する必要がなく、秘密鍵も不要なため、よりセキュアで管理が容易なAWS独自の接続方法になります。

:::note info
以下の理由からSSM接続が望ましい
- SSHはサーバーの特定ポート（22番）をインターネットに公開する必要があるため、外部からの攻撃対象になりやすい。SSM接続は、サーバーがAWSサービスへ外向きに通信するため、インバウンドポートを開放する必要がなく、攻撃されるリスクを大幅に減らせる。
- SSHは秘密鍵を管理する必要があるが、SSM接続はAWSのIAM権限で認証するため、鍵管理が不要になり、鍵の漏洩リスクがない。
- SSM接続は、AWSのサービスと統合されているため、誰がいつどこに接続したかのログが自動で取得され、監査が容易になる。
:::

# **①SSH接続手順**
- EC2インスタンスの作成／起動
  - キーペアの作成
  - セキュリティグループの設定
- AWS CLI からSSH接続


## **EC2インスタンスの作成／起動**
- AMI選択
Amazon Linux 2023 AMI
- インスタンスタイプ選択
t2.micro
- ストレージ選択
1 x 8GiB gp3 ルートボリューム、3000 IOPS、暗号化なし

### **キーペアの作成**
- 新しいキーペアの作成
キーペアを作成すると、秘密鍵ファイル（キーペア名.pem）がダウンロードされるので、任意のディレクトリへ配置します。これがSSH接続に使用する鍵となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986061/6957773c-beed-42c2-979c-ac6130da240b.png)

### **セキュリティグループの設定**
- インバウンドルール
  - SSH接続の許可
自分のグローバルIPアドレスからの、ポート22（SSH）へのトラフィックを許可します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986061/c1f5f21b-de54-4ecd-bf5a-f66f957b32fe.png)

- アウトバウンドルール
  - デフォルト（すべてのトラフィック 0.0.0.0/0）


### **EC2インスタンスの起動**
　EC2インスタンスを起動します。


## **AWS CLI からSSH接続**
　以下のコマンドでAWS CLIからSSH接続を行うことができます。
~~~bat
ssh -i ＜秘密鍵のフルパス＞ ＜EC2インスタンスのデフォルトユーザー名＞@＜接続先EC2インスタンスIP/DNS＞
~~~
- EC2インスタンスのデフォルトユーザー名
　AMIの種類によって異なる。Amazon Linux は 「ec2-user」。
- 接続先EC2インスタンスのIP/DNS
　「パブリックIPv4アドレス」または「パブリックIPv4 DNS」を指定。
 　EC2インスタンス詳細画面で確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986061/ba2440fa-2895-4dd3-b761-e4c1f0742f81.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986061/102f7466-065b-44b1-a80b-eb439f6fa194.png)










---
  # **②SSM接続手順**
- Session Manager Plugin for AWS CLI のインストール
- EC2インスタンスの作成／起動
  - セキュリティグループの設定
- EC2インスタンスへIAMロールアタッチ
- SSM Agentの稼働確認
- AWS CLI からSSM接続

## **Session Manager Plugin for AWS CLI のインストール**
　以下、公式ドキュメントに沿って実施。
　AWS CLI を使用してSession Manager セッションを開始する為に必要になります。
　https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html

## **EC2インスタンスの作成／起動**
- AMI選択
Amazon Linux 2023 AMI
※AWS Systems Manager (SSM) サービスと連携してEC2インスタンスをリモートで管理・操作するための「SSM Agent」がプリインストールされています。
- インスタンスタイプ選択
t2.micro
- ストレージ選択
1 x 8GiB gp3 ルートボリューム、3000 IOPS、暗号化なし


### **セキュリティグループの設定**
- インバウンドルール
  - なし
- アウトバウンドルール
  - HTTPS接続の許可
  0.0.0.0/0（すべてのIPアドレス）への、ポート443（HTTPS）のトラフィックを許可します。
:::note info
SSM AgentはEC2インスタンス上で動作し、定期的にAWS Systems Managerサービスのエンドポイント（HTTPS/TCP 443）に対してポーリングを行い、未処理のコマンドやセッション要求がないかを確認します。
:::

### **EC2インスタンスの起動**
　EC2インスタンスを起動します。

## **EC2インスタンスへIAMロールアタッチ**

　起動したEC2インスタンスに、AmazonSSMManagedInstanceCore ポリシーがアタッチされたIAMロールを関連付けます。
 
## **SSM Agentの稼働確認**
　AWS Systems Manager > フリートマネージャー からSSM Agentが稼働状況を確認することができます。
 
:::note warn
EC2インスタンスを起動してもSSM Agentが稼働しておらず、この画面に反映されないことがあるので、その際はEC2インスタンスを再起動すると反映されます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986061/3baba835-eb8a-4e86-940d-702d1fc3347d.png)



## **AWS CLI からSSM接続**
　以下のコマンドでAWS CLIからSSM接続を行うことができます。
~~~bat
aws ssm start-session --target ＜インスタンスID＞
~~~


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/986061/f1f216c4-0f95-427a-a3aa-cd690bdd197a.png)

以上