便利!EC2のUserDataでWindowsのユーザーを作成する

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

技術一課の鎌田(兄)です。

みなさん、EC2のインスタンス作成の際、UserDataをご活用かと思います。
Linuxではbash、WindowsだとPowerShellで書ける訳ですが、Windowsの場合、管理者権限を求められた上に、ポップアップで許可をしないと進めない、というケースがあります。

直近でも、「Windowsインスタンスが起動する時に、ローカルの管理者権限を持ったローカルユーザーを追加して欲しい!」なんてリクエストがあったのですが、こちらのブログで成果を公開したいと思います。

Windowsのローカルユーザー追加に必要なこと

Windowsのローカルユーザーを追加する際、コマンドで、しかもクリックなどもなく流れるようにするには、制約があります。

  • ユーザーアカウントの制御を無効化する必要がある
  • ユーザー追加コマンドを管理者権限で起動する必要がある

ユーザーアカウントの制御を無効化する必要がある

以下画面で、スライダーを一番下まで下げた状態にしておく必要があります。
この点を無効化しておかないと、せっかくUserDataにPowerShellのコードを入れても、ユーザー作成が行われません。

レジストリで管理されていますので、レジストリを書き換えるPowerShellコマンドを流すことで、無効化が可能です。
Set-ItemPropertyというPowerShellコマンドを使い、レジストリキー、レジストリ名、値を指定することで、書き換えることが出来ます。
これを使いましょう。

ユーザー追加コマンドを管理者権限で起動する必要がある

ユーザー追加を、管理者権限のない状態で実行しても、「アクセスが拒否されました」という、悲しいメッセージしか出てきません。
このため、ユーザー追加のコマンドを、「Powershellやcmdを管理者権限で実行する」のと同様に起動する必要があります。
通常であれば、以下のように、右クリックのメニューから選択されるケースが多いと思います。

が、こちらなんと、Start-ProcessというPowerShellコマンドに、 -Verb runAs という引数を付けることで、管理者モードで起動が出来ます。
これを使いましょう。

そしてコードが出来上がった!

出来上がったコードはこちらです。
testuserというユーザーを、パスワードTeset123!というパスワードで作っている例になります。

おわりに

WindowsのPowerShellはどうしても敬遠されがちですが、使いこなしていくことで、実に様々な作業を行うことが出来ます。
ユーザー作成も、その一例でしょう。
みなさんも、便利さを実感してください!

AWS運用自動化サービス「Cloud Automator」