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インスタンスへの接続方法見直しのきっかけとしてご参考になれば幸いです。

    アジアクエスト株式会社では一緒に働いていただける方を募集しています。
    興味のある方は以下のURLを御覧ください。