fu3ak1's tech days

何事もシンプルに。主にAWS関連の記事を書いています

Session Manager を使用したEC2へのコマンド接続

私も普段愛用している、Session Managerの使い方について紹介します。

Session Managerとは

AWSにはSystems Managerという、EC2を管理するサービスがあり、その中の1つの機能としてSession Managerがあります。 Session Managerを使用して、EC2やオンプレミスのサーバへの接続や管理を行うことができます。具体的に見ていきます。

参考: AWS Systems Manager ドキュメント - AWS Systems Manager

Session Managerのうれしいポイント

https通信で接続できる

社内から外部のサーバへアクセスする場合、プロキシサーバがありhttp/httpsしか許可されていない! といったこともあると思います。Session Managerのエンドポイントにhttps接続できればサーバへ接続することが可能です。

f:id:fu3ak1:20200530122333p:plain

SSHキー不要、セキュリティグループの許可不要

接続部分についてはSession Manager側で管理されるため、通常SSH接続で使用するSSHキーペアや、セキュリティグループでのインバウンドSSH(22番ポート)の許可も不要です。

操作ログの保存

今回の記事で設定方法は記載しませんが、操作ログのS3またはCloudWatch Logs保存が可能です。 ※時間があれば別記事で書こうと思います。

Session Mangerの接続手順

では実際に設定していきましょう。

事前準備1:IAMロールの作成

EC2がSystems Managerの機能を使用するために、IAMロールをEC2に設定する必要があります。(=EC2にSystems Managerの利用権限を付与する) 付与するためのIAMロールを作成します。

ユースケースのEC2を選択し、 f:id:fu3ak1:20200530123244p:plain

ポリシーはAWSが提供するマネージドポリシー「AmazonSSMManagedInstanceCore」を選択します。 f:id:fu3ak1:20200530123416p:plain

任意の名前を付けてロールを作成します。 f:id:fu3ak1:20200530123532p:plain

事前準備2:EC2のネットワーク設定

EC2からSystems Managerのエンドポイントへ接続できる必要があります。以下3パターンです。

  • パターン1「パブリックサブネットへ配置+パブリックIPの付与」

f:id:fu3ak1:20200530124926p:plain

  • パターン2「プライベートサブネットへ配置+NAT Gateway

f:id:fu3ak1:20200530124735p:plain

パターン1、パターン2については、インターネットへ疎通ができればOK(正確にはVPC外のSystems Manager)と考えて良いでしょう。

  • パターン3「VPCエンドポイントを使用したSystems Managerへの接続」

f:id:fu3ak1:20200530125428p:plain

外部へ接続できないEC2もSession Managerの利用が可能です。 手順が長くなるため本記事では割愛しますが、必要な方は公式ドキュメントを参考に実施してみましょう。

EC2の作成

事前準備が出来たのでEC2を作成していきます。EC2の基本的な作成方法は理解できているという前提で、ポイントを抜粋して説明していきます。

インスタンスの詳細の設定」の画面で、事前準備で作成したIAMロールを付与し、ネットワークも「事前準備2」のいずれかのパターンになるよう選択します。※本手順では今回はパターン2(NAT Gateway利用)で作成しています。

f:id:fu3ak1:20200530130422p:plain

SSM AgentがデフォルトでインストールされていないEC2を使用する場合は、ユーザーデータを使用してインストールする必要があります。 Amazon LinuxAmazon Linux 2 を使用する場合デフォルトでインストールされているため、この設定は不要です。

f:id:fu3ak1:20200530131329p:plain

例えばCentOS 7では以下のように記載します。

#!/bin/bash
cd /tmp
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

OSの種類によってインストール方法は異なりますので、公式ドキュメントを参考にしましょう。

セキュリティグループはインバウンド許可不要なので、許可設定を空の状態で作成します。 f:id:fu3ak1:20200530132107p:plain

キーペアも不要なため、キーペアなしで続行します。 f:id:fu3ak1:20200530132342p:plain

EC2への接続

ステータスチェックに合格していることを確認し、接続ボタンを押します。 f:id:fu3ak1:20200530133016p:plain

接続方法でセッションマネージャーを選択し、接続ボタンを押します。 f:id:fu3ak1:20200530133228p:plain

ブラウザで別タブが開き接続できました!ログインシェルが読み込まれないので必要に応じてbashコマンドなど実行しましょう。 f:id:fu3ak1:20200530134105p:plain

まとめと注意すべきポイント

いかがでしたでしょうか?慣れてくると簡単にサーバ接続ができるようになるかと思います。 同時に注意すべき点もいくつかあるので書いておきます↓

  • デフォルトではssm-userという権限の強いユーザーで接続します。(root権限にパスワード無しで昇格できる)本番環境で利用する際はRun-Asの設定で接続するOSユーザーを指定したり、コマンドの制限 を検討しましょう。

  • OSのパスワードの入力は不要で、IAMの権限のみでサーバに接続することができます。そのためIAM権限をむやみに渡さないなど、慎重に扱う必要があります。

  • 今回は全てマネジメントコンソール(ブラウザ)での手順を紹介しました。多くのコマンドを実行する場合はAWS CLIを使用したSession Manager接続がおススメです。こちらに書きました!