Windows Sysprep 後に キーペアを変更して、フリートマネージャーを使用した RDP 接続は可能ですか
困っていること
Windows Server 2016 以降の OS で EC2 インスタンスを利用しています。複製目的のため SID などが重複しないよう Windows Sysprep を行い、停止中の EC2 インスタンスよりカスタム AMI 取得しました。
その取得した カスタム AMI を利用した EC2 インスタンス起動時に、元の EC2 インスタスに設定していたキーペアと異なる、キーペアを設定したいです。
変更後のキーペアで、SSM フリートマネージャーを使用したマネージドノードに対する RDP 接続が可能か教えてください。
どう対応すればいいの?
Windows Sysprep (EC2Launch, EC2Launch v2) 設定画面より "Random" を選択後に実行していれば可能です。
管理者アカウントの設定
有効にすると、ローカルマシンに作成される管理者アカウントのユーザー名とパスワードの属性を設定できます。この機能を有効にしないと、Sysprep 後に管理者アカウントがシステムに作成されません。adminPasswordtype が Specify である場合のみ、adminPasswordにパスワードを入力してください。
パスワードの種類は次のとおりです。
Random
EC2Launch は、ユーザーのキーを使用してパスワードを生成し、暗号化します。この設定はインスタンス起動後に無効になるため、インスタンスを再起動したり、停止して起動した場合でもパスワードは保持されます。
Specify
EC2Launch は、adminPassword で指定したパスワードを使用します。指定したパスワードがシステム要件を満たさない場合は、代わりに EC2Launch によってランダムなパスワードが生成されます。このパスワードはクリアテキストとして agent-config.yml に保存され、Sysprep で管理者パスワードが設定されると削除されます。EC2Launch は、ユーザーのキーを使用してパスワードを暗号化します。
Do not set
EC2Launch は、unattend.xml ファイルで指定したパスワードを使用します。unattend.xml でパスワードを指定しないと、管理者アカウントは無効になります。
確認してみた
同じキーペアを設定した Windows OS の EC2 インスタンスを 3 台起動します。
- Name: Random
- Name: Do Nothing
- Name: Specify
弊社ブログを参考に、Windows Sysprep を実施します。
検証のため以下のように Name タグ通りの設定で、各 EC2 インスタンスへ Windows Sysprep を実施しました。
※ Random
※ Do Nothing
※ Specify
Windows Sysprep 実施後、停止中の EC2 インスタンスより カスタム AMI を取得します。
(AMI 名には、どのような設定で実施した記載)
元の EC2 インスタンスと異なるキーペアを設定して、カスタム AMI より EC2 インスタンスを起動します。
準備は整ったので、検証します。
- Random
異なる キーペアでも RDP 接続可能です。
- Do Nothing
以下のエラーが表示され、異なる キーペアで RDP 接続できません。
- Specify
他 2 台と同様にマネージドノードとして登録されるように起動したものの、認識されません。
Specify で設定して Windows Sysprep を実行後、起動した 元の EC2 インスタンス (Name:Specify) も Ping ステータスが "Connection Lost" になっているなども合わせて確認できます。
参考資料
- Windows Sysprep を使用して Amazon EC2 AMI を作成する - Amazon Elastic Compute Cloud
- Remote Desktop を使用して Windows Server マネージドインスタンスに接続する - AWS Systems Manager
- Windows インスタンスで EC2Launch v1 エージェントを設定する - Amazon Elastic Compute Cloud
- EC2Launch v2 設定を Windows インスタンスに構成する - Amazon Elastic Compute Cloud
- Amazon EC2(Windows Server2019)をSysprepして複製してみた | DevelopersIO