【AWS】SSM Session Manager로 로컬에서 EC2 인스턴스에 연결

11903 단어 EC2aws-cliSSMAWS
SSM Session Manager를 사용하여 aws-cli로 간편하게 로컬에서 EC2에 연결하기 위해 Shell Script를 작성했으므로 설명하고 싶습니다.
SSM Session Manger를 설정하는 방법은이 기사에서 다루지 않으므로 공식 문서을 참조하십시오.

SSM Session Manager라고 길기 때문에, 이하에서는 Session Manger로 약칭합니다

쉘 스크립트



작동 보장하는 OS는 MacOS입니다.
그 이외의 OS에서는 동작하지 않는 경우가 있으므로 양해 바랍니다

플러그인용



Session Manager를 사용하려면 로컬에 Plugin이 필요합니다.
다음 스크립트에서 지원하는 것은 Plugin 설치 및 제거입니다.
설치는 S3에 있는 Plugin zip 파일을 다운로드하여 로컬 PATH에 포함된/user/local/bin에 빌드합니다.
제거는 빌드된 스크립트를 삭제하기만 하면 됩니다.

plugin.bash
#!/bin/bash

# ------------------------------------------
# SSM Session Manager Plugin
# https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html
#
# this script features
# - install
# - uninstall
# ------------------------------------------

set -xeu

function install {
  base_dir=$(cd $(dirname $0); pwd)
  download_dir="/tmp/ssm"

  if [ ! -d "$download_dir" ]; then
    mkdir $download_dir
  fi

  pushd "$base_dir" > /dev/null
  pushd "$download_dir" > /dev/null

  curl -o "sessionmanager-bundle.zip" \
    "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip"

  unzip sessionmanager-bundle.zip

  sudo ./sessionmanager-bundle/install \
    -i /usr/local/sessionmanagerplugin \
    -b /usr/local/bin/session-manager-plugin

  popd > /dev/null
  popd > /dev/null

  read -p "Do you remove the downloaded files ? [y/n] > " flag
  case "$flag" in
    "y")
      rm -rf $download_dir ;;
    "n") ;;
    *)
      echo "Please typing y or n"
      exit 1 ;;
  esac
}

function uninstall {
  sudo rm -rf /usr/local/sessionmanagerplugin
  sudo rm /usr/local/bin/session-manager-plugin
}


cmd="$1"
case "$cmd" in
  "install")
    install ;;
  "uninstall")
    uninstall ;;
  *)
    echo "Please specify install or uninstall in first argument"
    exit 1 ;;
esac

Session용



이 스크립트를 사용하면 세션 시작 및 기록을 확인할 수 있습니다.
먼저 세션을 시작하려면 연결할 EC2의 인스턴스 ID가 필요합니다.
이를 자동으로 얻기 위해 연결된 EC2의 이름을 인수로 사용하고 aws ec2 describe-instances 명령으로 인스턴스 ID를 가져옵니다.
따라서 연결 대상 EC2의 이름조차 기억하면 연결할 수 있습니다.

session.bash
#!/bin/bash

set -xeu

cmd="$1"
target_ec2_name="$2"
profile="$3"

if [ -z "$target_ec2_name" ]; then
  echo "Please specify EC2 name in the second argument"
  exit 1
fi

if [ -z "$profile" ]; then
  echo "Please specify aws profile name in the third argument"
  exit 1
fi

instance_id=$(aws ec2 describe-instances --output text \
                --filters "Name=tag:Name,Values=$target_ec2_name" \
                --query "Reservations[*].Instances[?Instance.State.Name==running].InstanceId" \
                --region ap-northeast-1 --profile "$profile")

function start {
  aws ssm start-session \
    --target "$instance_id" \
    --region ap-northeast-1 --profile "$profile"
}

function list {
  aws ssm describe-sessions \
    --state "History" \
    --filters "key=Target,value=$instance_id" \
    --region ap-northeast-1 --profile "$profile"
}

case "$cmd" in
  "start") start ;;
  "list") list ;;
  *)
    echo "Please specify start or list in the first argument"
    exit 1 ;;
esac

Makefile



위의 Shell Script를 쉽게 실행할 수 있도록 Makefile을 작성했습니다.

Makefile
.PHONY: session plugin

plugin:
    bash plugin.bash $(cmd)

session:
    bash session.bash $(cmd) $(name) $(profile)

플러그인 명령 인수 설명



$(cmd)는 install 또는 uninstall입니다.
기능은 이름대로

session 명령 인수 설명




인수
설명


cmd
start 또는 list를 지정하십시오 start는 Session 시작합니다 list는 Sesison의 역사를 볼 수 있습니다

이름
연결하려는 EC2 인스턴스의 이름을 지정합니다.

프로필
AWS profle를 나타냅니다. 적절한 IAM Role이 연결되어있는 IAM User의 프로파일을 지정하십시오.


Session Start 실행



세션을 시작해 보겠습니다.
make session cmd=start name=qiita profile=test

위의 명령을 실행해 보면 다음과 같습니다.



프롬프트가 sh-4.2$이면 EC2에 연결할 수 있다는 것입니다.
덧붙여서 Session으로 로그인하는 유저를 SSMSessionRunAs로 태그 첨부해도 로그인 쉘은 초기화되지 않기 때문에, sh-4.2$ 그대로입니다
Issue에서도 작성되었지만 로그인 쉘을 자동으로 변경하고 싶다면 다음과 같이하면 좋을 것 같습니다.
aws ssm start-session --target <INSTANCE_ID> --document-name AWS-StartInteractiveCommand --parameters command="bash -l"

개인적으로는 SSMSessionRunAs와 같이 간편하게 로그인 쉘을 지정할 수 있도록 해 주었으면 합니다.

참고


  • htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / sys ms - 마나게 r / ㅁ st / 우세 r 구이로 / 세시 온 - 마나게 r. HTML
  • htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / sys ms - 마나게 r / ㅁ st / 우세 r 구이로 / 세시 온 - p 레후 렌 세 s - 루 - 아 s. HTML
  • 좋은 웹페이지 즐겨찾기