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でSession Manager構成!!

Posted at
前回からの続きでSession Managerを用いた接続を試してみたいと思います

Session Managerを用いることで、SSH接続に必要な2つの踏み台用とPrivate EC2用の鍵が不要となります

Session Managerを使用するために、下記ソースコードを追記します

// iam.tf
resource "aws_iam_role" "ssm_role" {
  name = "ec2-ssm-role"
  assume_role_policy = jsonencode({
    Version = "2012-10-17",
    Statement = [{
      Effect = "Allow",
      Principal = {
        Service = "ec2.amazonaws.com"
      },
      Action = "sts:AssumeRole"
    }]
  })
}
// EC2が使うIAMロールを作成

resource "aws_iam_role_policy_attachment" "ssm_attach" {
  role       = aws_iam_role.ssm_role.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}
// 上記で作成したロールに、Session Managerで必要な権限を付与

resource "aws_iam_instance_profile" "ssm_profile" {
  name = "ec2-ssm-profile"
  role = aws_iam_role.ssm_role.name
}
//そのロールをEC2に割り当てるためにインスタンスプロファイルを作成
インスタンスプロファイルとは AWSのEC2インスタンスとIAMロールを結びつけるため「入れ物」みたいなもの
なぜ、インスタンスプロファイルが必要なのか EC2インスタンスはIAMロールを直接使えないため、IAMロールを「インスタンスプロファイル」という箱に入れて、それをEC2に渡すことで、ロールに付与されている権限を使用できるようにするため

作成が完了したら、ec2.tfに下記を追記

iam_instance_profile = aws_iam_instance_profile.ssm_profile.name
// 作成したインスタンスプロファイル(ssm_profile)をEC2インスタンスにアタッチ

これでSession Managerを使用する準備が整いました
terraform applyします

外部からのSession Manager接続を確認します
確認方法は下記の順番でシェルが開けば接続確認完了

- AWSコンソール → EC2 → 対象インスタンスを選択
- 「接続」ボタンをクリック
- 「Session Manager」タブを選択
- 「接続」ボタンを押す
- ブラウザ上でシェルが開く

Public Subnet内のEC2から外部への接続を確認します
上記と同じ手順でシェルまで開き、そのシェル内で以下を実行:

ping 8.8.8.8
curl https://example.com

応答が返ってくれば成功で、NAT Gateway経由で外部通信できています!

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?