
【第5回】AWS Systems Manager 攻略マニュアル「Session Manager基本編:EC2接続」
Ops Todayでは「面倒なAWSシステム運用を効率化しよう!」をテーマに、AWSリソースを含むシステムの運用をする際に便利なサービス「AWS Systems Manager」に関する記事を複数回にわたってご紹介しています。(記事一覧はこちら)
今回は、Session ManagerによるによるEC2インスタンスへの接続を解説します。AWS Systems Managerを扱う上で欠かせないサービスですので、この記事を参考に使いこなせるようになりましょう。
Session Managerとは
Session Managerは、AWS Systems Manager配下のマネージドノードに個別にアクセスできるノード管理機能です。Session Managerによるノード管理を行うことで、具体的に次のようなことを実現できます。
ノード管理
Session Managerを使用すると、次の種類のマネージドノードを管理できます。
- Amazon EC2インスタンス
- オンプレミスサーバ
- 仮想マシン(VM)
- エッジデバイス
インタラクティブなCLI
インタラクティブ(双方向、対話的)にコマンド操作できるCLIを利用できます。
次の2種類のCLIが用意されています。
- 対話的なワンクリックブラウザベースのシェル
- AWSコマンドラインインタフェース(AWS CLI)
セキュアなノードアクセス
Session Managerには次のような特徴があるため、セキュリティ面でより安全にマネージドノードにアクセスできます。
- アクセスのために新たにインバウンドポートを開く必要が無い
- Bastion(踏み台)ホストを用意する必要がない
- SSHキーを管理する必要が無い
- ポートフォワーディングを利用したアクセス
- ユーザ単位でのアクセス権限制御が容易
ノードアクセスの記録を取れる
Session Managerを介したノードアクセスをする場合、接続や操作に関する記録を取得できます。
- マネージドノードにアクセスしたタイミングで接続や操作の履歴を記録できる
- 誰かがマネージドノードにアクセスしたことを通知できる
Session Managerを利用することで、企業や組織の運用ポリシー、セキュリティポリシーに沿った厳格なノード管理を実現できます。
また、これだけ色々なメリットがあると扱うのは複雑ではないかと心配になるかもしれませんが、利用者はワンクリックでセッションを開始でき、しかもクロスプラットフォーム上(※)でアクセスできるので、とてもシンプルで扱いやすいのが特徴です。
※1つのツールでWindows、Linux、macOSをサポートしており、OSによってSSH接続、RDP接続など切り替える必要が無いということです。
Session Managerの導入方法
前提条件
Session Managerの利用を始める前に、クリアすべき前提条件があります。
- マネージドノードにSSMエージェントをインストールしていること
- マネージドノードから特定のVPCエンドポイントへの接続を許可していること ※1
- 操作端末にAWS CLIをインストールしていること ※2
- アドバンスインスタンスティアを有効化すること ※3
- IAMサービスロールの権限確認 ※3
※1:NATゲートウェイを使用せずに接続する場合のみ必要な条件
※2:AWS CLIを利用する場合のみ必要な前提条件
※3:ハイブリッド、マルチクラウドの場合のみ必要な前提条件
SSMエージェントをインストールする手順は、第2回の記事にまとめていますので参考にしてください。今回は、EC2インスタンスにSession Managerで接続することを想定して、前提条件のうち、”特定エンドポイントへの接続許可”のみ実施してみたいと思います。
VPCエンドポイントとは
VPCエンドポイントは、VPC(Virtual Private Cloud)と他AWSサービスがプライベートネットワークを使用して接続できるようにするサービスです。今回の場合、EC2を配置しているVPCとAWS Systems Managerの間で通信できるようにするために、新たにVPCエンドポイントを作成します。
VPCとAWS Systems Managerの通信イメージ
VPCとAWS Systems Managerの通信イメージを以下に示します。

全体の流れとしては、操作端末からAWS Systems Managerコンソールに接続し、VPCエンドポイントを経由してマネージドノードであるEC2インスタンスに接続します。このVPCエンドポイントは新規作成します。また、VPCエンドポイントから各マネージドノードへはHTTPS(443)によって通信します。
VPCエンドポイント用のセキュリティグループを作成する
VPCエンドポイントを新規作成する前に、VPCエンドポイントに適用するセキュリティグループを作成します。前述の図で説明すると、各マネージドノードからVPCエンドポイントに対して行われるHTTPSのインバウンド(内方向)通信を許可するセキュリティグループです。
セキュリティグループの設定は、EC2サービスのコンソールより行います。AWSの検索ウィンドウに“ec2” と入力して、検索結果より「EC2」サービスをクリックします。

