こちらの記事では、AWS Systems Managerの一部の機能であるSession Managerを利用して、EC2インスタンスへキーペアなしでアクセスするまでの方法を解説します。
どうしてセッションマネージャーでEC2アクセスするのか?
Session Managerを使用することで、セキュリティグループのSSH接続用の22番ポートの開放が必要なくなり、アクセス履歴をCloud Trailへ保存できるようになるなどのメリットがあり、セキュリティ面においてより堅牢に運用することが可能です。
AWSが公開しているEC2インスタンスにアクセスするベストプラクティスとしても、Session Managerについて触れられています。
AWS Systems Managerとは
AWS Systems Managerとは、EC2を中心とするAWS環境の運用や、オンプレミス環境の運用を効率化する機能が多数提供されているサービスになります。このサービスを上手に使いこなすことで、日々必要とされる維持、運用作業を効率化することができます。
AWS Systems Managerは略称として「SSM」と表記されることがあります。これには理由があり、AWS Systems Managerとなる以前のサービス名がAmazon Simple Systems Manager(SSM)、Amazon EC2 Systems Manager(SSM)となっていたため、その名残りであると言われています。
Session Manager
Session Managerは、AWS Systems Managerが提供する機能のうちの一つで、Webブラウザ(マネジメントコンソール)やAWS CLIからインスタンスへのコマンド操作を実現する機能になります。
Session Managerを使用することで、Amazon EC2インスタンスの他、エッジデバイス、オンプレミスサーバー、仮想マシン (VM)を管理することができます。
Session Managerの公式ドキュメントには、以下のように記載されています。
Session Managerは安全かつ監査可能なノード管理を実現し、インバウンドポートを開いたり、踏み台ホストを維持したり、SSHキーの管理をしたりする必要はありません。
AWS Systems Manager Session Managerより引用
インバウンドポートを開く、つまりSSH接続するための設定で必要なセキュリティグループでの22番ポート解放や、SSH接続をする際に必要なキーペアの作成が不要になるとの説明が書かれています。
今回の記事では実際にこの設定を試してみて、本当に22番ポートの解放、キーペアの作成が必要無いのかを検証していきます。
Session Managerを使用する際に必要なこと
Session Managerを使用してEC2インスタンスへアクセスするには、以下の3つの条件が必要になります。
- EC2インスタンスにSSMエージェントがインストールされていること
- EC2インスタンス用のIAMロールを作成すること
- EC2インスタンスに作成したIAMロールをアタッチすること
この3つの条件をEC2インスタンスに設定することで、EC2インスタンスはマネージドノードと呼ばれるSSMで管理できる状態になります。
EC2インスタンスにSSMエージェントがインストールされていること
SSMエージェントとは、AWSリージョンごとに存在するSSMのリージョンエンドポイントと呼ばれる場所へ定期的な問い合わせ(ポーリング)を実行する、AWSが提供するミドルウェアです。このSSMエージェントがポーリングを行うことで、SSMエージェントがSSMからのコマンド実行などの指示を受け付けます。
通常、問い合わせ先となるSSMのリージョンエンドポイント(Systems Manager APIなど)はインターネット上に存在するため、EC2インスタンスにInternet Gatewayを経由したアウトバウンド通信を許可しておく必要があります。
例外としてVPCエンドポイントと呼ばれる機能を使うことで、インターネットを経由せずにVPC内のリソースとVPC外のリソースを接続することも可能です。
SSMエージェントのインストールの必要性
SSMエージェントに関しては、今回使用するAmazon Linux2にはプリインストールされているためインストールの必要はありません。2023年6月現在の公式ドキュメントでは、以下のAMIにはプリインストールされています。
これ以外のAMIを使用する場合には、SSMエージェントをインスタンスへインストールする必要があるので注意が必要です。
- 2017 年 9 月以降の Amazon Linux Base AMI
- Amazon Linux 2
- Amazon Linux 2 ECS に最適化されたベース AMIs
- Amazon Linux 2023 (AL2023)
- Amazon EKS 最適化 Amazon Linux AMIs
- macOS 10.14.x (Mojave)、10.15.x (Catalina)、11.x (Big Sur)
- SUSE Linux Enterprise Server(SLES) 12 と 15
- Ubuntu Server 16.04、18.04、および 20.04
- 2016 年 11 月以降に公開された Windows Server 2008-2012 R2 AMIs
- Windows Server 2016、2019、および 2022
EC2インスタンス用のIAMロールを作成する
EC2インスタンスがSSMと通信するためには、AmazonSSMManagedInstanceCoreというポリシーをアタッチしたIAMロールを作成し、IAMロールをEC2へアタッチする必要があります。
Session Managerを使用してEC2へアクセス
ここからは、EC2インスタンスをキーペアを作成せずに起動し、マネジメントコンソールからSSMを利用してインスタンスへ接続できるのかを試してみます。
キーペアを作成せずにEC2インスタンスを作成する
マネジメントコンソールより、EC2ダッシュボードへ移動します。
インスタンスを起動を選択します。
名前とタグはテスト用でssm-ec2としました。
AMIはAmazon Linux2を使用します。
キーペアは「なしで続行」を選択します。これにより、キーペアを使用してのEC2インスタンスへのログインは不可能です。
そして、セキュリティグループの設定で、「SSHトラフィックを許可する」のチェックを外し、22番ポートを解放しないように設定します。
ここまでの設定が完了した後、インスタンスを作成します。
インスタンスの状態が「実行中」になればEC2の起動完了です。
IAMロールの作成
続いて、Session ManagerでEC2へアクセスするために必要なIAMロールを作成します。
IAMのダッシュボードへ遷移します。
ダッシュボードの左側、ナビゲーションよりロールを選択します。
画像の「ロールを作成」をクリックします。
「信頼されたエンティティタイプはAWSのサービスを、ユースケースはEC2を選択し次へ進みます。
許可ポリシーの検索窓へ「ssmmanaged」と入力しエンターを押すと、AmazonSSMManagedInstanceCoreが表示されるため、チェックを入れて次へ進みます。
任意の名前でロール名を入力します。
下へスクロールし、許可ポリシーにAmazonSSMManagedInstanceCoreが追加されていることを確認し、ロールを作成します。
画面上部に以下の画面が表示されればIAMロールの作成完了です。
EC2インスタンスにIAMロールをアタッチする
作成したIAMロールをEC2インスタンスへアタッチします。
EC2インスタンス画面より作成したインスタンスを選択し、アクションタブより「セキュリティ」を選択し、「IAMロールを変更」をクリックします。
「IAMロールを選択」をクリックすると、先ほど作成したロールが表示されるため選択し、「IAMロールの更新」をクリックします。
インスタンスの詳細タブより、IAMロールがアタッチされたことが確認できればアタッチ完了です。
Session ManagerでEC2へアクセスしてみる
作成したインスタンスをチェックした状態で、「接続」をクリックします。
セッションマネージャーを選択し、「接続」をクリックします。
この時、「接続」ボタンがクリックできない場合は、若干時間を置いてリロードする必要があります。
接続が完了すると、ブラウザの別タブでターミナルが開きます。通常のSSH接続であればec2-userでログインしますが、Session ManagerでEC2に接続した場合にはssm-userで接続していることに注意しましょう。
この場合、接続後のカレントディレクトリは/usr/binになっています。
これで、セキュリティグループの22番ポートを解放することなく、キーペアを使用せずにEC2インスタンスへ接続することができました。
まとめ
今回は、AWS Systems Managerの一部の機能であるSession Managerを利用して、EC2インスタンスへキーペアなしでアクセスするまでの方法を解説しました。
Session Managerを使用してEC2インスタンスへ接続するための条件として、
- EC2インスタンスにSSMエージェントがインストールされていること
- EC2インスタンス用のIAMロールを作成すること
- EC2インスタンスに作成したIAMロールをアタッチすること
この3つの条件があることを忘れずに、より堅牢な運用を目指していきましょう。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2023.05.04
【AWS SAA】AWS実務未経験での合格体験記 学習方法や受験方法の違いによる注意点もご紹介
こちらの記事では、AWS実務未経験でもSAA試験に合格するために行った学習方法やマインドの持ち方、受験した際の失敗談などをご紹介します。
- AWS
- キャリア・学習法
2023.02.07
インフラエンジニアに必要な資格(awsについて)
こちらはEnvaderの記事になります。
- インフラエンジニア
- AWS
2024.04.28
CloudWatchにおける監視項目 絶対に押さえておくべきアラームとは?
この記事では、システム運用において必須であろうアラームについて解説していきます。
- AWS