EC2インスタンスに接続する際、真っ先に思い浮かぶのはSSHだと思います。新規にインスタンスを起動する際にもキーペアの入力を求められ、セキュリティグループの作成時にSSHトラフィックの許可がデフォルトでチェックされています。これにより、SSHで接続しやすい設計になっています。
しかし、AWS Systems Manager Session Managerを利用することでSSHを使わずにEC2インスタンスに接続することが可能です。
※以前はEC2インスタンスごとの設定が必要でしたが、デフォルトのホスト管理設定(DHMC、Default Host Management Configuration)を用いることで一括して設定することができます。
この記事では、DHMCを用いたAWS Systems Manager Session Managerの設定方法について詳しくお伝えします。
※2023年2月17日のリリースAWS Systems Manager をアカウント内すべての EC2 インスタンスにおいてデフォルトで有効にする新機能が登場
なぜSSHを使わないのか
SSHを使わないことでセキュリティ面で次の利点があります。
ポートの閉鎖
ポート22(SSH)を開けておく必要がないため、ポートスキャン攻撃や不正アクセスのリスクが減少します。SSH鍵の管理不要
SSH鍵の生成、管理、公開鍵の配置などが不要です。さらに、鍵を紛失したり、盗まれたりするリスクもありません。
AWS Systems Manager Session Managerで接続するための設定
ここでは、「デフォルトのホスト管理設定(DHMC)」を用いたAWS Systems Manager Session Managerの設定を、マネージメントコンソールを操作して実施していきます。
(画面は2024年10月時点のキャプチャですので、見た目が変更されている可能性があります。)
1. サービスからAWS Systems Managerを開く
2. 左メニューからフリートマネージャーをクリックし、右上の使用を開始するをクリックする
3. (2.の 使用を開始するをクリックすると)フリートマネージャーの画面に遷移する
4. 右上アカウント管理をクリックして展開して、デフォルトのホスト管理設定を設定するをクリックする
5. デフォルトのホスト管理設定を設定する画面に遷移する
6. デフォルトのホスト管理設定を有効にするを有効にして
7. IAMロールは、AWSSystemsManagerDefaultEC2InstanceManagementRoleを作成(推奨)を選択する
8. 右下の設定をクリックする
9. これで、デフォルトのホスト管理設定が有効化される
EC2に接続してみる
手元の端末から接続する
Session Manager プラグインをインストールした AWS CLI を用いるとSSHのように手元の端末から接続できます。
私はMacから接続を行いましたが、LinuxやWindowsでも同様の手順で接続できます。
1. EC2に接続するためのIAMユーザーの作成
IAMからユーザーの作成を行う
ユーザー名は適宜つけてあげる。
(ここではssmDEMOとした)
許可を設定では、特に何もせずに次へで進む
(あとでインラインポリシーをアタッチするので)
ユーザーの作成ボタンを押して作成を完了する
2. ユーザーにインラインポリシーをアタッチ
先ほど作成したユーザー名をクリックして、許可ポリシー=>インラインポリシーを作成を選択する
アクセス許可を指定でJSONエディタを選択して下記のポリシーに修正する
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:SendCommand" ], "Resource": [ "arn:aws:ssm:*:*:document/SSM-SessionManagerRunShell", "arn:aws:ec2:*:*:instance/*" ] }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession", "ssm:ResumeSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:userid}-*" ] } ] }
ポリシー名は適宜つけてあげる(ここではSystemsManagerSessionManagerとした)
3. アクセスキーの作成
セキュリティ認証情報からアクセスキーを作成をクリックする
ユースケースはコマンドラインインターフェイス(CLI)を選ぶ
説明タグ値は適宜つけてあげる(ここではSystemsManagerSessionManagerとした)
アクセスキーとシークレットアクセスキーを必ずメモする(ここで見逃すと二度と見られない)
4. AWS CLIを使用するために必要な設定をする
aws configure
コマンドを発行して
- AWS Access Key ID: AWSアカウントのアクセスキーID
- AWS Secret Access Key: AWSアカウントのシークレットアクセスキー
- Default region name: デフォルトで使用するAWSリージョン
- Default output format: 出力形式(例: json, yaml, text)
を設定する
$ aws configure AWS Access Key ID [None]: ************ AWS Secret Access Key [None]: ************ Default region name [None]: ap-northeast-1 Default output format [None]: json
5. AWS CLI 用のSession Managerプラグインをインストールする
AWS提供のドキュメントAWS CLI用のSession Managerプラグインをインストールするに沿って、接続元に応じたsession-manager-plugin
のインストールを行う。
6. EC2に接続
$ aws ssm start-session --target インスタンスID
これで、手元の端末からSSHを使用せずにEC2に接続することができました。
このほかに、ブラウザ上でセッションマネージャーを用いる方法や、CloudShellから接続する方法もあります。
まとめ
AWS Systems Manager Session Managerを利用することで、SSHを使わずにEC2インスタンスに安全に接続することができます。この方法により、ポートスキャン攻撃や不正アクセスのリスクを軽減でき、SSH鍵の管理負担もなくなりま す。デフォルトのホスト管理設定(DHMC)により、特別な設定をしていないEC2インスタンスにも簡単に適用できるため、ポートを開けずにメンテナンスを行いたい場合にも非常に有用です。AWSの高いセキュリティ機能を活用して、 より安全かつ効率的なインフラ管理を実現しましょう。
黙って背中で語れないですね