シンジ「Session Managerを使えばいいと思うよ」（AWS セッションマネージャーを使ってみた）

EC2の公開鍵を削除した綾波「こんなときどうすればいいかわからないの。」
シンジ「Session Managerを使えばいいと思うよ」

ということでAWS Systems Manager Session Managerを使ってログインするまでのやってみた記事になります。
初歩的なことしかしていないので、悪しからず。

# 検証の流れ

1．EC2にてユーザ”Shinji”を作成し、"ssh-keygen"コマンドでキーペアを作成します。ログインできることを確認します。
2．公開鍵を削除してログインできないことを確認します。
3．Session Managerをセットアップして、ログインできることを確認します。

# Session Manager とは

>Session Manager はフルマネージド AWS Systems Manager 機能です。Session Manager を使用すると、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、エッジデバイス、オンプレミスサーバー、仮想マシン (VM) を管理できます。インタラクティブ・ワンクリック ブラウザ ベースのシェル、または AWS Command Line Interface (AWS CLI) を使用できます。Session Manager は安全かつ監査可能なノード管理を実現し、インバウンドポートを開いたり、踏み台ホストを維持したり、SSH キーの管理したりする必要はありません。また Session Manager はマネージドノードの制御されたアクセス、厳格なセキュリティプラクティス、ノードアクセス詳細がある完全監査可能なログを要件とする社内ポリシーの尊守を実現しつつ、エンドユーザーが簡単なワンクリック・クロス プラットフォームアクセスによってマネージドノードの使用を実現します。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html

実際にやってみる

## 1．EC2にてユーザ”Shinji”を作成し、"ssh-keygen"コマンドでキーペアを作成します。ログインできることを確認します。

<details><summary>Linuxログ</summary>

```
[root@EVA001 ~]# useradd Shinji
[root@EVA001 ~]#
[root@EVA001 ~]# tail /etc/passwd
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
libstoragemgmt:x:997:997:daemon account for libstoragemgmt:/:/usr/sbin/nologin
systemd-coredump:x:996:996:systemd Core Dumper:/:/usr/sbin/nologin
systemd-timesync:x:995:995:systemd Time Synchronization:/:/usr/sbin/nologin
chrony:x:994:994:chrony system user:/var/lib/chrony:/sbin/nologin
ec2-instance-connect:x:993:993::/home/ec2-instance-connect:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
Shinji:x:1001:1001::/home/Shinji:/bin/bash
[root@EVA001 ~]#

[Shinji@EVA001 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/Shinji/.ssh/id_rsa):
Created directory '/home/Shinji/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/Shinji/.ssh/id_rsa
Your public key has been saved in /home/Shinji/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:yJo+MFWSpBF1EQ8LOei4zQxMBQnmKlpt7ALLoGf1e64 Shinji@EVA001
The key's randomart image is:
+---[RSA 3072]----+
|oo**+o=o         |
|oo.o=o.+         |
|o+.  +. .        |
|+..o.. .         |
|=*..= o S        |
|B+*+ +           |
|+.+o+ .          |
| o o.  ..        |
|    ..E+.        |
+----[SHA256]-----+
[Shinji@EVA001 ~]$

[root@EVA001 ~]# cd /home/Shinji/.ssh/
[root@EVA001 .ssh]#
[root@EVA001 .ssh]#
[root@EVA001 .ssh]# ll
total 8
-rw-------. 1 Shinji Shinji 2602 Oct 22 10:53 id_rsa
-rw-r--r--. 1 Shinji Shinji  567 Oct 22 10:53 id_rsa.pub
[root@EVA001 .ssh]#
[root@EVA001 .ssh]# mv id_rsa.pub authorized_keys
[root@EVA001 .ssh]#
[root@EVA001 .ssh]#
[root@EVA001 .ssh]# ll
total 8
-rw-r--r--. 1 Shinji Shinji  567 Oct 22 10:53 authorized_keys
-rw-------. 1 Shinji Shinji 2602 Oct 22 10:53 id_rsa
[root@EVA001 .ssh]#
[root@EVA001 .ssh]#
[root@EVA001 .ssh]# rm id_rsa
rm: remove regular file 'id_rsa'? y
[root@EVA001 .ssh]#
[root@EVA001 .ssh]#
[root@EVA001 .ssh]# ll
total 4
-rw-r--r--. 1 Shinji Shinji 567 Oct 22 10:53 authorized_keys
[root@EVA001 .ssh]#
```

ログインできるかを確認
```
[USER]@[PC] aws_pem % ssh -i "shinji.pem" Shinji@[パブリックIP]
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Sun Oct 22 10:50:56 2023
[Shinji@EVA001 ~]$
```

