🙆

AWSのプライベートサブネットに配置されたEC2へのSession Managerを使ったアクセス

2023/07/30に公開

AWS EC2インスタンスをプライベートサブネットに配置し、AWS Systems ManagerのSession Managerを使用して接続する方法について説明します。以下の手順に従ってください。
※VPCの作成、プライベートサブネットは作成はここでは扱いません。

目次

  1. Session Managerについて
  2. プライベートサブネットにEC2インスタンスを作成する
  3. ステップ1: EC2インスタンスの作成
  4. ステップ2: IAMロールの作成
  5. ステップ3: EC2インスタンスにIAMロールをアタッチ
  6. ステップ4: VPCエンドポイントの作成
  7. ステップ5: Session ManagerでEC2にアクセスする
  8. まとめ
  9. 参考資料

Session Managerについて

Session ManagerはAWS Systems Managerの一部であり、安全にマネージドインスタンス(EC2インスタンスやOn-Premises Server)に接続するためのツールです。Session Managerを使用すれば、SSHキーの管理やインスタンスにパブリックIPを割り当てることなく、AWSのプライベートサブネットに配置されたEC2インスタンスに接続することができます。

プライベートサブネットにEC2インスタンスを作成する

ステップ1: EC2インスタンスの作成

  1. AWS管理コンソールから「EC2」ダッシュボードに移動します。
  2. 「インスタンスの起動」ボタンをクリックします。
  3. EC2の名前を入力します。ここでは「test-ec2」
  4. AMIとインスタンスタイプを選択します。
    今回はセッションマネージャーを使用するので、キーペアはなしで続行を選択します。
  5. ここで、ネットワークとサブネットの設定で、VPCとプライベートサブネットを選択します。
    セキュリティーグループを作成するを選択して、セキュリティグループのルールは「削除」します。
    これから作成するEC2には開放されているポートはない状態で作成されます。
  6. 「インスタンスを起動」をクリックします。


EC2インスタンスの作成は完了です。

ステップ2: IAMロールの作成

AmazonSSMManagedInstanceCoreというマネージドポリシーを持つIAMロールを作成する手順をご説明します。

  1. AWS管理コンソールにログインし、「IAM」サービスを開きます。
  2. 左側のパネルで「ロール」をクリックします。
  3. 「ロールの作成」ボタンをクリックします。
  4. 「AWSサービス」を選択し、「EC2」を選択します。これにより、EC2インスタンスがこのロールを使用できるようになります。「次のステップ:アクセス権限」をクリックします。
  5. ポリシーの検索ボックスに「AmazonSSMManagedInstanceCore」と入力し、該当するポリシーをチェックします。「次へ」をクリックします。
  6. ロールの名前と、必要であれば説明を入力します。その後、「ロールの作成」をクリックします。



    IAMロールの作成を完了です。

ステップ3: EC2インスタンスにIAMロールをアタッチ

  1. AWS管理コンソールから「EC2」サービスを開きます。
  2. 左側のパネルで「インスタンス」をクリックし、対象のインスタンスを選択します。
  3. 「アクション」→「セキュリティ」→「IAMロールの変更」を選択します。
  4. 「IAMロール」ドロップダウンメニューから先程作成したIAMロールを選択し、「IAMロールの更新」をクリックします。

これでEC2インスタンスはAmazonSSMManagedInstanceCoreポリシーを持つIAMロールを使ってAWS Systems ManagerのSession Managerと通信することができます。

※パブリックサブネットに配置されているEC2はIAMロールのアタッチのみでセッションマネージャー経由でアクセスできます。

ステップ4: VPCエンドポイントの作成

AWS Management Consoleを使ってVPCエンドポイントを作成する手順を以下に示します。今回は、東京リージョン(ap-northeast-1)を例にしますが、他のリージョンを使用している場合は、それに応じて変更してください。

  1. サービスメニューから「VPC」を選択します。

  2. VPCダッシュボードの左側のパネルで「セキュリティーグループ」を選択します。

  3. セキュリティーグループ名を入力し、インバウンドルールで『HTTPS」のポートをついかします。
    セキュリティグループを作成をクリックします。

  4. VPCダッシュボードの左側のパネルで「エンドポイント」を選択します。

  5. 「エンドポイントの作成」ボタンをクリックします。

  6. エンドポイント名を入力、サービス検索欄に「ssm」を入力してEnterを押すと候補がでます。
    .ssm で終わるエンドポイントを選択します。:

    • com.amazonaws.ap-northeast-1.ssm


7. 「VPC」ドロップダウンメニューから、適切なVPCを選択します。

  1. 「サブネット」セクションで、エンドポイントを配置したいすべてのサブネットを選択します。
    今回はEC2を配置した、プライベートサブネットを選択します。
    選択したAZ分料金が発生するので、使用しないものにはチェックをつけないようにしてください。

  2. 先ほど作成した、VPCエンドポイント用のセキュリティグループを選択します。

  3. 「エンドポイントの作成」ボタンをクリックします。

これらの手順を次のすべてのサービス名(ec2messages、ssmmessages)に対して繰り返します。これにより、プライベートサブネットに配置されたEC2インスタンスがこれらのサービスと直接通信できるようになります。これは、Session ManagerがEC2インスタンスと通信するために必要な設定です。
com.amazonaws.ap-northeast-1.ec2messages の作成画面

com.amazonaws.ap-northeast-1.ssmmessagesの作成画面

最終のVPCエンドポイントの一覧

ステップ5: Session ManagerでEC2にアクセスする。

  1. AWS管理コンソールから「EC2」サービスを開きます。

  2. 左側のパネルで「インスタンス」をクリックし、対象のインスタンスを選択して、上の「接続」ボタンをクリックします。

  3. セッションマネージャーを選択して「接続」ボタンをクリックします。

  4. プライベートサブネットに配置されたEC2へのSession Managerを使ったアクセスができました。

まとめ

この記事では、プライベートサブネット内のEC2インスタンスに接続するためのSession Managerの使用方法を紹介しました。この機能により、SSHキーの管理やパブリックIPの割り当てなしで、プライベートサブネットに配置されたEC2インスタンスに安全にアクセスすることができます。

ハンズオン形式のガイドを読んでいただきありがとうございました。AWSの管理と運用が少しでも楽になれば幸い

注意点

VPCエンドポイント作成して、セッションマネージャーでEC2に接続しようとするとエラーになることがあります。
その場合は、時間をあける、インスタンス一覧画面を更新を試してみてください。
それでも接続できない場合は、設定が足りていない場合があるので、確認する必要があります。

参考資料

セッションマネージャー越しにSSHアクセスすると何が嬉しいのか
https://dev.classmethod.jp/articles/ssh-through-session-manager/

セッションマネージャーのハマりどころをパターンごとに整理してみる
https://dev.classmethod.jp/articles/session-manager-pattern/

GitHubで編集を提案

Discussion