画面左のナビゲーションペインにある「ネットワーク&セキュリティ」メニューより、「セキュリティグループ」をクリックします。

「セキュリティグループ」ページが表示されるので、画面右上にある「セキュリティグループを作成」をクリックします。

「基本的な詳細」欄にて、作成するセキュリティグループの名前や説明を入力します。「セキュリティグループ名」と「説明」の入力は必須です。また、「VPC」はマネージドノードが属しているVPCをプルダウンリストより選択します。

「インバウンドルール」欄にて、プライベートネットワークに対するHTTPSの通信を許可するルールを追加します。次の内容で設定しました。
タイプ:HTTPS
ソース:カスタム プライベートネットワークのセグメント範囲を許可(172.31.0.0/16)

アウトバウンドルールは特に設定を変更せず、すべてのトラフィックを許可したままとします。タグの設定は任意で設定してください。
設定を終えたら、画面右下にある「セキュリティグループを作成」をクリックします。

直後、セキュリティグループの一覧画面に戻り、今回作成したセキュリティグループが表示されます。

VPCエンドポイントを作成する
VPCエンドポイントの設定は、VPCサービスのコンソールより行います。AWSの検索ウィンドウに
“vpc” と入力して、検索結果より「VPC」サービスをクリックします。

画面左のナビゲーションペインより、「エンドポイント」をクリックします。

「VPCエンドポイント」ページが表示され、この画面よりVPCエンドポイントを作成することができます。作成する必要があるVPCエンドポイントは、次の2つです。
- ssm.region.amazonaws.com
- ssmmessages.region.amazonaws.com
※マネージドノードには、最新のSSM Agentが実装されていることを前提としています。もし、マネージドノードに実装しているSSM Agent のバージョンが3.3.40.0以降でない場合は、上記2つに加え、ec2messages.region.amazonaws.comを作成する必要があります。
以降より、VPCエンドポイントを作成する手順を記載します。1つずつしか作成できないため、以降の手順を繰り返して必要なエンドポイントをそれぞれ作成してください。
「VPCエンドポイントを作成」をクリックします。

まず、VPCエンドポイントの名前を入力します。設定必須の項目ではないので、特に設定せずに作成を進めることも可能です。

「タイプ」欄では、「AWSのサービス」を選択します(既定値で選択されています)。

「サービス」欄では、Session Managerに必要なサービスを指定します。先述の通り、作成が必要なのは、次のサービスに関するVPCエンドポイントです。
- ssm.region.amazonaws.com
- ssmmessages.region.amazonaws.com
- ec2messages.region.amazonaws.com(※)
※SSM Agent が3.3.40.0以降のバージョンでない場合のみ作成が必要
検索ウィンドウに“ssm” 等入力して、対象となるサービスを選択しましょう。

「ネットワーク設定」欄では、VPCの指定とDNSの設定を行います。
VPCは、マネージドノードが属しているVPCをプルダウンより指定します。今回はインターネットに公開している環境での設定であるため、DNS設定はそのままとしました。

「サブネット」欄では、VPCエンドポイントと紐付けるサブネットを指定します。
複数指定することが可能で、ここで指定したサブネットにはエンドポイントネットワークインタフェースが作成されます。マネージドノードが属しているサブネットを指定しましょう。

「セキュリティグループ」欄では、VPCエンドポイントに紐付けたいセキュリティグループを指定します。ここでは、あらかじめ作成しておいたVPCエンドポイント用のセキュリティグループを指定し、VPCエンドポイントからEC2マシン向けにHTTPS通信が許可されるようにしましょう。

「ポリシー」欄では、前手順で指定したSession Managerに必要なサービスへのアクセス権限を設定します。ポリシー作成ツールを使用して、カスタマイズしたポリシーを適用することも可能です。今回は、とりあえず検証したいのでフルアクセスを選択しました。

最後に、「タグ」の指定です。必要であれば追加しましょう。

画面の一番下にある「エンドポイントを作成」をクリックすると、これまでに設定した内容でVPCエンドポイントが作成されます。

作成が正常に行われると、次のメッセージが表示されます。

手順を繰り返し、ssm.region.amazonaws.com、ssmmessages.region.amazonaws.comのサービスに対するVPCエンドポイントを作成しました。

