ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

AWS Systems Manager Session Manager の利用方法を改めて整理してみた

こんにちは、こんばんわ!クラウドインテグレーション事業部の魚介系エンジニア松尾です。

今回の投稿では、既に利用されている方も多いであろう AWS Systems Manager Session Manager(以降 Session Manager) について、いくつかのケースに応じた使い方をご紹介させていただきます。

はじめに

投稿までの経緯

そもそも何故今 Session Manager について投稿をしようかと思ったかですが、最近久しぶりに環境をゼロから構築する機会があり、EC2 作成まではスムーズにできたものの、いざ Session Manager を接続しようとすると「全然繋がらない・・・」というようなことがありました。

これまでざっくりとした知識で利用していた Session Manager や NW 部分の仕様について、調査を進めていくうちにサービスの理解が深まり、私と同じく毎々構築時に悩まれる方も多いかと思い、自分への戒めも込めて投稿をさせていただきました。

今時ゼロから手で環境を作ることも減ってきたかもしれませんが、本記事が皆さまの作業の一助になれば幸いです。

Session Manager の概要

Session Manager は AWS Systems Manager の機能の一つで、AWS コンソールからブラウザベースのシェルで EC2 にアクセス・操作できたり、AWS Command Line Interface (AWS CLI) を使って EC2 へのアクセス経路を提供したりすることができるサービスです。
Session Manager を利用することによって SSH キーや踏み台サーバなどの用意が不要となるだけでなく、監査ログなども取得することができますので、安全かつ手ごろに EC2 へのアクセスができる非常に便利なサービスです。

Session Manager に関する詳細は以下の AWS ドキュメントをご確認下さい。

docs.aws.amazon.com

この記事に関する前提条件

本記事では AWS コンソールからアクセスを行う方向けの内容となっており、AWS CLI を利用したアクセス方法には言及しません。
また、VPC 周りの細かい設定方法まで言及することはございませんので予めご容赦ください。

パターンごとの EC2 への Session Manager での接続

現状 AWS コンソールから接続を行うことができる想定のパターンをご紹介します。

また前提として以下の条件を事前に満たしておく必要があることにご注意下さい。

  • オペレーティングシステム
    Linux 及び macOS はここ数年リリースされたバージョンは全てサポートされています。
    Windows Server は2012以降の全てのバージョンがサポートされています。
    対応バージョンの詳細は以下 AWS ドキュメントをご確認下さい。 docs.aws.amazon.com

  • SSM Agent のバージョン
    Session Manager を利用する場合バージョン 3.0.222.0 以降がインストールされている必要があります。
    最近の Amazon Linux は全てインストール済みとなりますが、一部サードパーティ OS もインストールされております。
    Agent インストール済みの OS が知りたい場合は以下の AWS ドキュメントをご確認下さい。 docs.aws.amazon.com

  • IAM ロールの付与
    Session Manager を利用する場合、アクセスしたい EC2 に IAM ロールの権限を付与する必要があります。
    必要な権限は AmazonSSMManagedInstanceCore を付与した EC2 サービスロールを作成し、対象の EC2 にアタッチを行ってください。

  • エンドポイントへの接続
    Session Manager のアクセス先リソースのアウトバウンドトラフィックで以下を許可しておく必要があります。

    • ec2messages.region.amazonaws.com
    • ssm.region.amazonaws.com
    • ssmmessages.region.amazonaws.com

今回ご紹介するケースではあまり気にする必要はございませんが、AWS CLI やハイブリッドクラウドでの利用を検討される場合は、以下の AWS ドキュメントにて前提条件をご確認下さい。

docs.aws.amazon.com

パターン① ~パブリックサブネットに EC2 を配置する~

まず1つ目に、構成として最もシンプルなパブリックサブネットに EC2 を配置した場合の Session Manager の接続方法をご紹介します。
構成は以下の通りです。

この構成の場合気を付けなければならない点は EC2 にパブリック IP アドレスを付与する必要がある点です。
私も最近の作業で、パブリックサブネットに EC2 に配置した場合は直接インターネットゲートウェイと疎通が可能なため、パブリック IP アドレス不要と安易な考えだったのですが、これで少しハマってしまいました。。。
※正直なところパブリック IP アドレスが完全有料となったためパブリック IP アドレスを利用したくないというのが本音でした・・・。

