サイトアイコン 協栄情報ブログ

【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_SSM

皆様、お世話になっております。鈴木と申します。
今回はAWS CloudFormationを使用してSSMエンドポイントを作成していきたいと思います。

1.目次

目次はこちら

2.要件

-SSMエンドポイントを経由したEC2との通信をHTTPSで行う

3.AWS Systems Manager

3-1.AWS Systems Managerについて

AWS Systems Manager (SSM) は、AWS クラウド環境内でのリソース管理や運用を簡素化するためのサービスです。主に以下の機能を提供します。

SSM を利用することで、クラウド環境の運用がより効率的かつ安全になります。

3-2.SSM エンドポイントについて

SSM エンドポイント は、AWS Systems Manager サービスにアクセスするための専用のネットワーク接続ポイントです。以下の2つの主なタイプがあります。

  1. インターフェース型エンドポイント
    役割: AWS Systems Manager やその他の AWS サービスに対して、プライベートなネットワーク経由でアクセスを提供します。
    特徴: インターネットを経由せず、VPC 内で安全に通信が行えます。これにより、セキュリティが向上し、通信のパフォーマンスも向上します。
  2. ゲートウェイ型エンドポイント
    役割: 主に Amazon S3 や DynamoDB など、特定の AWS サービスに対して使用されます。
    特徴: VPC 内のリソースが、インターネットを介さずに直接 AWS サービスにアクセスできます。

SSM へのセキュアなアクセスを提供するためのネットワーク接続ポイントで、プライベートネットワーク経由での通信を実現できます。

4.構成図

下記の構成図のように、HTTPSでの通信を行うためにSSMエンドポイントを経由してEC2を操作します。

5.ソースコード

YAML形式にて記述しております。
下記ソースコードにてエンドポイントを作成しております。
本来であればタグをつけたいのですが、エラーが出て付けられないためタグは後ほど手動で入れます。
※おそらくCloudFormationがまだ対応していないと思われます。

SSMとEC2で疎通を取るためには下記サービスを付与する必要があります。

AWSTemplateFormatVersion: '2010-09-09'
Description: Create VPC Endpoints for SSM, SSMMessages, and EC2Messages in two subnets

Resources:
  # Create SSM Endpoint
  SSMEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      ServiceName: !Sub "com.amazonaws.${AWS::Region}.ssm"
      SubnetIds:
        - !Ref Subnet1Id
        - !Ref Subnet2Id
      VpcId: !Ref VpcId
      VpcEndpointType: Interface
      SecurityGroupIds:
        - !Ref SecurityGroupId
      PrivateDnsEnabled: true

  # Create EC2Message Endpoint
  EC2MessageEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      ServiceName: !Sub "com.amazonaws.${AWS::Region}.ec2messages"
      SubnetIds:
        - !Ref Subnet1Id
        - !Ref Subnet2Id
      VpcId: !Ref VpcId
      VpcEndpointType: Interface
      SecurityGroupIds:
        - !Ref SecurityGroupId
      PrivateDnsEnabled: true

  # Create SSMMessages Endpoint
  SSMMessagesEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      ServiceName: !Sub "com.amazonaws.${AWS::Region}.ssmmessages"
      SubnetIds:
        - !Ref Subnet1Id
        - !Ref Subnet2Id
      VpcId: !Ref VpcId
      VpcEndpointType: Interface
      SecurityGroupIds:
        - !Ref SecurityGroupId
      PrivateDnsEnabled: true
使用するオプション 設定値 説明
Type AWS::EC2::VPCEndpoint VPCエンドポイントを定義
ServiceName 各サービスを付与 サービス名
SubnetIds パラメータのサブネットを指定 配置先のサブネットを指定
VpcIde パラメータのVPCを指定 配置先のVPCを指定
VpcEndpointType Interface InterfaceかGateway
SSM↔EC2ではInterface
SecurityGroupIds パラメータのセキュリティグループを指定 付与するセキュリティグループを指定
PrivateDnsEnabled true DNS名前解決を有効化

6.疎通確認

6-1.定義

実際にプライベートサブネットにEC2とSSMエンドポイントを設定し、疎通確認を行います。
セキュリティグループとIAMロールは事前に準備済みで内容は下記です。

セキュリティグループ

IAMロール

6-2.EC2を起動

すでにSSMエンドポイントは上記ソースコードにて作成済みなので、Ec2を設定していきます。
上記セキュリティグループとIAMロールを付与します。
下記でパブリックIPが付与されていないことを確認できます。

「接続」→「セッションマネージャー」から接続できることが確認できます。

実際にターミナルでの操作も確認できました。

7.感想

事前にVPCを作成している場合に、CloudFormationを使ってSSMエンドポイントを構築する際、パラメータを指定しないと設定できないことがわかり、少し手間取ってしまいました。エンドポイントにタグを付ける方法が見つからなかった点については、今後の課題として模索していきたいと思います。

モバイルバージョンを終了