はじめに
Session Managerというものを今更知った。
セキュリティグループでsshを開けたり、踏み台サーバを経由してEC2にアクセスしたり、といったことがより楽に、安全になるようだ。
本記事では
- Session Managerの基本的な設定手順
- 監査ログの出力設定手順
- Session Manager + ssh,scpコマンドでEC2にアクセスする手順
- Session Managerでのアクセスを無効にする手順
を示す。
Session Managerとは
Session Manager はフルマネージド型 AWS Systems Manager 機能であり、インタラクティブなワンクリックブラウザベースのシェルや AWS CLI を介して、EC2 インスタンス、オンプレミスインスタンス、仮想マシン (VM) を管理できます。Session Manager を使用すると、インバウンドポートを開いたり、踏み台ホストを維持したり、SSH キーを管理したりすることなく、監査可能なインスタンスを安全に管理できます。また、Session Manager を使用すると、マネージドインスタンスへの簡単なワンクリックのクロスプラットフォームアクセスをエンドユーザーに提供しつつ、インスタンスへの制御されたアクセス、厳格なセキュリティプラクティス、完全に監査可能なログ (インスタンスアクセスの詳細を含む) が要求される企業ポリシーに簡単に準拠できます。
上記をまとめるとSession Managerのメリットは大きく分けると以下の2つである。
- SSH鍵、アクセス制御、踏み台サーバの管理・設定が不要になる
- 監査ログを残すことができる
Session Managerの基本的な設定手順
EC2インスタンス、ロール作成などの基本的な部分は掻い摘んで説明させていただく。
EC2インスタンスの作成
セキュリティグループでSSHを許可する必要はない。
キーペアの作成も不要。
ロール作成
IAMでロールの作成を行う。ユースケースの選択
でEC2
を選択する。
AmazonSSMFullAccess
を選択する。
適当に名前を入力し、ロールを作成する。
ロールをEC2へアタッチ
EC2インスタンスの作成で作成したインスタンスを選択し、IAM ロールの割り当て/置換
を選択する。
ロール作成で作成したロールを選択し、適用する。
Session Managerを起動し、EC2にログイン
インスタンスをチェックし、接続
ボタンを押下する。
セッションマネージャー
を選択し、接続
ボタンを押下する。
別タブでターミナルが表示される。
以下のコマンドでec2-user
にスイッチすれば、いつものように扱える。
sudo su --login ec2-user
監査ログの出力設定手順
CloudWatch Logsの有効化
AWS Systems Managerでナビゲーションペインのセッションマネージャー
を選択する。
設定
タブを選択し、編集
ボタンを押下する。
CloudWatch Logs
をチェック。ログデータを暗号化する
は今回はチェックしない。CloudWatchのロググループ
は、事前に作成したものを指定する。
ログ出力の確認
ログの出力を確認するため、もう一度EC2インスタンスにログインし、コマンドを実行してみる。
Session ManagerのTOP画面からログインする。セッションの開始
を押下する。
インスタンスを選択し、セッションを開始する
を押下する。
無事ログインできた。
適当にコマンドを入力した後、右上の終了
ボタンを押下し、セッションを終了する。
CloudWatch Logsに移動し、監査ログの出力設定手順で指定したロググループにログストリームが作成されていること、入力したコマンドが出力されていることを確認する。
Session Manager + ssh,scpコマンドでEC2にアクセスする手順
Session ManagerでEC2インスタンスにSSH, SCPで接続するためにはEC2の秘密鍵が必要だ。
これを試す際はEC2インスタンスを再作成して、秘密鍵をダウンロードしておくこと。
SSMエージェントのインストール
EC2インスタンスにSSMエージェントのバージョン2.3.672.0以降がインストールされている必要がある。
Amazon Linuxにはデフォルトでインストールされているため、インストール作業は不要。
その他の場合はこちらの目次を参考にインストールしていただきたい
SSM許可ポリシーの作成し、接続を有効化
本手順はユーザが管理者権限を持つ場合、実施不要。
Session Managerのセッション開始を許可するIAMポリシーを作成する。
IAMコンソールからポリシー
を選択し、ポリシーの作成
ボタンを押下する。
JSON
タブを選択し、以下のJSONを貼り付け、ポリシーを作成する。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ssm:StartSession",
"Resource": [
"arn:aws:ec2:*:*:instance/instance-id",
"arn:aws:ssm:*:*:document/AWS-StartSSHSession"
]
}
]
}
IAMコンソールに戻り、ユーザを選択し、先ほど作成したポリシーをアタッチする。
AWS CLIのインストール
以下にしたがってAWS CLIをインストールする。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2.html
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-configure.html
Session Managerプラグインのインストール
以下にしたがってSession Managerプラグインをインストールする。
SSH設定ファイルを更新
~/.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'"
接続
ssh -i /path/my-key-pair.pem username@instance-id
無事接続することができた。
scpコマンドも同様に接続することができる。
Session Managerでのアクセスを無効にする手順
Session Managerのセッション開始を拒否するIAMポリシーを作成する。
IAMコンソールからポリシー
を選択し、ポリシーの作成
ボタンを押下する。
JSON
タブを選択し、以下のJSONを貼り付け、ポリシーを作成する。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor1",
"Effect": "Deny",
"Action": "ssm:StartSession",
"Resource": "arn:aws:ssm:*:*:document/AWS-StartSSHSession"
}
]
}
IAMコンソールに戻り、ユーザを選択し、先ほど作成したポリシーをアタッチする。
SSHコマンドを実行し、EC2への接続が拒否されることを確認する。
おわりに
System Managerについて基本を学んだ。より、手軽に安全にEC2にアクセスできるので積極的に活用したい。
余談だが、SSH接続の際、パーミッション問題などでなかなか接続するのに苦労した。
デバッグログ出力させるとトラブルシューティングしやすかった。
ssh -vT 〜
参考
https://qiita.com/e__koma/items/009565384efbecb8a46e
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html
https://dev.classmethod.jp/articles/session-manager-launches-tunneling-support-for-ssh-and-scp/
https://www.bioerrorlog.work/entry/session-manager-ec2-user