【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 クラウド環境内でのリソース管理や運用を簡素化するためのサービスです。主に以下の機能を提供します。

  • インスタンス管理: EC2 インスタンスの操作や管理を中央から実行できます。
  • パッチ管理: オペレーティングシステムやアプリケーションのパッチを自動的に適用し、セキュリティやバグ修正を迅速に行います。
  • 構成管理: インスタンスやリソースの設定を標準化し、一貫した環境を維持します。
  • システム状態の監視: リソースの状態を監視し、異常があればアラートを送信します。

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を操作します。
file

5.ソースコード

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

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

  • com.amazonaws.ap-northeast-2.ssm
  • com.amazonaws.ap-northeast-2.ssmmessages
  • com.amazonaws.ap-northeast-2.ec2messages
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ロールは事前に準備済みで内容は下記です。

セキュリティグループ

  • EC2
    HTTPS(443)を許可してソースをSSMのセキュリティグループを指定
  • SSM
    HTTPS(443)を許可してソースをEC2のセキュリティグループを指定

IAMロール

  • EC2にアタッチ
    AmazonSSMManagedInstanceCore

6-2.EC2を起動

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

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

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

7.感想

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

Last modified: 2024-07-31

Author