🐰

SSMセッションマネージャを使ってオンプレミスのサーバーにSSHログインを行う

2024/02/11に公開

概要

やりたい事

  • オンプレミスにあるサーバーへSSHを行いたい
  • オンプレミス側の固定IPではセキュリティ観点でSSHのポート解放は行いたくない
    • 用途から接続元が不特定のIPになるため
    • VPNサーバーなどは運用負荷・用途から見てコストパフォーマンスが悪く、設けたくない
  • 社内ではGoogleWorkspaceをIdPとしたSAML認証に統合しているため、オンプレミスへの認証も統合したい

仕様

  • オンプレミスサーバーへの接続はSSMセッションマネージャを用いて行う
    • オンプレミスサーバーはポート解放が不要で、SSM経由でのSSHが可能となる
  • AWS IAM は、GoogleWorkSpaceをIdPとしたSMAL認証を用いる
    • IAM Userは不要で、GoogleWorkspace上のユーザーにて管理できる
  • GoogleWorkspace上の特定のユーザーのみが、特定のIAM RoleへAssumeRole可能となる
    • SSM(SSH)の認証は、GoogleWorkspaceにて制御できる

手順

事前準備

AWSへ端末の登録:AWS側

  • AWSマネジメントコンソール > AWS Systems Manager > ハイブリッドアクティベーション アクティベーションを作成する
    • アクティベーションの説明
      • 任意
    • インスタンス制限
      • 登録する台数
    • IAM ロール
      • 必要な許可を持つ既存のカスタム IAM ロールを選択する
      • 前記で作成したRoleを選択
    • 上記以外はディフォルト
  • 画面下部アクティベーションの作成をクリック
  • 画面上部にActivation CodeとActivation IDが表示されるので控えておく
    • 再発行は不可なので、再度アクティベートを作成する
  • 後述の端末の登録が済んだら、アクティベートは削除する

AWS へ端末の登録:端末側

Ubuntuへのインストール手順

mkdir /tmp/ssm
wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb -O /tmp/ssm/amazon-ssm-agent.deb
sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
sudo service amazon-ssm-agent stop
sudo -E amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region "ap-northeast-1"
     #リージョンは`ap-northeast-1`
     #アクティベーションコード・IDは前記で発行されたものを入力する
sudo service amazon-ssm-agent start

オンプレミス端末への接続

saml2aws login -a profilename
aws --profile profilename ssm start-session --target mi-XXXXXXXXXXXXXXXX

Discussion