はじめに
踏み台サーバーでよく見られる構成である、Session ManagerにてEC2にアクセスする。
AmazonLinux2を利用するが、ec2-userを削除し、新規でユーザーアカウントを作成する。
この際、Session ManagerはAWS CLIではなく、GitHubの秘密鍵でSSHアクセスできるようにする。
上記をTerraformにて記述する。
Terraformのバージョンは v1.1.6
とする。
実行環境の準備
AWSでTerraformを動かすための設定を参考にしてください。
EC2を構築する
-
Session Managerを利用するためのIAMロール
iam.tfresource "aws_iam_role" "akane_ssm_role" { name = "akane_ssm_role" path = "/" 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" "akane_ssm_role_policy" { role = aws_iam_role.akane_ssm_role.name policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore" }
-
EC2
ec2.tfresource "aws_iam_instance_profile" "akane_ssm_instance_profile" { name = "akane_ssm_instance_profile" role = aws_iam_role.akane_ssm_role.name } resource "aws_instance" "akane_ssm_ec2" { ami = "${EC2のAMIのID}" instance_type = "t2.micro" subnet_id = module.vpc.private_subnets[0] iam_instance_profile = aws_iam_instance_profile.akane_ssm_instance_profile.name user_data = <<EOF #!/bin/bash USER_NAME=akane sudo adduser $USER_NAME sudo mkdir /home/$USER_NAME/.ssh sudo chmod 700 /home/$USER_NAME/.ssh sudo touch /home/$USER_NAME/.ssh/authorized_keys sudo chmod 600 /home/$USER_NAME/.ssh/authorized_keys sudo chown -R $USER_NAME:$USER_NAME /home/$USER_NAME/.ssh (echo; wget https://github.com/${GitHubのアカウントID}.keys -O -; echo) >> /home/$USER_NAME/.ssh/authorized_keys sudo userdel -r ec2-user EOF tags = { Name = "akane_ssm_instance" } }
EC2にアクセスする
- ~/.ssh/config に下記を追記する。
~/.ssh/config
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
- GitHubの秘密鍵でSSHアクセスをする
UNIXコマンド
ssh -i ${GitHubの秘密鍵} akane@$(aws ec2 describe-instances --filters Name=instance-state-name,Values=running Name=tag:Name,Values=akane_ssm_instance --query "Reservations[*].Instances[*].InstanceId" --output text)
参考
Amazon Linux インスタンスでのユーザーアカウントの管理
Session Manager を通して SSH 接続のアクセス許可を有効にして制御する