AWSの無料枠で出来る範囲のチュートリアルを ChatGPT に示して頂いたので、試してみた経過を簡単にまとめてみました。
AWS等の実際の画面や操作はどんな感じか知りたい方を読者対象としているつもりです。
著者はAWS クラウドプラクティショナー、ソリューションアーキテクト アソシエイト という資格を取得済みで「AWSってなんぞや?」という概要を知識としてある程度理解しているが、実際にAWSの画面を触ったことが無いという状態でAWSのチュートリアルをこなしていくという状況です。
今回の内容としては SSH ではなく SSM (Session Manager) での運用を目標にしたいと思います。
何が違うのか
SSH不要
ポート22不要
鍵不要
👉 つまり
「穴を開けずにログインできる」
💡 メリット
① セキュリティ向上
・ポート22閉じる
・IP制限不要
・攻撃対象が減る
② 運用が楽
・鍵管理いらない
・ブラウザから接続できる
③ ログが残る
・誰がいつログインしたか分かる
❌️ デメリット
IAMやSSMの設定が必要で初期構築が少し複雑
🎯 ゴール
EC2にSSHせず、SSMで接続できるようにする
🧩 全体でやること(3ステップ)
1. IAMロール作成
2. EC2にロール付与
3. セキュリティグループからSSH削除
修正の流れ
① IAMモジュールに output 追加
modules/iam/outputs.tf
output "instance_profile_name" {
value = aws_iam_instance_profile.ssm_profile.name
}
② root main.tf で module 呼び出し
main.tf
module "iam" {
source = "./modules/iam"
}
③ EC2モジュールに渡す
main.tf
module "ec2" {
source = "./modules/ec2"
# ここを追加 ↓
instance_profile_name = module.iam.instance_profile_name
}
④ EC2モジュールで変数受け取る
modules/ec2/variables.tf
variable "instance_profile_name" {
type = string
}
⑤ Launch Templateで使う
modules/ec2/main.tf
resource "aws_launch_template" "web" {
name_prefix = "web-template"
iam_instance_profile {
name = var.instance_profile_name
}
# 他の設定...
}
構造まとめ
modules/iam
↓ output
root main.tf
↓ 引き渡し
modules/ec2
ワンポイント
terraform apply 後
既存インスタンスにはIAMロール付かない
対処
terraform apply → ASGが新規インスタンス作るのを待つ
✅ 動作確認
AWSコンソールで
EC2 → インスタンス → 接続 → Session Manager
👉 これで入れれば成功
↓ こうなればOK
🏁 修正後どうなるか
terraform apply → 成功
↓
EC2にIAMロール付く
↓
Session Manager使える
↓
SSH不要になる


