概要
EC2のUserDataで以下のコマンド実行により自動インストールしたNICE DCVサーバーでは、自動起動されるセッションのオーナーが ContainerAdministrator
となるため Administrator
でアクセスしようとしても認証されない。
msiexec.exe /i https://d1uj6qtbmh3dt5.cloudfront.net/2021.1/Servers/nice-dcv-server-x64-Release-2021.1-10557.msi ADDLOCAL=ALL AUTOMATIC_SESSION_OWNER=Administrator /quiet /norestart /l*v dcv_install_msi.log
以下のように AUTOMATIC_SESSION_OWNER
を明示的に指定して自動インストールさせることで Administrator
で認証されるようになる。
msiexec.exe /i https://d1uj6qtbmh3dt5.cloudfront.net/2021.1/Servers/nice-dcv-server-x64-Release-2021.1-10557.msi ADDLOCAL=ALL AUTOMATIC_SESSION_OWNER=Administrator /quiet /norestart /l*v dcv_install_msi.log
詳細
経緯
Windows Server 2019のEC2インスタンス作成時、CloudFormationテンプレートで以下のようなUserDataを指定して、NICE DCVの仮想ディスプレイドライバーとサーバーをインストールした。
<script>
msiexec.exe /i https://d1uj6qtbmh3dt5.cloudfront.net/Drivers/nice-dcv-virtual-display-x64-Release-38.msi /quiet
msiexec.exe /i https://d1uj6qtbmh3dt5.cloudfront.net/2021.1/Servers/nice-dcv-server-x64-Release-2021.1-10557.msi ADDLOCAL=ALL /quiet /norestart /l*v dcv_install_msi.log
</script>
またNICE DCVの動作要件に合わせて、セキュリティグループで 8443
ポートのインバウンド通信を許可し、次のようなステートメントを持つポリシーをロールにより付与している。
Effect: Allow
Action: s3:GetObject
Resource: !Sub arn:aws:s3:::dcv-license.${AWS::Region}*
CloudFormationによりデプロイされたEC2インスタンスにまずRDPで接続し、Administratorでサインインできること、DCV Serverサービスが立ち上がっていることを確認した。この後、NICE DCVクライアントでこのEC2インスタンスに接続し、Administratorでサインインしようとしたところ、以下のエラーが表示された。
connection authentication failed
問題の調査
NICE DCVサーバーは以下にログを出力している(「ログファイルの使用 - NICE DCV」参照)。
- Windows …
C:\ProgramData\NICE\dcv\log\server.log
- Linux …
/var/log/dcv/server.log
確認したところ、次のようなログが記録されていた。
2021-06-09 13:56:06,108929 [ 2736:2812 ] WARN frontend-handler - Cannot create connection from client 'xxx.xxx.xxx.xxx:xxxxx' to session 'console': User 'Administrator' not authorized on any channel
構築時に参考にしたページに次のような記述がある。
DCV Session Management Configurationではセッションを自動/手動での作成を選択できます。セッションが無いと接続が出来ないため、今回は自動で作成しました。
(リモートでのゲーム開発にオススメ?EC2にNICE DCVを導入してみた | DevelopersIO)
自動インストールの説明では次のように書かれており、この辺りは問題ないつもりでいた。
- 自動コンソールセッションを作成します。
- コンソールセッションの所有者を、インストールを実行するユーザーに設定します。
でもエラーメッセージと合わせて考えると、セッションがどんなふうになっているかが気になる。スタートメニューとか見ても管理画面らしきものがないなと思ってドキュメントを探したところ、NICE DCVサーバーでのセッション管理はコマンドラインのみらしい。
セッション情報を表示してみる。
C:\Users\Administrator> cd "C:\Program Files\NICE\DCV\Server\bin"
C:\Program Files\NICE\DCV\Server\bin> dcv list-sessions
Session: 'console' (owner:ContainerAdministrator type:console)
オーナーが ContainerAdministrator
になっている…これは Administrator
のことなのか、それともここが間違ってるのか?
切り分け
既存セッションを停止し、オーナーが Administrator
のセッションを起動して試してみることにする。まず既存の console
セッションの停止。
C:\Program Files\NICE\DCV\Server\bin> dcv close-session console
次に新規セッションの開始。
C:\Program Files\NICE\DCV\Server\bin> dcv create-session --name console --owner Administrator console
もう一度、セッション情報を表示。
c:\Program Files\NICE\DCV\Server\bin>dcv list-sessions
Session: 'console' (owner:Administrator type:console name:console)
オーナーが Administrator
に変わった。やはり ContainerAdministrator
は別物らしい。
この状態でNICE DCVクライアントで接続し Administrator
でサインインを試みたところ、今度は成功した。
解決策
ここまでで、以下のことが確認できている。
- オーナーが
Administrator
のセッションがないとサインインできない。 - CloudFormationのUsetDataでNICE DCVの自動インストールを指定したEC2インスタンスデプロイでは、
ContainerAdministrator
でセッションが作成されてしまう。 - ひとまずのワークアラウンドとしては、セッションをオーナー
Administrator
で再作成すると、サインイン可能になる。
自動インストールでは、この自動起動されるセッションのオーナーをコマンドラインオプションで指定できる。
インストールコマンドに次のオプションを追加することで、デフォルトのアクションを上書きすることができます。
・(略)
・AUTOMATIC_SESSION_OWNER=owner_name - 自動コンソールセッションの別の所有者を指定します。
(自動インストール - Windows での NICE DCV サーバのインストール - NICE DCV)
NICE DCVサーバーのインストーラーの実行行に、以下のように AUTOMATIC_SESSION_OWNER
の指定を追加することで、問題が解消される。
<script>
msiexec.exe /i https://d1uj6qtbmh3dt5.cloudfront.net/Drivers/nice-dcv-virtual-display-x64-Release-38.msi /quiet
msiexec.exe /i https://d1uj6qtbmh3dt5.cloudfront.net/2021.1/Servers/nice-dcv-server-x64-Release-2021.1-10557.msi ADDLOCAL=ALL AUTOMATIC_SESSION_OWNER=Administrator /quiet /norestart /l*v dcv_install_msi.log
</script>
実際にこのUserDataでデプロイされたEC2インスタンスでは、そのまま administrator
ユーザーで認証された。