Session Managerを利用してEC2へセキュアに接続する方法
AWS Systems Manager (旧SSM) とは、AWS 内リソースの構成/変更管理やアプリケーションパラメータの集中管理など、さまざまな管理系機能が集合したサービスです。
この AWS Systems Manager 内に「Session Manager」というサービスがあります。Session Managerは AWS 内で EC2 を利用している環境において、メンテナンス性とネットワークセキュリティの観点から非常に優位性の高いサービスといえます。
本記事では、Session Managerを利用してEC2のインスタンスへセキュアに接続する方法を解説します。
この記事の目次
Session Manager でできること
代表的な利用方法には以下が挙げられます。
- AWS マネジメントコンソールから EC2 インスタンスへコンソールログインできる
- Session Manager を経由して EC2 インスタンスへ SSH 接続できる
上記のメリットは以下となります。
- 踏み台サーバーを用意する必要がない
- 外部(主にインターネット)に対してメンテナンス経路を事前に準備する必要がない
- EC2 インスタンスへ PublicIP/ElasticIP をアサインする必要がない
具体的な Before/After のネットワーク設計イメージを図示します。
Session Manager を利用することで、非常にシンプルなアーキテクチャを実現可能です。
Session Manager を利用する上で知っておくべきこと
Session Manager を利用する上で設計上考慮しておくべき点をいくつか列挙します。
1. EC2 インスタンスへ SSM Agent を導入し稼働させておく
これは Linux を利用する場合、Amazon Linux 2 を AMI として利用していればデフォルトで稼働しているため、とくに考慮する必要はありません。
2. ssm-user でログインする
AWS マネジメントコンソールからログインした場合、ssm-user でログインすることになります。
また、ログイン後のカレントディレクトリが「/usr/bin」になるため、「sudo」などで適切なユーザへ切り替えてください。
3. 厳密なログインユーザのコントロールは難しい
単一の EC2 インスタンスにおいて、複数の OS ユーザに対し厳密にサーバーリソースをコントロールしているような環境下においては、AWS マネジメントコンソールからの接続は禁止するべきです(※2に由来する)。
SSH で接続する場合には、秘密鍵で制御可能なためこの限りではありません。
4. OS ユーザでは無く IAM ユーザ管理を意識する
Session Manager を利用して EC2 インスタンスへ接続可能かどうかは、IAM ユーザの権限に依存します。そのため、従来のような Linux OS 上でのユーザ管理でなく、IAM Role/IAM Policy での接続制御/管理を意識した設計が必要となります。
また、どの IAM ユーザがいつどの EC2 インスタンスへログインしたのかは AWS CloudTrail へすべて記録されます。
セットアップ手順
0. 前提
本記事では EC2 インスタンスに「Amazon Linux 2」を利用しており、クライアントに「macOS」を利用していることを前提とした手順を記載します。
尚、AWS 公式ドキュメント上にはさまざまな OS 向けの手順が記載されているので、以降の手順内で随時案内しますが、他環境の場合にはそちらをご確認ください。
1. EC2 インスタンス上での手順
バージョン 2.3.672.0 以上の SSM aエージェントがインストールされている必要があります。
公式の手順は[こちら](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-manual-agent-install.html)を参照してください。
尚、現時点のAmazon Linux 2にはデフォルトで SSM エージェントがインストールされているので以下手順は必要ありません。
1. バージョン確認
$ rpm -qi amazon-ssm-agent
2. アップデート
$ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
3. SSMエージェントをリスタート
$ sudo systemctl restart amazon-ssm-agent
2. IAM の設定
IAM ユーザへ以下のポリシーをアサインします。
尚、対象の IAM ユーザへ AdministratorAccess 権限が付与されている場合には必要ありません。
– AmazonSSMFullAccess
EC2 インスタンスへ以下のポリシーが含まれる IAM Role をアサインします。
– AmazonSSMManagedInstanceCore
3-1. AWS マネジメントコンソールから接続する場合
まずは、AWS マネージメントコンソールから Session Manager にて接続可能であることを確認します。
1. EC2 の管理コンソールから対象のインスタンスを選択し、右上の「接続」ボタンを押下します。
2. 適切に IAM Role の設定が行えている場合には「接続」ボタンが押せるようになっているので押下します。
3. 接続に成功すると Web ブラウザ上へログインシェルが表示されます。
ログアウトするには右上の「終了」ボタンを押下するか、シェル上で「exit」または「Ctrl + D」を入力することでログアウト可能です。
3-2. SSH で接続する場合
v1.16.12 以上の AWSCLI と、v1.1.23.0 以上の Session Manager プラグインが必要となります。
公式の手順は[こちら](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html)を参照してください。
1. AWSCLI のインストール
$ brew install awscli
2. プラグインのインストール&アップデート
$ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
$ unzip sessionmanager-bundle.zip
$ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
3. バージョン確認
$ session-manager-plugin --version
1.2.279.0
4. ssh config の作成
$ vim ~/.ssh/config
# SSH over Session Manager
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
複数の EC2 インスタンスやプロファイルを管理している場合は以下のように記載します。
$ vim ~/.ssh/config
Host <uniq name>
HostName <instance id>
User ec2-user
Port 22
ProxyCommand sh -c "aws --profile <profile name> ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
IdentityFile <pem file path>
TCPKeepAlive yes
IdentitiesOnly yes
5. SSH/SCP 接続
$ ssh -i <秘密鍵> ec2-user@<インスタンスID>
or
$ ssh <uniq name>
$ scp -i <秘密鍵> <ローカルファイル> ec2-user@<インスタンスID>:<転送先のディレクトリ>
まとめ
本記事ではAWS Systems Manager内の一機能であるSession Managerを使用して、EC2インスタンスへセキュアに接続する方法を解説しました。Session Managerを利用することで、グローバルIPを持たないEC2のインスタンスにアクセスするために、従来のようにメンテナンス用の経路や踏み台サーバーを用意する必要がなくなるほか、セキュリティの向上も期待できます。Session Managerを利用する上では、IAMユーザのポリシーを意識した設計が必要となるため、IAMユーザの権限を適切に管理するように心がけましょう。
AWS上で稼働するシステムをセキュアに運用するためには、それを意識したインフラ設計・構築が必要となります。もしAWSの設計・構築・運用に課題をお持ちであれば、「ベアサポート」までお気軽にご相談ください。