0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Fleet Managerでプライベートサブネット上のWindows ServerへRDP接続する

0
Posted at

はじめに

AWSでWindows ServerのEC2インスタンスを利用する場合、通常はRDPで接続します。

しかし、一般的なRDP接続では以下のような構成になりがちです。

  • EC2にパブリックIPを付与する
  • セキュリティグループでTCP/3389を開放する
  • 踏み台サーバーを用意する
  • VPN経由で接続する

今回は、AWS Systems ManagerのFleet Managerを使い、起動したてのWindows Server EC2へブラウザからRDP接続します。

この方法では、EC2にパブリックIPを付けず、RDPポートも開放せずに接続できます。

今回の構成

利用者
  ↓
AWS Management Console
  ↓
Systems Manager Fleet Manager
  ↓
VPC Endpoint
  ↓
Private Subnet上のWindows Server EC2

今回のポイントは以下です。

  • EC2にパブリックIPを付与しない
  • TCP/3389を開放しない
  • 踏み台サーバーを使わない
  • Fleet ManagerからブラウザRDPする
  • Systems Manager用VPCエンドポイントはCloudFormationで作成する

前提条件

今回の前提は以下です。

項目 内容
リージョン ap-northeast-1
OS Windows Server
接続方式 AWS Systems Manager Fleet Manager
EC2配置先 Private Subnet
パブリックIP なし
RDPポート開放 なし
VPC Endpoint作成方法 CloudFormation

全体の流れ

作業の流れは以下です。

  1. Systems Manager用VPCエンドポイントをCloudFormationで作成する
  2. EC2用IAMロールを作成する
  3. Windows Server EC2を起動する
  4. Fleet ManagerにEC2が表示されることを確認する
  5. Administratorパスワードを取得する
  6. Fleet ManagerからRDP接続する

1. Systems Manager用VPCエンドポイントを作成する

Private Subnet上のEC2をSystems Managerで管理するには、EC2からSystems Managerへ通信できる必要があります。

今回はインターネットやNAT Gatewayを使わず、VPCエンドポイントを使います。

作成するVPCエンドポイントは以下の3つです。

サービス 用途
ssm Systems Manager API用
ssmmessages Session Manager/Fleet Managerの通信制御用
ec2messages SSM Agentとのメッセージ通信用

CloudFormationテンプレート

以下のCloudFormationテンプレートを使用します。

AWSTemplateFormatVersion: '2010-09-09'

Description: Create SSM Interface VPC Endpoints and Security Group

###############################################################################
# Parameters
###############################################################################
Parameters:

  # 対象VPC
  VpcId:
    Type: AWS::EC2::VPC::Id
    Description: Target VPC ID

  # Interface Endpointを配置するサブネット
  SubnetIds:
    Type: List<AWS::EC2::Subnet::Id>
    Description: Subnets for Interface VPC Endpoints

  # Endpointへのアクセスを許可するCIDR
  AllowedCidr:
    Type: String
    Description: Allowed source CIDR

###############################################################################
# Resources
###############################################################################
Resources:

  ###########################################################################
  # Security Group for SSM Endpoints
  ###########################################################################
  SsmEndpointSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Security Group for SSM VPC Endpoints
      VpcId: !Ref VpcId

      # EC2からEndpointへのHTTPS通信を許可
      SecurityGroupIngress:
        - Description: Allow HTTPS from allowed CIDR
          IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: !Ref AllowedCidr

      # Outboundは全許可
      SecurityGroupEgress:
        - Description: Allow all outbound traffic
          IpProtocol: -1
          CidrIp: 0.0.0.0/0

      Tags:
        - Key: Name
          Value: ssm-endpoint-sg

  ###########################################################################
  # SSM Endpoint
  ###########################################################################
  SsmEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      VpcId: !Ref VpcId
      VpcEndpointType: Interface
      ServiceName: !Sub com.amazonaws.${AWS::Region}.ssm
      PrivateDnsEnabled: true
      SubnetIds: !Ref SubnetIds
      SecurityGroupIds:
        - !Ref SsmEndpointSecurityGroup

  ###########################################################################
  # SSM Messages Endpoint
  ###########################################################################
  SsmMessagesEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      VpcId: !Ref VpcId
      VpcEndpointType: Interface
      ServiceName: !Sub com.amazonaws.${AWS::Region}.ssmmessages
      PrivateDnsEnabled: true
      SubnetIds: !Ref SubnetIds
      SecurityGroupIds:
        - !Ref SsmEndpointSecurityGroup

  ###########################################################################
  # EC2 Messages Endpoint
  ###########################################################################
  Ec2MessagesEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      VpcId: !Ref VpcId
      VpcEndpointType: Interface
      ServiceName: !Sub com.amazonaws.${AWS::Region}.ec2messages
      PrivateDnsEnabled: true
      SubnetIds: !Ref SubnetIds
      SecurityGroupIds:
        - !Ref SsmEndpointSecurityGroup

