Windows ServerのAmazon EC2に別VPCのエンドポイントから接続する

AWS

2024.3.7

Topics

はじめに

システムを構築する際にプライベートネットワークに配置して外部に接続させないサーバーを操作するために、VPCにエンドポイントを作成して活用する場合があります。
しかしシステムがある程度大きくなると複数のVPCをつなげてシステムを構築することもあり、そうした場合VPC毎にエンドポイントを作成するとエンドポイント自体の管理が負担となってしまいます。

そこで今回は下記2つのエンドポイントを使用した接続で、異なるVPCのエンドポイントを活用した接続方法を記載します。
・EC2 Instance Connect Endpoint
・フリートマネージャー

今回はEC2インスタンスはWindows Server、VPC接続はVPCピアリングを想定しています。

以降の説明ではエンドポイントを作成するVPCを「endpoint-vpc」、EC2インスタンスを作成するVPCを「EC2-vpc」とします。
また構築するEC2インスタンスに関してはSSMエージェントが既にインストールされているAMIを使用します。

1.VPC同士のネットワーク設定

1-1.endpoint-vpcとEC2-vpcを接続するピアリング接続を作成します。

1-2.ピアリングを作成したらそれぞれのVPCのエンドポイント、EC2インスタンスが配置されるサブネットのルートテーブルに双方のネットワーク帯のルーティング設定を行います。
・endpoint-vpc側

・EC2-vpc側

双方のVPCの通信設定ができたらエンドポイントの設定を行いますが、先に挙げた二つのエンドポイントの設定はそれぞれ異なります。
そのため「EC2 Instance Connect Endpoint」の手順を2-A、「フリートマネージャー」の手順を2-Bとして記載します。

2-A.エンドポイントの設定(EC2 Instance Connect Endpoint)

2-A-1.endpoint-vpcに「EC2 Instance Connect Endpoint」を作成します。作成の際に使用するサブネットは1-2でルーティングを設定したルートテーブルを使用するサブネットを指定します。

2-A-2.endpoint-vpcからの通信を許可するため、EC2インスタンスのセキュリティグループを設定します。

2-A-4.エンドポイント接続用のユーザーを作成します。
・クライアントPCよりAWS CLIを利用するため、作成後はアクセスキーの発行を行います。

・許可ポリシーについては今回は下記の通り設定しますが、アカウントの利用用途やリソースへのアクセス制限等が必要な場合は適宜変更してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GrantEC2EndpointInAllSubnets",
            "Action": [
                "ec2-instance-connect:OpenTunnel",
                "ec2:DescribeInstanceConnectEndpoints",
                "ec2:DescribeInstances"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

2-A-3.クライアントPCにAWS CLIをインストールしてAWSアカウントのクレデンシャルを設定します。
・今回のクライアントPCについてはWindowsを使用しています。

・クレデンシャルファイルの位置は「C:\Users\ユーザーアカウント名\.aws」フォルダ配下にあります。

・操作用ユーザーからアクセスキーを取得し、クレデンシャルファイルに記載します。

2-A-4.下記コマンドをクライアントPCのコマンドプロンプトで下記のいずれかのコマンドを実行してローカルPCに接続用ポートをリスニングさせます。

▼EC2インスタンスのインスタンスIDを指定する場合
aws ec2-instance-connect open-tunnel --instance-connect-endpoint-id エンドポイントID --instance-id "インスタンスID" --remote-port 3389 --local-port 13389

▼EC2インスタンスのプライベートIPを指定する場合
aws ec2-instance-connect open-tunnel --instance-connect-endpoint-id エンドポイントID --private-ip-address プライベートIP --remote-port 3389 --local-port 13389

※プライベートIPで接続する場合はポリシー内に設定した「ec2:DescribeInstances」の許可は不要です。

2-A-5.リモートデスクトップで「localhost:13389」に接続し、Windows ServerのユーザーアカウントとPASSを入力してログインできれば成功です。


2-B.エンドポイントの設定(フリートマネージャー)

2-B-1.endpoint-vpcに「com.amazonaws.ap-northeast-1.ssm」「com.amazonaws.ap-northeast-1.ssmmessages」「com.amazonaws.ap-northeast-1.ec2messages」の3つのエンドポイントを作成します。

2-B-2.endpoint-vpcからの通信を許可するため、EC2インスタンスのセキュリティグループを設定します。

2-B-3.SSMエージェントからの操作を行うため、SSMのロールを設定します。
・ロールの許可ポリシーには「AmazonSSMManagedInstanceCore」を設定します。

2-B-4.作成した各エンドポイントの「サブネット」のタブを選択し、一覧に記載されているIPアドレスを確認します。

※複数のサブネットにまたがっている場合は、すべてのIPを確認します。

2-B-5.EC2インスタンスを停止してユーザーデータに下記PowerShellを登録し、起動の際にWindows Server hostsにエンドポイントのレコードを登録します。

version: 1.0
tasks:
- task: executeScript
  inputs:
  - frequency: always
    type: powershell
    runAs: localSystem
    content: |-
      Add-Content "C:\Windows\System32\drivers\etc\hosts" "調べたIP`tssm.ap-northeast-1.amazonaws.com"
      Add-Content "C:\Windows\System32\drivers\etc\hosts" "調べたIP`tssmmessages.ap-northeast-1.amazonaws.com"
      Add-Content "C:\Windows\System32\drivers\etc\hosts" "調べたIP`tec2messages.ap-northeast-1.amazonaws.com"


※ユーザーデータの設定は既に起動されており、ユーザーデータが初回以降の実行の想定となり、毎回実行される設定となりますので、接続が確認できたらユーザーデータを削除した方が良いです。新たに構築する際に実行させる場合は「- frequency: once」の設定で良いかと思われます。
※エンドポイントのIPが複数ある場合は下記のようにレコードの分だけAdd-Contentコマンドを追加して登録してください。

Add-Content "C:\Windows\System32\drivers\etc\hosts" "調べたIP1`tssm.ap-northeast-1.amazonaws.com"
Add-Content "C:\Windows\System32\drivers\etc\hosts" "調べたIP2`tssm.ap-northeast-1.amazonaws.com"

2-B-6.起動後にフリートマネージャーを確認してインスタンスが表示されることを確認し、フリートマネージャーからログインできれば成功です。


フリートマネージャーを使用する方法について今回は対象サーバーを1台と想定し、ユーザーデータを使用してhostsファイルを編集していますが、EC2インスタンスよりendpoint-vpcのエンドポイントのレコードが使用できれば良いので、EC2インスタンスの再起動ができない場合や複数台ある場合はroute53のプライベートホストゾーンを使う方法もあります。
また使用するAMIにSSMエージェントがない場合はエージェントのインストールが必要になるので、一時的にNATを作成してダウンロードするなどの対応が必要です。

おわりに

今回紹介した方法の設定のほとんどは基本的なエンドポイントの設定となりますが、ひと工夫することで使用するエンドポイントをまとめることができます。
エンドポイント自体もセキュリティグループの設定等が必要になるため、管理を一元化したい場合はこちらの方法をお試しいただければと思います。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら