TECHSCORE BLOG

クラウドCRMを提供するシナジーマーケティングのエンジニアブログです。

SSHレスでEC2にアクセス!AWS Systems Manager Session Managerの活用法

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の高いセキュリティ機能を活用して、 より安全かつ効率的なインフラ管理を実現しましょう。

山口 正寛(ヤマグチ マサヒロ)
健康のために運動をしていますが握力が弱くて懸垂ができません
黙って背中で語れないですね


シナジーマーケティング株式会社では一緒に働く仲間を募集しています。