EC2 Instance Connect Endpointが公開されたので触ってみた

    EC2 Instance Connect Endpointが公開されたので触ってみた

    目次

      はじめに

      AWSで作成したLinux系EC2インスタンスへの接続方法として、AWS Systems Manager Session Manager(以下、SSM Session manager)などがありますが、昨年6月に新機能であるEC2 Instance Connect Endpoint(以下、EIC Endpoint)が公開されました。
      今回は、EC2インスタンスに安全なリモートアクセスを提供するための機能として似ているSSM Session managerとEIC Endpointの両サービスの内容を比較し、実際に使用をしてみようと思います。

      まずは両サービスの概要を説明していきます。

      EIC Endpointについて

      EIC EndpointはインスタンスにパブリックIPv4アドレスがなくても、SSH または RDP 経由でインスタンスに接続できる機能です。サブネット内にEIC Endpointを作成し、セキュリティグループで通信を許可するようにしておくことで、エンドポイント経由でVPC内のインスタンスに接続できるようになります。

      EIC_Endpoint_01

      EC2 Instance Connect Endpoint を使用した、パブリック IPv4 アドレスを必要としないインスタンスへの接続より参照

      上記は、EIC Endpointの接続イメージです。
      ユーザーはEIC Endpointを経由しインスタンスにアクセスします。上記の図にもあるように同一VPCであればEIC Endpointを設定していないサブネットに対してもアクセスが可能です。

      EIC Endpointの作成と接続制御の権限は、IAMによって制御されます。また、インスタンスのセキュリティグループ設定でEIC EndpointのセキュリティグループからSSHインバウンド接続のみを許可することで、IAMベース及びネットワークベース両方でのアクセス制限を行うことが可能です。
      既存サービスであるEC2 Instance Connectとの違いはパブリックIPv4で接続するところとネットワークベースでの制御も可能なところがあります。

      インスタンスへの接続は、成功失敗含め、すべてCloudTrailにログが作成されます。
      また、EIC EndpointはVPCにつき1つまでしか作成できないため、EIC Endpointが単一障害点となる可能性があることは注意が必要です。

      SSM Session managerについて

      SSM Session managerは、EC2インスタンスにエンドポイント経由でhttpsのシェルアクセスを提供するサービスです。そのため、セキュリティグループでSSHのポートを解放する必要がありません。

      EIC Endpointと同様にIAMによるアクセス制御やプライベートサブネットのインスタンスに接続が可能であり、ログやイベントの取得が可能です。
      SSM Session managerを使用する際の注意点として、SSM Agentを事前にインストールする必要があります。Amazon Linux系などのAMIにはインスタンス作成時からデフォルトでインストールされていますが、インストールされていないAMIについては別途インストールする必要があります。
      SSM Agentを手動でインストールする場合は以下を参考にしてください。
      SSM Agent の使用

      また、SSM Agentを使用するためにOS上でssm-userユーザーアカウントが作成されます。Windows Server のドメインコントローラーを除き、初めてセッションが開始されるときに ssm-user が自動的に作成されます。

      セッションはCloudWatch Logsによって自動的に記録され、セキュリティと監査に役立ちます。

      EIC Endpointのデモ

      それでは、AWSマネジメントコンソールからEIC Endpointを使用していきたいと思います。
      東京リージョンに作成しています。
      今回は以下のような構成を作成していきたいと思います。

      EIC_Endpoint_02

      プライベートサブネット内にEC2インスタンスとしてAmazon Linux 2023を作成します。
      EC2インスタンスのセキュリティグループとしてEIC EndpointからのみのSSHアクセスを許可したセキュリティグループを作成します。

      EIC Endpointの作成及び削除には以下の権限が必要です。

      作成

      • ec2:CreateInstanceConnectEndpoint
      • ec2:CreateNetworkInterface
      • ec2:CreateTags
      • iam:CreateServiceLinkedRole

      削除

      • ec2:DescribeInstanceConnectEndpoints
      • ec2:DeleteInstanceConnectEndpoint

      今回のデモではIAMの設定を省略しますが、リソースタグに応じたアクセス許可や送信元IPアドレス制限を使用したアクセス許可の設定が可能となっております。IAMポリシーの設定については以下を参考にしてください。
      EC2 Instance Connect Endpoint を使用するための IAM アクセス許可の付与

       

      VPC作成

      まずはVPCを作成していきます。
      手順の詳細は省きますが、VPCの作成後、プライベートサブネットを作成します。
      今回は以下の設定で作成しました。

      VPC

      パラメータ 設定
      Name demo-vpc
      CIDR 10.0.0.0/16

      プライベートサブネット

      パラメータ 設定
      Name demo-privatesubnet
      AZ ap-northeast-1a
      CIDR 10.0.0.0/24

       

      セキュリティグループ作成

      続いて、EIC Endpointの作成の前段作業としてセキュリティグループを作成していきます。
      構成図にもあるようにセキュリティグループはEIC EndpointとEC2インスタンス用の2つ作成します。

      EIC Endpoint用セキュリティグループ

      パラメータ 設定
      Name EIC Endpoint Security Group
      VPC demo-vpc
      インバウンドルール 設定無し
      アウトバウンドルール 10.0.0.0/16

      EIC Endpoint用セキュリティグループのアウトバウンドルールはVPCやサブネットの範囲内、セキュリティグループを指定するなど任意に接続先を制限することが可能です。今回はVPCのIPアドレス範囲で制限をしています。

      EC2インスタンス用セキュリティグループ

      パラメータ 設定
      Name EC2 Instance Security Group
      VPC demo-vpc
      インバウンドルール EIC Endpoint用セキュリティグループからのSSHを許可
      アウトバウンドルール 任意の設定

       

      EIC Endpointの作成

      続いてEIC Endpointを作成していきます。
      AWSマネジメントコンソールからVPC→エンドポイント→エンドポイントを作成と進みます。

      エンドポイントの作成画面のサービスカテゴリの項目で「EC2 Instance Connect Endpoint」を選択するとEIC Endpointの設定画面になります。

      EIC_Endpoint_03

      EIC Endpointを以下のように設定していきます。

      パラメータ 設定
      Name demo-eic-endpoint
      VPC demo-vpc
      追加設定 なし
      セキュリティグループ EIC Endpoint用セキュリティグループ
      サブネット demo-privatesubnet

      EIC_Endpoint_04

      EC2インスタンスの作成と接続

      最後にEC2インスタンスの作成と接続を行います。
      EC2インスタンスは以下のように作成しています。 EC2 インスタンス

      パラメータ 設定
      Name demo-ec2
      AMI Amazon Linux 2023 AMI
      インスタンスタイプ t2.micro
      VPC demo-vpc
      サブネット demo-privatesubnet
      パブリックIPの自動割り当て 無効化
      セキュリティグループ EC2インスタンス用セキュリティグループ

      ストレージや詳細設定はお好みでお願いします。
      注意点としてパブリックIPの自動割り当ては無効化で行っています。
      無効化することで作成したインスタンスはパブリックIPアドレスが割り当てられていないインスタンスとして作成されます。

      作成が完了したらインスタンスに接続していきます。

      EIC_Endpoint_05

      インスタンスに接続しようとするとパブリックIPv4アドレスがない警告が表示されますが、「EC2 Instance Connect エンドポイントを使用して接続する」を選択します。

      EIC_Endpoint_06

      無事に接続できました。

      EIC_Endpoint_07

      以上、接続のデモでした。

      Windows ServerのインスタンスについてもパブリックIPアドレスを使用せずに接続が可能です。
      その場合、3389番ポート以外でVPCとのプライベートトンネルを作成して接続します。
      詳細についてはこちらをご覧ください。

      EIC Endpointの削除については通常のVPCエンドポイントの削除と同様の手順で削除できます。

       

      CloudFormationでの作成

      今回の構成はCloudFormationでも再現が可能なため、テンプレートファイルを以下に記載します。
      構成はハンズオンと同じ構成です。

      AWSTemplateFormatVersion: 2010-09-09
      Resources:
      mainVPC:
      Type: AWS::EC2::VPC
      Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      PrivateSubnet:
      Type: AWS::EC2::Subnet
      Properties:
      CidrBlock: 10.0.0.0/24
      AvailabilityZoneId: 'use1-az2'
      MapPublicIpOnLaunch: 'false'
      VpcId: !Ref mainVPC

      EICSecGroup:
      Type: AWS::EC2::SecurityGroup
      Properties:
      GroupName: handson-EICsg
      GroupDescription: SecGroupEIC
      VpcId: !Ref mainVPC

      EC2SecGroup:
      Type: AWS::EC2::SecurityGroup
      Properties:
      GroupName: handson-EC2sg
      GroupDescription: SecGroupEC2
      VpcId: !Ref mainVPC

      EICEgress:
      Type: AWS::EC2::SecurityGroupEgress
      Properties:
      Description: EIC Security Group
      DestinationSecurityGroupId: !GetAtt EC2SecGroup.GroupId
      GroupId: !Ref EICSecGroup
      IpProtocol: -1

      EC2Ingress:
      Type: AWS::EC2::SecurityGroupIngress
      Properties:
      Description: EC2 Security Group
      FromPort: 22
      ToPort: 22
      IpProtocol: tcp
      SourceSecurityGroupId: !Ref EICSecGroup
      GroupId: !Ref EC2SecGroup

      EICEndpoint:
      Type: AWS::EC2::InstanceConnectEndpoint
      Properties:
      PreserveClientIp: false
      SecurityGroupIds:
      - !Ref EICSecGroup
      SubnetId: !Ref PrivateSubnet

      demoEC2:
      Type: AWS::EC2::Instance
      Properties:
      ImageId: ami-08a52ddb321b32a8c
      InstanceType: t2.micro
      NetworkInterfaces:
      - AssociatePublicIpAddress: "false"
      DeviceIndex: "0"
      SubnetId: !Ref PrivateSubnet
      GroupSet:
      - !Ref EC2SecGroup

      スタック作成後、同じ手順でインスタンスに接続することが可能です。

      まとめ

      以上、EIC Endpointのデモの内容でした。
      EC2インスタンスへの接続方法としてSSM Session Managerがありましたが、こちらは無料ではありますが、接続経路としてVPC Endpointを使用するため、VPC Endpointの料金は発生します。
      EIC EndpointはVPC Endpointを使用しないため無料で利用することができます。

      2024年2月よりパブリックIPv4に対しても課金が行われることとなります。EC2インスタンスへの接続方法見直しのきっかけとしてご参考になれば幸いです。