###############################################################################
# Outputs
###############################################################################
Outputs:

  EndpointSecurityGroupId:
    Description: SSM endpoint security group ID
    Value: !Ref SsmEndpointSecurityGroup

  SsmEndpointId:
    Description: SSM endpoint ID
    Value: !Ref SsmEndpoint

  SsmMessagesEndpointId:
    Description: SSM Messages endpoint ID
    Value: !Ref SsmMessagesEndpoint

  Ec2MessagesEndpointId:
    Description: EC2 Messages endpoint ID
    Value: !Ref Ec2MessagesEndpoint

CloudFormationスタックを作成する

AWSマネジメントコンソールから作成します。

CloudFormationを開きます。

CloudFormation
↓
スタックの作成
↓
新しいリソースを使用

テンプレートをアップロードします。

テンプレートファイルのアップロード
↓
上記YAMLファイルを選択
↓
次へ

スタック名を入力します。

例です。

ssm-vpc-endpoints

パラメータを入力します。

パラメータ 指定内容
VpcId 対象EC2を配置するVPC
SubnetIds VPCエンドポイントを配置するPrivate Subnet
AllowedCidr EC2が所属するVPC CIDRまたはPrivate SubnetのCIDR

AllowedCidrの例です。

10.0.0.0/16

より絞る場合は、EC2を配置するPrivate SubnetのCIDRを指定します。

例です。

10.0.1.0/24

作成後、以下の3つのInterface Endpointが作成されていれば成功です。

com.amazonaws.ap-northeast-1.ssm
com.amazonaws.ap-northeast-1.ssmmessages
com.amazonaws.ap-northeast-1.ec2messages

2. EC2用IAMロールを作成する

次に、Windows Server EC2がSystems Managerに登録されるようにIAMロールを作成します。

IAMを開きます。

IAM
↓
ロール
↓
ロールを作成

信頼されたエンティティタイプは以下を選択します。

AWSのサービス

ユースケースは以下です。

EC2

許可ポリシーには以下を付与します。

AmazonSSMManagedInstanceCore

ロール名の例です。

ec2-ssm-managed-role

このロールを、後で作成するEC2にアタッチします。

3. Windows Server EC2を起動する

EC2を作成します。

EC2
↓
インスタンス
↓
インスタンスを起動

AMIを選択する

Windows ServerのAMIを選択します。

例です。

Microsoft Windows Server 2022 Base

または

Microsoft Windows Server 2025 Base

インスタンスタイプを選択する

検証用途であれば、以下のようなインスタンスタイプで構いません。

t3.medium

Windows ServerはLinuxよりメモリを消費するため、t3.microなどは避けた方が無難です。

キーペアを選択する

Administratorパスワードの復号にキーペアを使います。

既存のキーペアを選択するか、新規作成します。

例です。

windows-keypair

.pemファイルは後で使用するため、保管しておきます。

ネットワークを設定する

ネットワーク設定は以下のようにします。

項目 設定
VPC VPCエンドポイントを作成したVPC
サブネット Private Subnet
パブリックIPの自動割り当て 無効

セキュリティグループを設定する

EC2側のセキュリティグループでは、RDPを開放しません。

インバウンドルールは空でも構いません。

Inbound rule: なし

アウトバウンドは、デフォルトの全許可とします。

Outbound rule: すべて許可

EC2からVPCエンドポイントへTCP/443で通信できれば、Systems Managerに登録できます。

IAMロールをアタッチする

高度な詳細、または作成後のインスタンス設定で、先ほど作成したIAMロールをアタッチします。

ec2-ssm-managed-role

この設定がないと、EC2はSystems ManagerのManaged Nodeとして登録されません。

EC2を起動する

設定内容を確認して、EC2を起動します。

4. Fleet Managerに表示されることを確認する

EC2起動後、数分待ちます。

Windows Serverの初期化には少し時間がかかります。

EC2のステータスチェックが以下になっていることを確認します。

2/2 checks passed

次に、Systems Managerを開きます。

Systems Manager
↓
Fleet Manager
↓
Managed nodes

対象のWindows Server EC2が表示されていれば成功です。

表示される名前は、EC2のNameタグやインスタンスIDです。

5. Administratorパスワードを取得する

Fleet ManagerでRDP接続するには、Windowsのユーザー名とパスワードが必要です。

まず、Administratorパスワードを取得します。

EC2コンソールを開きます。

EC2
↓
インスタンス
↓
対象のWindows Server EC2を選択
↓
接続

RDPクライアント タブを開きます。

RDPクライアント
↓
パスワードを取得

キーペアの秘密鍵ファイルをアップロードします。

例です。

windows-keypair.pem

復号に成功すると、以下が表示されます。

ユーザー名: Administrator
パスワード: xxxxxxxxx

このパスワードを控えておきます。

6. Fleet ManagerからRDP接続する

EC2コンソールから接続します。

EC2
↓
インスタンス
↓
対象のWindows Server EC2を選択
↓
接続

RDPクライアント タブを開きます。

