EC2のssh設定から見る公開鍵認証 ~ SSM Session Manager で確認する ~

2024/11/16に公開

はじめに

EC2に対してキーペアを設定すると、ローカルホストの秘密鍵を利用してsshでアクセスできるようになります。 キーペアを設定することでEC2内部で何が起きているかを確認しました。

SSM Session Managerでアクセス可能なEC2を2台用意

sshのキーペアを設定したEC2と設定していないEC2を用意。


resource "aws_vpc" "example_vpc" {
  cidr_block = "10.0.0.0/16"
}

resource "aws_subnet" "public_subnet" {
  vpc_id                  = aws_vpc.example_vpc.id
  cidr_block              = "10.0.1.0/24"
  map_public_ip_on_launch = true
}

resource "aws_internet_gateway" "gateway" {
  vpc_id = aws_vpc.example_vpc.id
}

resource "aws_route_table" "public_rt" {
  vpc_id = aws_vpc.example_vpc.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.gateway.id
  }
}

resource "aws_route_table_association" "public_rt_assoc" {
  subnet_id      = aws_subnet.public_subnet.id
  route_table_id = aws_route_table.public_rt.id
}

resource "aws_security_group" "sg" {
  vpc_id = aws_vpc.example_vpc.id

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_instance" "ssh" {
  ami                    = "ami-034bc4e4fcccfe844"
  instance_type          = "t3.micro"
  subnet_id              = aws_subnet.public_subnet.id
  vpc_security_group_ids = [aws_security_group.sg.id]

  key_name = "iac-key" # 作成したキーペア名を指定

  iam_instance_profile = aws_iam_instance_profile.ssm_profile.name

  tags = {
    Name = "ssh"
  }
}

resource "aws_instance" "no_ssh" {
  ami                    = "ami-034bc4e4fcccfe844"
  instance_type          = "t3.micro"
  subnet_id              = aws_subnet.public_subnet.id
  vpc_security_group_ids = [aws_security_group.sg.id]

  iam_instance_profile = aws_iam_instance_profile.ssm_profile.name

  tags = {
    Name = "no_ssh"
  }
}

resource "aws_iam_role" "ssm_role" {
  name = "ssm-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17",
    Statement = [{
      Effect = "Allow",
      Principal = {
        Service = "ec2.amazonaws.com"
      },
      Action = "sts:AssumeRole"
    }]
  })
}

resource "aws_iam_role_policy_attachment" "ssm_attach" {
  role       = aws_iam_role.ssm_role.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}

resource "aws_iam_instance_profile" "ssm_profile" {
  name = "ssm-profile"
  role = aws_iam_role.ssm_role.name
}

EC2インスタンスで公開鍵の設定を確認

公開鍵認証でssh接続可能なので、~/.ssh/authorized_keys に公開鍵が設定されているか確認します。

sudo su - ec2-user
less /home/ec2-user/.ssh/authorized_keys

sshのキーペアを設定したEC2:ssh-rsa AAAAB..../省略/........PpBt3N iac-key
sshのキーペアを設定していないEC2:空っぽ

つまりsshのキーペアを設定したタイミングで、公開鍵が設定されていました。

sshdの起動を確認

どちらのEC2もsshdは起動していました。sshdはEC2が起動するタイミングでデフォルトで起動する設定となっているようです。

sudo systemctl status sshd

● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2024-11-16 04:46:13 UTC; 19min ago
     Docs: man:sshd(8)
           man:sshd_config(5)

metaデータを確認

curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key

※169.254.169.254は特殊なプライベートID

sshのキーペアを設定したEC2:ssh-rsa AAAAB..../省略/........PpBt3N iac-key
sshのキーペアを設定していないEC2:空っぽ

当然と言えば当然で、公開鍵の設定通りでした。

Discussion