Session Managerにインスタンスへのアクション実行権限を付与
デフォルトでは、AWS Systems Manager にはEC2インスタンスに対するアクション実行権限がありません。インスタンスの権限は、IAMロールによるアカウントレベルでの付与、もしくはインスタンスプロファイルによるインスタンスレベルでの付与が可能です。
AWSは、デフォルトのホスト管理設定を使用してアカウントレベルでアクセスを許可することを勧めているので、今回はデフォルトのホスト管理設定によるアクセス許可を行います。
まず、デフォルトのホスト管理設定が有効化されているか確認してみます。
AWS Systems Managerのコンソールへ移動し、ナビゲーションペインより「ノード管理」>「フリートマネージャー」をクリックします。

フリートマネージャーの画面右上にある「アカウント管理」をクリックし、表示されるメニューより「デフォルトのホスト管理設定を設定する」をクリックします。

「デフォルトのホスト管理設定を有効にする」がONの状態であれば、デフォルトのホスト管理設定は有効化されている状態です。また、既定値でIAMロールが選択されていますが、Systems Manager によるEC2インスタンス管理に必要な最小限の権限セットが含まれているものなので、特に理由がなければ既定値のIAMロール設定とすることをお勧めします。

マネージドノードへのセッションを開始する
Session Managerを開始しましょう。AWS Systems Managerのコンソールへ移動し、ナビゲーションペインより「ノード管理」>「セッションマネージャー」をクリックします。初めてSession Managerを利用する場合は、画面中央の「セッションを開始する」をクリックします。

セッションは3段階のステップを踏んで開始します。「ステップ1:Specify target」では、セッションを張る対象のインスタンスを選択します。選択後、「Next」をクリックします。

次の「ステップ2:Specify session document」では、セッションドキュメントを指定できます。セッ
ションドキュメントというのは、期間、暗号化、ログ記録などセッションに関する設定をドキュメントファイルにしたもので、読み込むだけでドキュメントに記載したセッション設定を適用してくれま
す。
今回は、セッションドキュメントを用意していないので、何も指定せずに「Next」をクリックします。

最後となる「ステップ3:Review and launch」では、これから開始するセッションの設定を確認し、問題なければセッションを開始します。

セッションが開始すると、EC2インスタンスにアクセスできます。
Linuxインスタンスの場合

Windowsインスタンスの場合

Windowsサーバへリモートデスクトップ接続する
Windowsマシンやxrdpを実装したLinuxサーバに対しては、リモートデスクトップ接続してGUIで操作したい要望もあると思います。
今回は、Session Managerを使用して、Windowsの操作端末よりWindowsインスタンスに対するリモートデスクトップ接続を行う手順を解説します。
ポートフォワーディングと前提条件
Session Managerを利用してEC2インスタンスにリモートデスクトップ接続するには、ポートフォワーディングが有効です。
ポートフォワーディングとは、特定のポート番号宛ての通信を、ネットワークで繫がる別アドレスのポートへ転送する機能です。ポートフォワーディングを利用することで、操作端末自身の特定ポートを経由して接続先のEC2インスタンスのリモートデスクトップ受信ポートへ通信することができ、この方法はセキュリティ面でも有効な接続手法です。
ポートフォワーディングを利用してEC2インスタンスにリモートデスクトップ接続する場合、「AWS CLI」と「SSMプラグイン」次の2つのソフトウェアをインストールする必要があります。それぞれ、以下より操作端末の環境に合うものを入手してインストールします。(※今回、インストール手順は省略します)
また、AWSのIAM(AWS Identity and Access Management)サービスを使用して、IAMユーザやポリシーの設定を行う必要があります。
IAMユーザおよびIAMポリシーの作成
ポートフォワーディングを行うために、専用のIAMユーザーおよびIAMポリシーを作成します。
IAMポリシーとは、特定のユーザやグループに対してアクセス権限制御を行うポリシーをドキュメント化したものです。
IAMサービス画面へ移動するには、AWSの検索ウィンドウに“iam” と入力し、検索結果より「IAM」サービスをクリックします。

IAMサービス画面左のナビゲーションウィンドウより「ユーザー」をクリックし、画面右上に表示される「ユーザーの作成」をクリックします。

ユーザー名を入力し、「次へ」をクリックします。
※今回作成するIAMユーザーがAWSマネジメントコンソールにもサインインできるようにしたい場合は、「AWSマネジメントコンソールへのユーザーアクセスを提供する」にチェックを入れます。

「許可のオプション」欄にて、ユーザーへのポリシー適用をグループ単位で行うかユーザー単位で行うか選択します。今回は簡易的な検証のため、IAMグループは特に作成せずにIAMユーザーに直接ポリシーをアタッチするので、「ポリシーを直接アタッチする」を選択します。

