sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

SSH ポートフォワーディングを使って安全に RDP 接続してみよう

Ella Mai 聞いてると調子よくなります、那須です。

本稼働している Windows Server に RDP でアクセスしてメンテナンス作業したい… でもそれには VPN クライアントで対象ネットワークに接続して、さらに踏み台用 Windows Server に RDP でアクセスして、やっとそこからメンテナンス対象の Windows Server にログインできる…って経験はないでしょうか?

慣れてくるとたいした流れじゃないのですが、なんか手順が多いんですよね。 SSL-VPN サーバ等を経由する形だと、利用者が増えたり SSL-VPN サーバの不具合が出た場合なんかにメンテナンスのためのメンテナンスとか発生してしまって、もう何やってるかよくわからなくなったりします。

本稼働してる Windows Server のメンテナンスがしたいだけなんです!そのための仕組みに手間はかけたくないんです!って人のために、効率よくセキュアに目的を果たせる構成を今日はご紹介しましょう!

 

概要構成

一番左がメンテナンスする人の Windows 10 の端末です。真ん中の AWS アカウントが Bastion(踏み台)アカウント、一番右が本稼働している AWS アカウントです。
Bastion アカウント、本稼働アカウントのそれぞれに AmazonLinux2 を起動するだけです(定期的に sudo yum update は実施しましょう。Systems Manager でいいですね。
公開鍵は忘れずに各 AmazonLinux2 に置いておきましょう。
そして本稼働環境の作業対象の 1 つ前までは SSH ポートフォワーディングで RDP 通信を安全に転送していく流れです。

f:id:nasrinjp1:20181026214823p:plain

RDP する拠点が 1 つのオフィスだけなら Bastion アカウントもいらないんですが、他拠点からアクセスする場合や私のようにリモートワークしてる人がアクセスする場合はアクセス元を制限することが難しくなります。 本稼働アカウントでは RDP や SSH の送信元は制限しないといけない場合が多いので、Bastion アカウントからのみ受け付ける形にして Bastion 側である程度アクセス制限をかけるのがいいですね。

 

作業端末の準備

前提条件

PowerShell を使っていきます。 作業端末に SSH クライアントが入っていることが前提です。
↓このコマンドで確認できます。State : Installed だったら OK です。

Get-WindowsCapability -Online | ? { $_.Name -like 'OpenSSH.Client*' }


Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

もし SSH クライアントが入ってなかったら、↓このコマンドでインストールできます(私の PC には既に入ってたので確認は取れてません

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

 

接続手順

まず↓このコマンドで本稼働環境の AmazonLinux2 に SSH 接続しましょう。
コマンドのオプションの説明は省略しますね。ググればいっぱいでてくるので…

PS C:\> ssh -i "Bastion用秘密鍵のパス" -t -L 13389:localhost:13389 ec2-user@BastionのAmazonLinux2 ssh -i "本稼働用秘密鍵のパス" -L 13389:WindowsServerのプライベートIP:3389 ec2-user@本稼働のAmazonLinux2
Last login: Fri Oct 26 12:15:41 2018 from xxxxxxxxxx

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-xx-xx-xx-xx ~]$

本稼働環境の AmazonLinux2 のホスト名がプロンプト表示されるはずです。 この状態で PowerShell ウィンドウを開いたまま、作業対象の Windows Server に RDP アクセスします。 アクセス先は「localhost:13389」になります。

f:id:nasrinjp1:20181026220624p:plain

パスワード入力して認証 OK であれば、いつもの画面が開きます。これで完了です!むちゃ簡単ですね!
もちろん、日本語だって文字化けせずに表示されますし、ファイルを作業端末にコピーすることもできます。

f:id:nasrinjp1:20181026220639p:plain

 

まとめ

この方法だと下記のメリットがあっていいですね。

  • 通信はすべてインターネット経由でいいので VPN 不要
  • 本稼働用アカウントまではグローバル IP アドレスで通信するので、作業端末や Bastion のプライベート IP アドレスはなんでもいい
  • セキュリティグループはそれぞれのアクセス元の IP アドレスと SSH のポートだけに制限できる

Windows Server を運用していてメンテナンス経路やその仕組みでどうしようか悩んでいる方がいれば参考にしてみてください。

 

続編書きました(2018/12/13)

nasrinjp1.hatenablog.com