Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

【AWS】AWSマネジメントコンソールから、セッションマネージャーを使ってEC2に接続

はじめに

環境構築時や運用時など、EC2インスタンスにアクセスする機会は多々ありますが、アクセス方法も複数あります。
多くの場合はキーペアを使用したSSH接続を使われていると思いますが、AWSマネジメントコンソールからコンソールアクセスできることはご存じでしょうか。
AWS Systems Manager(以降、SSM)のSession Managerを使うことで、EC2インスタンスへのセキュアなアクセスが可能になります。
この方法では、以下のようなメリットがあります。

  • インバウンドでSSHポートを開く必要がないので、セキュリティリスクを軽減できる
  • SSHキーを管理する必要が無くなる
  • プライベートサブネットのインスタンスにも踏み台ホスト無しでアクセス可能になり、踏み台の管理が不要になる
  • AWSコンソールから簡単にアクセスできる
  • セッションの記録が残せるため、監査にも使える

この記事では、EC2インスタンスにSession Managerを使用して、AWSコンソールからアクセスするまでの実装方法を紹介します。

前提

よく見かける構成として以下のような環境を想定し、この前提のもと実装手順を紹介します。

  • プライベートサブネットに構築したAmazon Linux 2のEC2インスタンス(実行中)
  • プライベートサブネットからNATGatewayへの経路を設定済み
  • SSM Agentはデフォルトでインストール・稼働している状態
  • アクセスするユーザが使用するIAMユーザは作成済み

設定の流れ

  • SSMを使うためのEC2用IAMロール(インスタンスプロファイル)の作成
  • IAMロールをEC2にアタッチ
  • アクセスするユーザ用のIAMポリシー作成・付与
  • アクセス方法