「許可ポリシー」欄の右上にある「ポリシーの作成」をクリックします。

ポリシーエディタ画面が表示されますので、「JSON」を選択します。

ポリシーエディタ左側には、デフォルトでIAMポリシーのJSONサンプルが記述されていますが、これを全て削除してポートフォワーディング用IAMポリシーを記述します。
以下に検証まで行ったサンプルを共有しますので、ご参考までに共有します。
※サンプルにて斜体文字で記述している部分(region,account-id,instance-id)は、ご使用の環境に合わせて置き換えてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ec2:region:account-id:instance/instance-id",
"arn:aws:ssm:region:account-id:document/SSM-SessionManagerRunShell",
"arn:aws:ssm:region::document/AWS-StartPortForwardingSession"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:TerminateSession",
"ssm:ResumeSession"
],
"Resource": [
"arn:aws:ssm:*:*:session/${aws:userid}-*"
]
}
]
}
ポリシーの記述を終えたら「次へ」をクリックします。

「ポリシーの詳細」欄にて、「ポリシー名」を入力します。「説明」欄は任意入力です。

記述したIAMポリシーの内容が自動的に読み取られ、「このポリシーで定義されている許可」欄にアクセス制御の設定内容が表示されます。タグ設定は任意で行い、「ポリシーの作成」をクリックします。

IAMポリシーが作成されると、IAMユーザーの作成画面に戻ります。
「許可ポリシー」欄にて、作成したIAMポリシーを検索してチェックボックスにチェックを入れ、画面右下の「次へ」をクリックします。

設定内容の最終確認画面が表示されるので、内容を確認したうえで「ユーザーの作成」をクリックします。

IAMユーザーの一覧画面にて、今回作成したユーザー名をクリックします。

作成したIAMユーザーの詳細画面が表示されるので、「概要」欄にある「アクセスキーを作成」リンクをクリックします。

ユースケースを選択する画面が表示されるので、「コマンドラインインターフェース(CLI)」を選択します。

画面の下方にある「上記のレコメンデーションを理解し、アクセスキーを作成します」にチェックを入れ、画面右下の「次へ」をクリックします。

次の画面では、任意でタグ設定を行い、「アクセスキーを作成」をクリックします。

アクセスキーが正常に作成されると、次のメッセージが表示されます。

「アクセスキーの取得」画面が表示されます。「アクセスキー」と「シークレットアクセスキー」は後に使用するので控えておきましょう。画面の下方にある「.csv ファイルをダウンロード」をクリックし、アクセスキーを保存しておくことを推奨します。アクセスキー保存後、「完了」をクリックします。

操作端末でコマンドプロンプトを起動し、次のコマンドを実行します。
aws configure
プロンプトにて、AWS CLIの環境パラメータ入力を求められるので、次のように入力してエンターキーを押下します([ ]内の値をご利用環境の値に置き換えてください)。
AWS Access Key ID [None]: [作成したIAMユーザーのアクセスキー]
AWS Secret Access Key [None]: [作成したIAMユーザーのシークレットアクセスキー]
Default region name [None]: [接続先EC2インスタンスが属するリージョン]
Default output format [None]:
これで、Session ManagerでWindows ServerのEC2インスタンスにリモートデスクトップ接続する準備が整いました。接続するには、AWS CLIにて次のコマンドを実行します。
aws ssm start-session --target instance-id --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389"
以下のように、”Waiting for connections…” と出力されればポートフォワーディングは成功しています。

リモートデスクトップ接続クライアントを起動し、接続先を「localhost:[転送先ポート番号]」と指定して「接続」をクリックします。
![リモートデスクトップ接続クライアントを起動し、接続先を「localhost:[転送先ポート番号]」と指定して「接続」をクリック](https://ops-today.com/wp-content/uploads/2024/12/image-234.png)
セッションを張ることができると、AWS CLIに“Connection accepted for session”と出力されます。

接続先インスタンスのユーザー名とパスワードを入力し、接続しましょう。
接続およびログインに成功すると、接続先マシンのデスクトップが表示され、GUI操作が可能となります。

さいごに
今回は「AWS Systems Managerフル攻略マニュアル」の第5回ということで、Session ManagerによるEC2インスタンスへの接続について解説しました。
Session Managerを使用することで、より安全で厳格なノード管理を実現できるので、これを機に是非ともSession Managerの利用を始めてみましょう。
次回の記事でもSession Managerを取り上げ、もう少し応用的な内容を解説する予定です。是非とも次回の記事も合わせて参考にしてください。