SSMを用いてEC2へアクセスすることはこれまでもしたことはあったが、利用したことはあっても設定したことはなかったので勉強を兼ねてやってみた
基本的にはこちらに沿って進めてみますSession Manager を使用して Amazon EC2 インスタンスに接続 – AWS 規範ガイダンス
IAMロールを作成する
まず手始めにIAMロールを作成する。選択肢としてAWSのサービス、EC2を選択して次へを選ぶ。
AmazonSSMManagedInstanceCoreをポリシーとして選択
適当な名前を付けてロールを作成する
EC2インスタンスの構築
接続先となるEC2インスタンスを構築します。 AmazonLinuxであれば最初からSSMのAgentがインストールされているので今回はそれを利用。 構築時には、下記の設定をデフォルトから変えています
ネットワークとしてパブリックIPの自動割り当てを無効化。 セキュリティとしては、SSHでの接続を自分のIPからのみ許可としました。
「高度な詳細」欄にあるIAMインスタンスプロフィールにて先ほど作成したロールを選択します
ちなみに、キーペアは今はRSAとED25519の選択になっていた
ED25519ってあまり馴染みが無い。 どういうケースでどちらを選ぶとよいのかに関しては後ほど調べておきたいところ。
ログの設定をする
SSMでの接続記録を取るためにログを定義しておきます
AWS SystemManager で Session Mangaer を選択肢、「セッションの開始」枠にある「設定を行う」を選択します
CloudWatch logging欄を下記の設定にします
CloudWatch logging を Enable
Choose your preferred logging option を Upload session logs にする
Enforce encryption のチェックを外す
CloudWatchのロググループを先程作成したものを選択
ここまでで試しにセッションマネージャーからの接続を確認してみると、SSM Agent がオンラインではないという表記になっている
こちらの手順 を再確認するとフリートマネージャーを確認するとあるので見てみると、リストに追加したインスタンスが確かに見当たらない。
うーんちょっとピンとこないなぁ。 フリートマネージャーを確認すると、「IAMロール」に関する項目があったので設定してみたが大きくは変わらなかった。
ちなみに、この状態でローカルからSSH接続を試みると下記のエラーとなった
An error occurred (403) when calling the StartSession operation: Server authentication failed: <UnauthorizedRequest><message>Forbidden.</message></UnauthorizedRequest>
サーバーへの到達不能ではなく、認証エラーとなっているのがちょっと気になるところ。
ちなみに、EC2インスタンスの設定を、デフォルトのパブリックIPを持つ形にするとあっさりとSSMでの接続ができた。
ちょっとのこの辺り、まだ理解が曖昧なんだな・・・。 もう少し勉強が必要そうだ