NAT ゲートウェイに関しては EC2 からのアウトバウンド通信はインターネットへ抜けて、インターネットから戻りの通信までルーティングしてくれるのですが、インターネットゲートウェイはパブリック IP アドレスを保有していないと何処かでドロップしてしまうようです。(パブリック IP アドレスが必要な旨は AWS の公式ドキュメントに記載があるのですが、ここの細かい仕様はドキュメントに記載はなかったです・・・)
インターネットに接続できないと、当然前述のエンドポイント接続の要件を満たせなくなるため Session Manager は使えない、ということになります。

蓋を開けたら単純な設定漏れですが、パブリックサブネットに配置した EC2 に Session Manager でアクセスする際はパブリック IP アドレスを付与する必要がある旨ご注意下さい!

パターン② ~プライベートサブネットに EC2 を配置する 其の一~

2つ目にプライベートサブネットに EC2 を配置し、インターネットへのアウトバウンド通信に NAT ゲートウェイを利用した場合の Session Manager の接続方法をご紹介します。
構成は以下の通りです。

恐らく WEB 3層構成でアーキテクチャを設計する際、最も利用ケースが多いパターンではないでしょうか。
EC2 はプライベートサブネットに配置されている(パブリック IP アドレスを持たない)ため、外部からの直接アクセスは出来ず、アウトバウンド通信のみ NAT ゲートウェイ経由でインターネット接続ができる構成となります。
もちろん前述の各種エンドポイントへのアクセスも可能なため、Session Manager も何の問題もなく利用可能です。

この構成で注意する点は、NAT ゲートウェイがパブリックサブネットに配置され、プライベートサブネットのルートテーブルにて NAT ゲートウェイ向けのルーティング設定がされていることです。
もしもこの構成で Session Manager が使えないときは、まずはルーティング設定を疑いましょう!

パターン③ ~プライベートサブネットに EC2 を配置する 其のニ~

3つ目にプライベートサブネットに EC2 を配置し、インターフェースエンドポイントを利用して Session Manager へ接続方法をご紹介します。
構成は以下の通りです。

インバウンド、アウトバウンド両方でインターネット向けの通信ができない構成となりますので、高いセキュリティレベルが求められる環境で利用されることが多い構成になるかと思います。
インターネット向けの通信ができないため、Session Manager の通信要件を満たすためには、前述の以下3つのサービスエンドポイントに対するインターフェースエンドポイント(以降 Private Link)を作成する必要があります。 - ec2messages.region.amazonaws.com
- ssm.region.amazonaws.com
- ssmmessages.region.amazonaws.com

Private Link は EC2 などの Conpute(または Cntainer) リソースがプライベート IP アドレスを使って各種 AWS サービスにプライベート接続を行うセキュアなサービスです。
こちらを利用することでインターネット向けの通信が無くても各種 AWS リソースへのアクセスが可能となります。

この構成で注意する点は、Private Link の接続先に間違いがないことと、エンドポイント側のセキュリティグループで EC2からの HTTPS(443番ポート)通信が許可されていることです。
特にセキュリティグループの設定に関しては、恐らく AWS の NW トラブル時に最も間違えの多い個所となりますのでご注意下さい!

AWS コンソールでの Session Manager 利用方法

まだ Session Manager を利用したことが無い方向けに、各パターン共通の AWS コンソール上での Session Manager の利用方法をご紹介します。

  1. EC2 コンソールにアクセスし、中央ペインで Session Manager でアクセスしたい EC2 を選択し、[接続]を押下します。

2.「 セッションマネージャー」タブを選択し、[接続] を押下します。

  1. シェルが起動し、コマンド入力ができれば接続完了です。

最後に

今回は AWS コンソールから Session Manager を利用するま方法をいくつかご紹介させていただきました。
Session Manager は今回ご紹介した方法以外でも AWS CLI を利用した接続方法やオンプレミスのリソースも管理する方法などもございますので、そういった機能も今後別途ご紹介できればと思っております!

では次回もお楽しみに!!!