接続タイプで以下を選択します。

Fleet Managerを使用して接続

その後、以下をクリックします。

Fleet Manager Remote Desktop

Fleet Managerのリモートデスクトップ接続画面が開きます。

認証情報を入力する

以下を入力します。

項目
Username Administrator
Password 取得したAdministratorパスワード

入力後、接続します。

ブラウザ上にWindows Serverのデスクトップが表示されれば成功です。

接続後の状態

この構成では、以下を使っていません。

  • パブリックIP
  • Elastic IP
  • TCP/3389のインバウンド許可
  • 踏み台サーバー
  • VPN
  • NAT Gateway

EC2はPrivate Subnetに配置したまま、Systems Manager経由でRDP接続できます。

よくあるトラブル

Fleet ManagerにEC2が表示されない

以下を確認します。

  • EC2にIAMロールがアタッチされているか
  • IAMロールにAmazonSSMManagedInstanceCoreが付与されているか
  • EC2からVPCエンドポイントへTCP/443で通信できるか
  • VPCエンドポイントが対象VPCに作成されているか
  • VPCエンドポイントのPrivate DNSが有効か
  • EC2のアウトバウンド通信が許可されているか

特に起動直後は、Fleet Managerに表示されるまで数分かかる場合があります。

VPCエンドポイントのセキュリティグループで拒否されている

今回のCloudFormationテンプレートでは、VPCエンドポイント用セキュリティグループにAllowedCidrを指定しています。

AllowedCidrにEC2のプライベートIPが含まれていない場合、EC2からVPCエンドポイントへ通信できません。

例として、EC2が以下のIPだったとします。

10.0.1.25

この場合、AllowedCidrには以下のようにEC2を含むCIDRを指定します。

10.0.1.0/24

またはVPC全体を許可します。

10.0.0.0/16

IAMロールを後から付けたが表示されない

EC2作成後にIAMロールを付けた場合、Systems Managerに登録されるまで少し時間がかかることがあります。

しばらく待っても表示されない場合は、Windows Server上のSSM Agentを確認します。

PowerShellで確認します。

Get-Service AmazonSSMAgent

正常な場合は、以下のように表示されます。

Status   Name              DisplayName
------   ----              -----------
Running  AmazonSSMAgent    Amazon SSM Agent

停止している場合は、起動します。

Start-Service AmazonSSMAgent

ただし、Private Subnet上でまだ接続できない状態の場合、まずはIAMロール、VPCエンドポイント、セキュリティグループを確認してみましょう。

Administratorパスワードが取得できない

Windows Serverの初期化が完了していない可能性があります。

EC2起動直後は、パスワード取得に時間がかかります。

ステータスチェックが2/2になってから、数分待って再度取得します。

また、EC2作成時に指定したキーペアと、パスワード取得時に使用する秘密鍵が一致している必要があります。

RDPポートを開ける必要はあるか

ありません。

Fleet Managerを使う場合、通常のRDP接続のようにインターネットからTCP/3389を開放する必要はありません。

EC2がSystems ManagerのManaged Nodeとして登録され、Fleet Managerから接続できれば問題ありません。

今回の構成で注意すること

VPCエンドポイント料金が発生する

Interface VPC Endpointは、エンドポイントごとに時間課金とデータ処理課金が発生します。
エンドポイント1つあたり$10/月もするので、最低でも$30/月ということは、5,000円ほどかかるので、注意が必要です。(当方、$90ほどやってしまいました。。)

今回の構成では、以下3つのInterface Endpointを作成します。

ssm
ssmmessages
ec2messages

検証環境で不要になった場合は、CloudFormationスタックを削除して停止するのを忘れないようにしましょう。

VPCエンドポイントを配置するサブネット

VPCエンドポイントは、EC2が配置されているサブネットと同じVPC内に作成する必要があります。

複数AZで運用する場合は、各AZのPrivate SubnetをSubnetIdsに指定します。

EC2のアウトバウンドを絞っている場合

EC2側のセキュリティグループやNACLでアウトバウンドを絞っている場合、VPCエンドポイントへのTCP/443通信を許可する必要があります。

最低限、以下の通信が必要です。

EC2 → SSM用VPCエンドポイント: TCP/443

まとめ

AWS Systems Manager Fleet Managerを使うことで、Windows Server EC2へブラウザからRDP接続できます。

今回の構成では、以下を実現しました。

  • Windows Server EC2をPrivate Subnetに配置
  • パブリックIPなし
  • TCP/3389のインバウンド開放なし
  • 踏み台サーバーなし
  • NAT Gatewayなし
  • Systems Manager用VPCエンドポイントをCloudFormationで作成
  • Fleet ManagerからブラウザRDP接続

Windows Serverを安全に運用したい場合、Fleet Managerを使ったRDP接続は有効な選択肢です。

特に、検証環境や管理用サーバーで「とりあえずRDPのために3389を開ける」という構成を避けたい場合やJTCでHTTPSしか空いていない場合に便利です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?