DoiTには、お客様の日々の業務をより快適にしたいという想いを持つ、多彩なバックグラウンドのメンバーが集まっています。EC2インスタンスにVPN経由でログインした経験があれば、その作業の煩わしさはご存じのはずです。インスタンスに直接接続せずに管理を自動化できれば便利ですし、それらの自動化処理を各インスタンスやゴールデンイメージに保存するのではなく、単一のインターフェースから一元管理できれば理想的です。
私自身、以前AWS Active Directoryサーバー群の運用と新入社員の迅速なオンボーディングを両立する必要に迫られ、同じような課題に直面したことがあります。そこで出会ったのがSystems Managerでした。
Systems Managerとは
Systems Managerは、インフラをスマートに管理するためのAWSのソリューションです。マシンにインストールされたエージェントがAWSアカウントからコマンドを受け取り、情報を返すことで、次のようなことが可能になります。
- WindowsおよびLinuxコマンドの実行。 各エージェントはssm-userというローカルユーザーを追加し、bash、PowerShell、CMDからインスタンスに対してコマンドを実行できます。SSHキーやネットワークルールに代わって、IAMでルールと権限を制御できます。
- インベントリとパッチ管理。 インストール済みアプリケーションやパッチをインベントリ化し、運用方針やスケジュールに沿ったパッチポリシーをインスタンスに適用できます。
- RunbookとAutomation。 インスタンスに適用する一連の手順を記述したSystems Managerドキュメントを作成できます。さらに、IAMロールとEC2やStep FunctionsなどのAWS APIを介してAWSインフラを操作するSystems Manager Automationも作成可能です。
- メンテナンスウィンドウでは、特定の時間帯、可用性、成功条件に基づいてRunbookの実行をスケジュール・制御できます。
本記事では、このサービスを有効化し、Session Manager経由でSSMからインスタンスへインタラクティブに接続する方法をご紹介します。
Systems Managerのセットアップ
SSMを利用するには、次の要件を満たす必要があります。
- マシンにエージェントがインストールされていること
- Systems Managerに対する最小権限を持つIAMロール(AmazonSSMManagedInstanceCore)がアタッチされていること
- マシンがポート443で外部インターネットに到達できること、または3つのVPCエンドポイントにアクセスできること
AWS提供のイメージを利用している場合、Systems Managerエージェントは標準でインストール済みです。そうでない場合は、次のいずれかのコマンドを実行してください。
#Red Hat系システムの場合
sudo yum install amazon-ssm-agent
#Debian系システムの場合
sudo apt-get install amazon-ssm-agent
#インストール後、サービスを起動
sudo systemctl start amazon-ssm-agent
2つ目の要件では、マシンに紐づくインスタンスロールの新規アタッチまたは更新が必要です。AmazonSSMManagedInstanceCoreと呼ばれるマネージド権限セットを付与することで、限定された権限の範囲内でリソースが直接AWSサービスとやり取りできるようになります。これにより、インスタンス内に認証情報を保管して紛失するリスクを回避できます。
これまでロールを一度も作成したことがない場合は、Default Host Management Configurationの活用もおすすめです。
- AWS Systems Managerコンソールを開き、左側のFleet Managerを選択します。EC2インスタンスが多く配置されているリージョンが選択されているか確認してください。
- Account ManagementのConfigure Default Host Management Configurationで、Enable Default Host Management Configurationを有効にします。
- IAMロールの選択を求められるので、推奨オプションを選んで新しいデフォルトのInstance Managementロールを作成できます。

デフォルトのホスト管理用IAMロールを作成する際は、新規ロールの作成または既存ロールの利用を選べます
- Configureをクリックして設定を完了します。
これで、リージョン内のすべてのインスタンスが、作成したデフォルトロールを使ってSystems Managerのエンドポイントにアクセスできるようになります。
最後の要件については、多くのネットワーク構成ではポート443でのインターネットアクセスがすでに許可されているはずです。そうでない場合のネットワーク要件は以下の通りです。
SSMエージェントは、少なくとも次のアドレスにポート443で接続できる必要があります。
ssm.==region==.amazonaws.com
ssmmessages.==region==.amazonaws.com
ec2messages.==region==.amazonaws.com
外部アクセスを許可しない場合は、Amazon VPCエンドポイントを作成してアクセスを有効化することも可能です。ただし、利用するリージョンごとにセットアップが必要となるうえ、大半のインスタンスがサービスに到達できるようネットワーク構成にも注意が必要です。これらのエンドポイントはサービス用VPCに配置することをおすすめします。
Session Managerを使う
適切な認証情報とIAMへのアクセス権があれば、これらのインスタンスにどこからでも直接ログインできます。
WindowsインスタンスでGUIを利用したい場合は、Fleet Managerから対象のインスタンスを選択し、Connect with Remote Desktopをクリックします。

Fleet Managerの画面。リモートインスタンスの一覧表示と接続が行えます
Windowsは管理者アカウントにパスワードが必要なため、認証情報を保有しているか、Key Pairでセットアップされたインスタンスである必要があります。AWSはこのKey Pairから管理者アカウントのパスワードを導出します。

Remote Desktopを使ったインスタンスへのリモート接続画面
接続ボタンをクリックすると、Systems Managerが手元のコンピューターから対象インスタンスへのセキュアなトンネルを作成して接続を確立します。これにより、世界のどこからでも管理業務を継続できます。

Windows Remote Desktopへのリモート接続画面
WindowsおよびLinuxインスタンスへコマンドラインでログインする方法はさらに簡単です。Start Commandlineセッションをクリックするだけで、SSMに登録されたマシン上で管理者権限を持つターミナルが立ち上がります。
各エージェントはssm-userというローカルユーザーを作成します。このユーザーにインスタンスの管理者権限を付与するかどうかは、用途に応じて設定可能です。同じユーザーが、Systems Managerで設定するDocumentsと呼ばれるRunbookの実行も担います。

Windowsコマンドラインターミナルでのリモート接続画面
本記事がお役に立てば幸いです。AWS Systems Managerの活用方法やカスタマイズのアプローチはさまざまですが、本記事ではこのサービスの機能をすぐに体感していただくための一例をご紹介しました。
AWS上でのインスタンス管理についてサポートが必要な場合は、DoiT Supportまでお気軽にお問い合わせいただくか、本記事のコメント欄からご連絡ください。
DoiTまでお問い合わせください。シニアエンジニアのみで構成された当社は、高度なクラウドコンサルティング、アーキテクチャ設計、デバッグに関するアドバイス、コンサルティングサービスを専門としています。