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?

Terraformで学ぶ 設計から考える SSM踏み台EC2

Last updated at Posted at 2025-12-27

はじめに

Terraform学習でEC2を作成する際、以下のような構成をよく見かけます。

  • EC2を作成
  • Security GroupでSSH(22番)を許可
  • キーペアを作成してSSH接続

しかしこの構成には、学習段階でも無視できない課題があります。

  • SSHポートをインターネットに公開する必要がある
  • 鍵ファイルは誰が・どこで・どう管理するのか
  • 接続経路や操作履歴がAWS側に残らない
  • 「踏み台サーバ」としてはセキュリティ的に不安が残る

そこで本記事では、SHを前提としない踏み台EC2をどう設計するかにフォーカスし、 AWS公式の仕組み(SSM Session Manager)を用いた構成をTerraformで表現します。

SSM Session Managerを採用する理由

AWS Systems Manager Session Manager は、EC2へのリモートアクセスを以下の特徴で提供します。

  • SSH・鍵ファイル不要
  • インバウンドポート不要
  • IAMによるアクセス制御
  • 操作履歴をCloudTrailに記録可能

ここで重要なのは、 「便利だから使う」のではなく「設計上の責務分離が明確になる」点です。

  • 認証・認可:IAM
  • 通信制御:Security Group
  • 操作記録:CloudTrail

Session Managerは、これらをAWS側に寄せる設計を可能にします。

設計方針(なぜこの構成にしたか)

今回の踏み台EC2は、以下3つの設計方針を軸に構成しています。

① SSHを「使わない」のではなく「設計に含めない」

SSHは便利ですが、

  • ポート開放が必要
  • 鍵管理が必要
  • 認可・監査がOSレイヤに閉じる

という特徴があります。

本構成では、 「EC2に接続する責務はAWSが提供するマネージド機能に委ねる」 という設計判断を取りました。

その結果、

  • 接続経路はAWS内部
  • 認可はIAM
  • ログはCloudTrail

という一貫した責務分離が成立します。

② ネットワークと認可を意図的に分離する

本構成のSecurity Groupには、インバウンドルールを一切定義していません。
これは「より厳しくするため」ではなく、

  • ネットワーク制御はSecurity Groupの責務
  • 接続可否はIAMの責務

という分離を明確に体験するためです。

重要なのは、EC2内部でsshdが起動しているかどうかは本質ではないという点です。

  • プロセスが起動していても
  • ネットワーク的に到達できなければ

それは「接続不可なサーバ」です。
この考え方は、実務でのゼロトラスト設計にも直結します。

③ Terraformは「作成ツール」ではなく「状態管理ツール」として使う

Terraform学習では、

  • applyできた
  • EC2が立ち上がった

で満足してしまいがちです。
しかし設計の観点では、

  • 何を作ったのか
  • 何が管理対象なのか
  • どう消えるのか

が説明できて初めて意味を持ちます。
そのため本記事では、 terraform destroyで完全に消えることを 構成のゴールとして明示的に設定しています。

構成概要(設計比較)

観点 SSH前提構成 本構成(SSM)
接続経路 インターネット AWS内部
認可 鍵ファイル IAM
ネットワーク 22番解放必須 インバウンド不要
操作監査 困難 CloudTrail
設計責務 EC2寄り AWSサービス寄り

本記事では右側の設計をTerraformでコード化します。

Terraform構成(ファイル分割の意図)

  • provider.tf:実行環境の前提定義
  • main.tf:リソースの関係性を表現
  • variables.tf:変更可能な設計パラメータ
  • outputs.tf:外部操作に必要な最小限情報

動作確認から読み取れる設計の妥当性

SSM接続が成立する理由

  • IAM RoleにAmazonSSMManagedInstanceCoreを付与
  • Instance ProfileとしてEC2に関連付け
  • SSM Agentが入ったAMIを使用

ここで重要なのは、Security Groupの設定は一切関与していない点です。

SSHが「使えない」のではなく「設計上不要」な状態

EC2内部ではsshdが起動していますが、

  • インバウンド通信は全遮断
  • 到達経路が存在しない

ため、SSHは設計上意味を持ちません。
これは「SSHを止めた」のではなく、 設計のレイヤで無効化している状態です。

Terraform stateから見る設計の完結性

stateに存在するリソースは、

  • EC2
  • IAM Role / Instance Profile
  • Security Group

のみです。

  • 暗黙的に作られらリソースがない
  • destroyで完全に消える

この状態を作れていること自体が、設計としての完成度を示しています。

まとめ

本記事の構成を通して、以下を実体験できます。

  • 「EC2に入る=SSH」という思い込みからの脱却
  • IAM・Security Group・SSMの責務分離
  • Terraformを状態管理ツールとして使う感覚

次のステップとしては、

  • 踏み台+RDS接続設計
  • Session Managerのログ永続化
  • 環境分離(dev / prod)設計

などに進むことで、 より実務に近い設計力を鍛えられると考えています。

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?