🐰
SSMセッションマネージャを使ってオンプレミスのサーバーにSSHログインを行う
概要
やりたい事
- オンプレミスにあるサーバーへ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にて制御できる
手順
事前準備
- GoogleWorkspaceとIAMを連携する
- オンプレミス(AWS以外)の端末へ対し、セッションマネージャを利用する際は、 アドバンスドティアを有効にする必要がある
- SSM でディフォルトで作成されるRoleでは権限が足りないため、専用のRoleを作成する
- アドバンスドティアでない場合、下記エラーが表示される
An error occurred (BadRequest) when calling the StartSession operation: Enable advanced-instances tier to use Session Manager with your on-premises instances
AWSへ端末の登録:AWS側
-
AWSマネジメントコンソール
>AWS Systems Manager
>ハイブリッドアクティベーション アクティベーションを作成する
- アクティベーションの説明
- 任意
- インスタンス制限
- 登録する台数
- IAM ロール
- 必要な許可を持つ既存のカスタム IAM ロールを選択する
- 前記で作成した
Role
を選択
- 上記以外はディフォルト
- アクティベーションの説明
- 画面下部
アクティベーションの作成
をクリック - 画面上部にActivation CodeとActivation IDが表示されるので控えておく
- 再発行は不可なので、再度アクティベートを作成する
- 後述の端末の登録が済んだら、アクティベートは削除する
AWS へ端末の登録:端末側
- 下記URLを元にOSに適したSSM Agentのインストールを行う
-
AWSマネジメントコンソール
>AWS Systems Manager
>フリートマネージャー
に対象のインスタンスが表示される
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