⛳
EC2のssh設定から見る公開鍵認証 ~ SSM Session Manager で確認する ~
はじめに
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