びくんびくんしながらコードを書く。

いしきひくい系エンジニアのらくがき帳

AWS EC2の接続にAWS System ManagerのSession Managerを利用する ※Webコンソール編

本記事は ディップ with 全部俺 AdventCalendar 19日目の記事です。

最近はDockerやserverlessなサービスの台頭であまりVM(EC2)インスタンスを立てることは少なくなってきたかと思います。

しかし、AWSのに閉じたVPCからしかアクセスできないRDSに接続して中身を見たい。
マイグレーションを実施するのにEC2インスタンスが必要等、細かい単位ではまだまだEC2の利用はあると思います。

今回はそんなEC2インスタンスに対し、sshではない接続方法として、SessionManagerの紹介をしたいと思います。

what is Session Manager?

Session Manager はフルマネージド型 AWS Systems Manager 機能で、インタラクティブなワンクリックブラウザベースのシェル、または AWS CLI を介して Amazon EC2 インスタンスを管理できます。Session Manager は、インバウンドポートを開いたり、踏み台ホストを維持したり、SSH キーを管理したりすることなく、安全で監査可能なインスタンスの管理を提供します。Session Manager は、Amazon EC2 インスタンスへの簡単なワンクリックのクロスプラットフォームアクセスをエンドユーザーに提供しつつ、インスタンスへの制御されたアクセス、厳格なセキュリティプラクティス、インスタンスアクセスの詳細を含む、完全に監査可能なログを必要とする企業ポリシーに準拠することを容易にします。

公式より

つまりどういうこと?

sshではなく、AWSの機能として、EC2に対してCLIのAccessができちゃうモノ。 セキュリティーグループで特定のIPからのsshAccessを許可する設定の追加や踏み台サーバの用意なしにアクセスできるようになります。

事前準備

SessionManagerを利用するためにはいくつかの事前準備が必要です。

  1. EC2で利用しているIAMロールに AmazonEC2RoleforSSM ポリシーがアタッチされていること。
  2. 該当インスタンスに amazon-ssm-agent がインストールされていること
    ※AmazonLinuxの場合、すでにインストールされているのでupdateを実施すれば良い

上記の準備が整えばSessionManagerを利用することが出来ます。

インスタンス作成当初からSessionManagerを使いたい

事前準備をEC2を立てるときにしてしまえばEC2作成当初からSessionManagerを利用することが可能です。
1.のポリシーについては与えるロールに予めアタッチしておきましょう。 2.のamazon-ssm-agentについてはEC2作成時のユーザデータのところに下記Commandを入力します。

#!/bin/bash
yum update -y

※上記はAmazonLinuxを利用している場合に有効です。

それ以外のディストリビューションの場合はPackageManager経由でamazon-ssm-agentをインストールしましょう。下記にCentOSの場合を記載します。

#!/bin/bash
set -o xtrace
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm

実際に作ってみよう

今回は紹介記事のため、下記のようなインスタンスを用意しました。
SecurityGroupはあえてSSHポートを締め出しています。
※AmazonLinux2のため、ユーザデータ欄には上記の yum update のCommandが入力されています。

インスタンス詳細
インスタンス詳細

また、登録するキーペアについてもSSMを利用するので登録なしとします。

キーペアの設定
キーペアの設定

作成されるのを待ちます。
※Nameは一覧に移ったあとわかりやすいように追加しています。

作成待ち
作成待ち

使ってみよう

今回は紹介のため、コンソール上でのAccessを行います。
サービス名はSessionManagerではなくSystemManagerです。

検索文字列"system"
検索

SystemManagerの画面の左サイドバーからセッションマネージャーを選択します。

セッションマネージャーの画面から「セッションの開始」をクリックします。
すると、ターゲットインスタンスを選択する画面になるので、ターゲットとなるインスタンスを選択し、「セッションの開始」をクリックします。

ターゲットインスタンスの選択
ターゲットインスタンスの選択

すると、別タブで黒い画面が表示されます。
これでセッションマネージャーから無事にEC2インスタンスへAccess出来たことになります。

AWS CLIからもセッションマネージャを利用しTerminalライクに接続できるので、そちらもチャレンジしてみてください。

以上