</details>

## 2．公開鍵を削除してログインできないことを確認します。

<details><summary>Linuxログ</summary>

```
#公開鍵をなくした体で移動させる
[root@EVA001 .ssh]# mv authorized_keys /home/Shinji/
[root@EVA001 .ssh]#
[root@EVA001 .ssh]#
[root@EVA001 .ssh]# ll
total 0
[root@EVA001 .ssh]#
[root@EVA001 .ssh]#
[root@EVA001 .ssh]# ll /home/Shinji/
total 4
-rw-r--r--. 1 Shinji Shinji 567 Oct 22 10:53 authorized_keys
[root@EVA001 .ssh]#

#ログインできない
[USER]@[PC] aws_pem % ssh -i "shinji.pem" Shinji@[パブリックIP]
Shinji@[パブリックIP]: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
[USER]@[PC] aws_pem %
```
</details>

## 3．Session Managerをセットアップして、ログインできることを確認します。

まず、なにも設定していない状態でEC2の接続をクリックしてみます。
接続するためにIAMインスタンスプロファイルが必要とのこと
![SSMが使用できません.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209826/3ce8c746-c27a-8bf7-cb8a-cec9bc6a39fa.png)

### Session Managerのセットアップについて

①使用するインスタンスにSSM agentが入っているかを確認する。
[System Manager でサポートされているオペレーティングシステム
](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/operating-systems-and-machine-types.html#prereqs-operating-systems)

②インスタンスプロファイルを作成し、EC2インスタンスにアタッチする。
[ステップ 1: Systems Manager にインスタンスのアクセス許可を設定する
](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/setup-instance-permissions.html)

③VPCエンドポイントを作成
下記の4つエンドポイントの作成が必要

| エンドポイント | 説明 |
|:-----------|:------------|
| com.amazonaws.region.ssm|Systems Manager サービスのエンドポイント|
| com.amazonaws.region.ec2messages | Systems Manager は、このエンドポイントを使用して SSM Agent から Systems Manager サービスへの呼び出しを行います |
| com.amazonaws.region.ec2 | Systems Manager を使用して VSS 対応のスナップショットを作成する場合は、EC2 サービスへのエンドポイントがあることを確認します。EC2 エンドポイントが定義されていない場合、アタッチした Amazon EBS ボリュームを列挙する呼び出しは失敗し、Systems Manager コマンドが失敗します。 |
| com.amazonaws.region.ssmmessages | このエンドポイントは、Session Manager を使用して安全なデータチャネルを経由しインスタンスに接続する場合にのみ必要です。 |

※com.amazonaws.regionは利用しているリージョン

[ステップ 2: VPC エンドポイントを作成する](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/setup-create-vpc.html)

---

##### プロファイルの作成

①信頼されたエンティティを選択
| 項目  | 設定   |
|:---|:---|
| 信頼されたエンティティタイプ | AWS のサービス |
| ユースケース | EC2 |

②許可を追加
**AmazonSSMManagedInstanceCore** を選択
③名前、確認、および作成
名前などを入力し、作成

<details><summary>作成したロール</summary>

![FireShot Capture 033 - SSMInstanceProfile - IAM - Global - us-east-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209826/c8590a99-9368-232f-c3e7-6a67b610640c.png)
</details>

##### EC2インスタンスにアタッチ
①EC2サービスに移動し、対象インスタンスを選択
②[アクション]＞[IAMロールを変更]で作成したIAMロールを選択
##### VPCエンドポイントの作成
①VPCサービスに移動して、左ペインの **Endpoints**をクリックし、 **エンドポイントを作成**
②エンドポイントを作成にて下記のように入力
| 項目  | 設定   |
|:---|:---|
| 名前タグ | エンドポイントの名前 |
| サービスカテゴリ | AWS のサービス |
| サービス | com.amazonaws.ap-northeast-1.ssm 
| |com.amazonaws.ap-northeast-1.ec2messages
| |com.amazonaws.ap-northeast-1.ec2 
| |com.amazonaws.ap-northeast-1.ssmmessages
| VPC | 対象のVPC |

##### EC2インスタンスにて接続を確認する
![FireShot Capture 034 - Systems Manager - ap-northeast-1 - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209826/fe0db525-d0cd-9dd7-8cf8-f6ba9eefe495.png)



めちゃくちゃに楽ですね！
**すべてはゼーレのシナリオの通りに**


# 参考
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/what-is-systems-manager.html

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-setting-up.html

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-setting-up-ec2.html