AWSなら、踏み台サーバー無しでWindowsサーバにRDP接続できるようになった。便利だけど、設定方法をすぐ忘れちゃうのでメモ。
###今まで:
Linux 踏み台サーバーを経由して、AWS Windowsサーバーにリモートデスクトップ接続していた(RDP over SSH)。
- メリット:使い慣れている。SSH鍵を所有する人だけがOSにログインできた。
- デメリット:会社のHTTP/HTTPSプロキシ経由では、RDPがブロックされて接続できない。
###これから:
AWS Systems Manager (SSM)のセッションマネージャー経由でEC2 Windowsサーバーにリモートデスクトップ接続したい。
- メリット:会社のHTTP/HTTPSプロキシ経由でも、クラウドのサーバーOSにSSHクライアントやRD接続でログインできるかも。
- デメリット:AzureやIBM Cloudなどの他クラウドと異なるアクセス方法を運用することになる。
##システム構成図
PCの[AWS CLI]とAWS管理ポータルの[SSM]を経由して、PCからWindowsサーバーにRD接続する。言い換えるとPCのWEBブラウザと同じhttps(443)でWindowsサーバーにリモートデスクトップ接続します。この時、VPCのセキュリティグループは全てのInboundを拒否しておいて構いません。
下図の赤丸番号ごとに手順を説明しています「図①の手順が(1)」。
(1) AWSコンソールでSSMを準備する
AWS管理コンソールのSystems Manager を有効にしたら、セッションマネージャーでRD接続するVMを選択する。クイックセットアップでまとめて設定できる。これ、設定してから[保留中][成功]になるまで数十分かかるので、別の作業をしてから戻った方がいいみたいです。
対象のVM(EC2)に、IAMロール(AmazonSSMRoleForInstancesQuickSetup)を割り当てする
(2) EC2にSSMエージェントをインストールする
EC2をデプロイすると、AWSデフォルトでSSMエージェントがインストール済み。
- 対象:Windows Server 2016, 2019のAMIから作成した場合。
- 条件:System Manager エージェントのバージョン 2.3.672.0以上
- Session Manager プラグインのバージョン 1.1.26.0以上
(3) 保守PC側の準備(AWS CLIをインストール)
AWS CLIをインストールして、"aws configure"を実行して以下のユーザ情報をPCに登録しておく
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-windows.html
PS C:\> aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: JSON
(4) 保守PC側の準備(SSM用のプラグインを追加する)
インストーラーをダウンロードして実行
https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe
実行した時、ディレクトリの指定ができないので、自分でAWSコマンドと同じフォルダに複写するか、PATHを指定すること。
(5) 保守PC側でポートフォワードを実行する
PowerShellでコマンドを実行する。--targetのi-xxxxは対象のインスタンスIDを書く。""は¥マークに置き換えてください。
PS C:\> aws ssm start-session --target i-0exxxxxxx4f --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389, localPortNumber=13389"
Starting session with SessionId: username-xxxxxxxxx
Port 13389 opened for sessionId username-xxxxxxxxx.
Connection accepted for session username-xxxxxxxxx.
プロキシ経由でインターネットにアクセスする場合
もしも"Starting session with.."に続く"port 13389 opend"が表示されず、ローカルポートがListtenされない場合はプロキシ経由の設定が必要になります。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-proxy-with-ssm-agent.html
▽プロキシ名とポート番号は入れ替えてください
PS C:\> set https_proxy=hoge.company.co.jp:port
PS C:\> aws ssm start-session --target i-0exxxxxxx4f --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389, localPortNumber=13389"
恒久的に使うなら下記ファイルに追加する
/etc/yum.conf
[main]
proxy=https://[proxy]:[port]
(6) 保守PC側でリモートデスクトップ接続を実行
リモートデスクトップの接続先は自分PCのポート「localhost:13389」を指定する。OSログインのIDとパスワードは、AWS管理ポータルで取得するやつ。Windows標準の"リモートデスクトップ接続"そのものなので、[Ctrl+C][Ctrl+V]も実行可能(PCからサーバーに、クリップボード経由でファイルをアップロードできた)。
その他
- 対象サーバーがLinuxの場合も、SSM経由でSSH接続ができます(ここでは割愛)
- 保守用PC(クライアントVPN)からサブネットにVPN接続する方法もあるのか
- https://aws.amazon.com/jp/about-aws/whats-new/2019/05/aws-client-vpn-now-available-in-asia-pacific-mumbai-and-asia-pacific-tokyo-aws-regions/
- AWS管理コンソールのSystem Managerのセッションマネージャーから、WEBブラウザ経由でOSコマンドラインにもアクセス可。