LoginSignup
0
0

More than 1 year has passed since last update.

TerraformでGitHubの公開鍵を設定したユーザーアカウントを作成し、Session ManagerでEC2にSSHアクセスする

Last updated at Posted at 2022-09-03

はじめに

踏み台サーバーでよく見られる構成である、Session ManagerにてEC2にアクセスする。
AmazonLinux2を利用するが、ec2-userを削除し、新規でユーザーアカウントを作成する。
この際、Session ManagerはAWS CLIではなく、GitHubの秘密鍵でSSHアクセスできるようにする。
上記をTerraformにて記述する。

Terraformのバージョンは v1.1.6とする。

実行環境の準備

AWSでTerraformを動かすための設定を参考にしてください。

EC2を構築する

  1. Session Managerを利用するためのIAMロール

    iam.tf
    resource "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"
    }
    
  2. EC2

    ec2.tf
    resource "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                  = "${EC2AMIID}"
      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にアクセスする

  1. ~/.ssh/config に下記を追記する。
~/.ssh/config
host i-* mi-*
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
  1. 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 接続のアクセス許可を有効にして制御する

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