設定手順

  • SSMを使うためのEC2用IAMロール(インスタンスプロファイル)の作成

    AWS Systems ManagerがインスタンスにアクションするためのIAMロールを作成します。 必要なIAMポリシーは AmazonSSMManagedInstanceCore です。

    1. IAM > ロール > ロールを作成を選択
    2. 信頼されたエンティティを選択
      信頼されたエンティティを選択、の画面。
      信頼されたエンティティタイプ:AWSのサービス
      ユースケース:EC2
    3. 許可を追加
      許可を追加、の画面。
      許可ポリシー: AmazonSSMManagedInstanceCore ポリシーのチェックボックスを選択(AmazonSSMManagedInstanceCoreで検索)
    4. 名前、説明、タグ、作成確認
      ロールの詳細画面の上部。
      ロール名:分かりやすい名前を入力(例ではec2-ssm-role)
      説明:必要があれば変更
      タグ:必要があれば追加

      ここまで設定したら、ロールを作成 を選択します。
      ロールの詳細画面下部。ロールを作成ボタンを押している。

      作成したロールが一覧に表示されていることを確認
      ロール一覧画面。作成したロールが、ロール一覧の中に表示されていることを確認している。

  • IAMロールをEC2にアタッチ

    1. EC2 > 対象インスタンスにチェック > アクション > セキュリティ > IAMロールを変更 を選択
      EC2のインスタンス一覧画面。インスタンスを選択し、アクション、セキュリティ、IAMロールを変更、を順に押している。
    2. ひとつ前に作成したIAMロール(例ではec2-ssm-role)を選択し、IAMロールの更新 を選択
      IAMロールを変更、の画面。IAMロールが選択され、IAMロールの更新ボタンを押している。

  • アクセスするユーザ用のIAMポリシー作成・付与

    管理者ユーザなどの場合はすでに必要な権限があるかもしれませんが、アクセスするIAMユーザに必要な権限がない場合は追加する必要があります。

    こちらに公式のポリシーサンプルがあります。
    https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/getting-started-restrict-access-quickstart.html

    今回は公式ポリシーをベースに、以下のようなポリシーを作成し、IAMユーザに追加します。
    変更点:

    • EC2コンソールから接続するためにssm:DescribeInstanceInformationを追加
    • KMSキーによるセッションデータの暗号化はデフォルトで無効化状態のため、該当する部分を削除
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ssm:StartSession"
                  ],
                  "Resource": [
                      "arn:aws:ec2:ap-northeast-1:<account-id>:instance/<instance-id>",
                      "arn:aws:ssm:ap-northeast-1:<account-id>:document/SSM-SessionManagerRunShell"
                  ],
                  "Condition": {
                      "BoolIfExists": {
                          "ssm:SessionDocumentAccessCheck": "true"
                      }
                  }
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "ssm:DescribeSessions",
                      "ssm:GetConnectionStatus",
                      "ssm:DescribeInstanceProperties",
                      "ssm:DescribeInstanceInformation",
                      "ec2:DescribeInstances"
                  ],
                  "Resource": "*"
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "ssm:TerminateSession",
                      "ssm:ResumeSession"
                  ],
                  "Resource": [
                      "arn:aws:ssm:*:*:session/${aws:username}-*"
                  ]
              }
          ]
      }
    
    1. IAM > ポリシー > ポリシーを作成 を選択
    2. ポリシーの作成 では JSON のタブで上記のポリシーを上書き
      ※ポリシー内の <account-id> , <instance-id> は使用している環境に合わせて変更してください。
      IAMポリシーのJSON記述画面。上記のポリシーで上書きされている。
    3. タグ、名前、説明、作成確認
      タグ:必要があれば追加
      名前:分かりやすい名前を入力(例ではssm-user-policy)
      説明:必要があれば変更

      ポリシーの確認、の画面。名前が入力されている。

      ここまで設定したら、ポリシーの作成 を選択します。

      作成したポリシーが一覧に表示されていることを確認
      ポリシー一覧画面。作成したポリシー名で検索し、一覧の中に表示されていることを確認している。

    4. 作成したポリシーをユーザーグループ等にアタッチ
      今回は接続テスト用のユーザを参加させているssm-users-groupというユーザーグループにアタッチしました。
      ユーザーグループに、作成したポリシーが追加されている画面。

  • アクセス方法

    ここまで設定できましたら、次はアクセス確認をします。 方法は複数ありますが、アクセス対象が分かりやすい、EC2コンソールからの接続を紹介します。

    1. EC2 > インスタンス > アクセス対象のインスタンスを選択(チェック) > 接続を選択
      EC2のインスタンス一覧画面。インスタンスを選択し、接続ボタンを押している。
    2. セッションマネージャータブで接続を選択
      インスタンスに接続、の画面。セッションマネージャー、のタブを選択し、接続ボタンを押している。
    3. コンソール画面が開けば成功
      コンソール画面。セッションIDと接続しているインスタンスIDが表示され、コンソールは入力待ちになっている。

      途中エラーになった場合や、コンソール画面で入力ができない等の不具合があれば、前提条件や設定で何か漏れている可能性があります。
      参考に記載の前提条件やトラブルシューティングをご確認ください。

補足

  • セッションデータはデフォルトでTLS 1.2を使用した暗号化が行われています。
  • 今回の設定では、自動でssm-userというOSユーザが作成され、アクセス時に使用されます。
    OSユーザ権限の管理などを行っている場合は、そちらをご確認ください。
    (アクセス時に使用するOSユーザを指定する方法もありますので、別の記事で紹介します。)
  • セッションの履歴は Systems Manager > セッションマネージャー > セッション履歴 から確認できます。

おわりに

今回はEC2インスタンスへの、Session Managerを使用したコンソールアクセスの実装方法を少し細かく書いてみました。
プライベートなインスタンスに対しても、管理コストを抑えたセキュアなアクセスを実現できます。
ぜひ活用してみてください。

参考

  1. AWS Systems Manager Session Manager(公式ドキュメント) https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html
  2. Session Manager の前提条件 https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-prerequisites.html
  3. Session Manager のトラブルシューティング https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-troubleshooting.html
  4. AWS Systems Manager でのデータ保護 https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/data-protection.html