Compute Engine での Windows 向け Chrome リモート デスクトップのセットアップ

このチュートリアルでは、Compute Engine の Microsoft Windows 仮想マシン(VM)インスタンスで Chrome リモート デスクトップ サービスを設定する方法について説明します。Chrome リモート デスクトップを使用すると、ローカル パソコンまたはモバイル デバイスからグラフィック ユーザー インターフェースを使用してアプリケーションにリモート アクセスできます。

このアプローチでは、VM がインターネットにアクセスする必要があり、認証と認可に Google アカウントを使用しますが、ファイアウォール ポートを開く必要はありません。

Chrome リモート デスクトップを設定する 2 つの方法について説明します。1 つ目は、Windows リモート デスクトップ プロトコル(RDP)を使用した対話型の方法で、最初にインターネットから仮想マシンにアクセスできる必要があります。2 つ目の方法は、VM の作成時に GCESysprep 専用スクリプトを使用して Chrome リモート デスクトップをインストールして構成する非対話型の方法です。

このチュートリアルは、Microsoft Windows と PowerShell コマンドラインに精通していることを前提としています。

仮想ワークステーションを作成するためのその他のオプションについて、詳しくは仮想ワークステーションの作成をご覧ください。

目標

  • Chrome リモート デスクトップを実行する Windows Compute Engine VM インスタンスを作成します。
  • VM インスタンスに Chrome リモート デスクトップ サービスをインストールして構成します。
  • ローカル パソコンから VM インスタンス上のデスクトップ環境に接続します。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

  • Compute Engine

料金計算ツールを使用すると、予想使用量に基づいて費用の見積もりを作成できます。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Compute Engine API を有効にします。
  5. API を有効にする

次の追加要件を満たしていることを確認します。

  • ローカルマシンで Google Chrome ブラウザを使用している。
  • インタラクティブな方法を使用していて、代替の RDP クライアントを使用していない場合は、Google Cloud アプリ用の Chrome RDP をインストールする必要がある。

RDP を使用した対話型インストール

Chrome リモート デスクトップを対話型でインストールするには、RDP を使用してリモート VM に接続できる必要があります。このチュートリアルでは、デフォルトのファイアウォール ルールを持つデフォルトの VPC で VM を作成します。これにより、RDP ポート 3339 がインターネットに公開されます。

ご使用の環境でこの操作ができない場合は、このドキュメントで後述する非対話型の方法を使用してください。

Compute Engine インスタンスの作成

Console

  1. Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [作成] をクリックします。

  3. インスタンス名を crdhost に設定します。

  4. 必要に応じて、近くのリージョンとゾーンを選択します。

  5. [マシンの構成] で [マシンタイプ] を [n1-standard-2](2 vCPU)に変更します。

  6. [CPU プラットフォームと GPU] をクリックしてセクションを展開します。

  7. Chrome リモート デスクトップでは Windows VM 上の表示デバイスを必要とするため、[表示デバイスをオンにする] チェックボックスをオンにします。

  8. ブートディスクの説明の横にある [変更] をクリックして、[ブートディスク] パネルを開きます。

  9. [オペレーティング システム] プルダウンをクリックして [Windows Server] を選択します。

  10. [バージョン] プルダウンをクリックして [Windows Server 2019 Datacenter] を選択します。

  11. 次の値が設定されていることを確認します。

    • [ブートディスクの種類] が [標準永続ディスク] に設定されている。
    • [サイズ(GB)] が [50] に設定されている。
  12. [選択] をクリックしてパネルを閉じます。

  13. [作成] をクリックします。

Cloud Shell

  1. Cloud Shell を開きます。

    Cloud Shell を開く

  2. 優先ゾーンを設定します。

    ZONE=us-east1-b
    REGION=us-east1
    gcloud config set compute/zone "${ZONE}"
    
  3. Windows Server 2019 Datacenter のアプリイメージを使用して Compute Engine インスタンスを作成します。

    gcloud compute instances create crdhost \
        --machine-type=n1-standard-2 \
        --scopes=cloud-platform \
        --enable-display-device \
        --image-family=windows-2019 \
        --image-project=windows-cloud \
        --boot-disk-size=50GB \
        --boot-disk-device-name=crdhost
    

    このコマンドにより、表示デバイス(Windows VM の Chrome リモート デスクトップに必要)と 50 GB のブートディスクを備えた Windows Server 2019 仮想マシンが作成され、インスタンスに Google Cloud APIs への完全アクセス権が付与されます。

    このチュートリアルでは高いパフォーマンスを必要としないため、ディスク パフォーマンスの警告は無視してください。

インスタンスの作成には約 5 分かかります。

RDP を使用して VM インスタンスに接続する

  1. Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. crdhost インスタンスの名前の横に、準備完了を表す緑色のチェックマーク が表示されていることを確認します。

  3. インスタンス名 crdhost をクリックして [VM インスタンスの詳細] ページを開きます。

  4. [リモート アクセス] で [Windows パスワードを設定] をクリックし、[設定] をクリックしてリモートマシンにアカウントを作成します。

    この手順ではパスワードが生成されます。パスワードをメモするか、安全な一時ファイルにコピーします。

  5. Chrome RDP アプリを使用してリモート インスタンスに接続するには、[RDP] ボタンをクリックします。

    代替 RDP クライアントを使用する場合は、[RDP] ボタンの横にあるプルダウン矢印 をクリックし、[RDP ファイルをダウンロード] を選択します。RDP ファイルは任意の RDP クライアントで開くことができます。

  6. プロンプトが表示されたら、生成したパスワードを入力して [OK] をクリックします。

  7. サーバー証明書を受け入れてリモート Windows インスタンスにログインするには、[続行] をクリックします。

  8. 使用中のパソコンをネットワーク上の他のパソコンやデバイスから検出可能にするかどうかを確認するメッセージが表示されたら、[いいえ] をクリックします。

  9. サーバー マネージャーのダッシュボードが開いている場合は閉じます。

Chrome と Chrome リモート デスクトップをインストールする

次に、Google Chrome と Chrome リモート デスクトップ サービスを VM インスタンスにインストールします。

  1. RDP セッションで、Windows タスクバーの [スタート] ボタンをクリックし、「PowerShell」と入力してから Windows PowerShell アプリを選択します。

  2. PowerShell プロンプトで、HTTPS リクエストを有効にします。

    [Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
    
  3. Chrome リモート デスクトップ ホストのインストーラをダウンロードして実行します。

    & {$P = $env:TEMP + '\chromeremotedesktophost.msi'; Invoke-WebRequest 'https://dl.google.com/edgedl/chrome-remote-desktop/chromeremotedesktophost.msi' -OutFile $P; Start-Process $P -Wait; Remove-Item $P}
    
  4. プロンプトが表示されたら、インストーラによる変更を確認します。

  5. Google Chrome インストーラをダウンロードして実行します。

    & {$P = $env:TEMP + '\chrome_installer.exe'; Invoke-WebRequest 'https://dl.google.com/chrome/install/latest/chrome_installer.exe' -OutFile $P; Start-Process -FilePath $P -Args '/install' -Verb RunAs -Wait; Remove-Item $P}
    
  6. プロンプトが表示されたら、インストーラによる変更を確認します。

    インストールが完了すると、リモート デスクトップに Google Chrome ウィンドウが開きます。

Chrome リモート デスクトップ サービスを設定する

  1. リモート デスクトップの Google Chrome ウィンドウで、次の URL にアクセスします。

    https://remotedesktop.google.com/access/
    
  2. このマシンへのアクセスに使用する Google アカウントにログインします。

  3. [リモート アクセスの設定] ダイアログで、[ダウンロード] をクリックして Chrome ウェブストアのページに移動します。

  4. 拡張機能をインストールするには、[Chrome に追加]、[拡張機能を追加] の順にクリックします。

  5. Chrome リモート デスクトップの設定ページで、[次へ] をクリックしてコンピュータ名を承認します。

  6. プロンプトが表示されたら、6 桁の PIN を入力してください。この番号は、後で接続するときの新たな認可に使用されます。

  7. [開始] をクリックします。

  8. プロンプトが表示されたら、アプリケーションによる変更を確認します。

    リモート デスクトップ サービスが起動し、crdhost のステータスが [開始中] から [オンライン] に変わります。

  9. Chrome ウィンドウを閉じます。

  10. PowerShell を閉じます。

  11. リモート デスクトップ ウィンドウを閉じます。

これで、Chrome リモート デスクトップを使用して VM に接続できるようになりました。

非対話型インストール

このアプローチでは、VM の作成時に GCESysprep 専用スクリプトを実行するように VM インスタンスを構成します。

このアプローチでは、インターネットにアクセスする必要はありますが、インターネットから直接アクセスされる必要はありません。

Chrome リモート デスクトップ サービスを承認する

これで、後で専用スクリプトで使用する Windows コマンドが生成されるようになりました。ここでは、コマンドに含まれる認可情報を指定します。

  1. ローカル パソコンで、Chrome ブラウザを使用して、Chrome リモート デスクトップのコマンドライン設定ページに移動します。

  2. まだログインしていない場合は、Google アカウントでログインします。これは、リモート アクセスの承認に使用されるアカウントです。

  3. [開始] をクリックし、[次へ] をクリックします。

  4. [承認] をクリックします。

  5. Chrome リモート デスクトップにアカウントへのアクセスを許可します。

    このページにはいくつかのコマンドラインが含まれています。そのうちの 1 つは、次のような Windows(Cmd)用のコマンドラインです。

    "%PROGRAMFILES(X86)%\Google\Chrome Remote Desktop\CurrentVersion\remoting_start_host.exe" --code="4/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_XXXXXXXX" --redirect-url="https://remotedesktop.google.com/_/oauthredirect" --name=%COMPUTERNAME%
    

    --code フラグには、一意の有効期間が短い OAuth トークンが含まれています。

    コマンドライン上の認証コードは数分間のみ有効であり、1 回のみ使用できます。

    このページは閉じないでください。

起動コマンドを Cloud Shell にコピーする

次のステップでは、生成したばかりの起動コマンドを含むファイルを Cloud Shell インスタンスに作成します。

  1. Cloud Shell を開きます。

    Cloud Shell を開く

  2. 起動コマンド用のファイルを作成します。

    cat  > crd-auth-command.txt
    
  3. Chrome リモート デスクトップの起動コマンドが表示されているページに移動し、Windows(Cmd)コマンドラインをコピーします。

  4. Cloud Shell で、コマンドを貼り付けてファイルに追加します。

  5. Enter キーを押して行を終了し、Ctrl+D キーを押してファイルを閉じます。

GCESysprep 専用スクリプトを作成する

  • 次のコードブロックをコピーして Cloud Shell に貼り付けます。

    cat << "EOF" > crd-sysprep-script.ps1
    <#
        .SYNOPSIS
        GCESysprep specialize script for unattended Chrome Remote Desktop installation.
    #>
    $ErrorActionPreference = 'stop'
    
    function Get-Metadata([String]$metadataName) {
      try {
        $value = (Invoke-RestMethod `
            -Headers @{'Metadata-Flavor' = 'Google'} `
            -Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes/$metadataName")
      }
      catch {
        # Report but ignore REST errors.
        Write-Host $_
      }
      if ($value -eq $null -or $value.Length -eq 0) {
        throw "Metadata value for ""$metadataName"" not specified. Skipping Chrome Remote Desktop service installation."
      }
      return $value
    }
    
    # Get config from metadata
    #
    $crdCommand = Get-Metadata('crd-command')
    $crdPin = Get-Metadata('crd-pin')
    $crdName = Get-Metadata('crd-name')
    
    if ($crdPin -isNot [Int32] -or $crdPin -gt 999999 -or $crdPin -lt 0) {
      throw "Metadata ""crd-pin""=""$crdPin"" is not a 6 digit number. Skipping Chrome Remote Desktop service installation."
    }
    # Prefix $crdPin with zeros if required.
    $crdPin = $crdPin.ToString("000000");
    
    # The command from remote desktop authentication does not have the correct path to the application,
    # and is missing the --pin and --name arguments which are required for unattended installation.
    #
    $crdCommandArgs = $crdCommand.Split(' ')
    $codeArg = $crdCommandArgs | Select-String -Pattern '--code="[^"]+"'
    $redirectArg = $crdCommandArgs | Select-String -Pattern '--redirect-url="[^"]+"'
    
    if (-not $codeArg) {
      throw 'Cannot get --code= parameter from crd-command. Skipping Chrome Remote Desktop service installation.'
    }
    if (-not $redirectArg) {
      throw 'Cannot get --redirect-url= parameter from crd-command. Skipping Chrome Remote Desktop service installation.'
    }
    
    [Net.ServicePointManager]::SecurityProtocol = 'tls13, tls12, tls11, tls'
    
    Write-Host 'Downloading Chrome Remote Desktop.'
    $installer = "$env:TEMP\chromeremotedesktophost.msi"
    Invoke-WebRequest 'https://dl.google.com/edgedl/chrome-remote-desktop/chromeremotedesktophost.msi' `
        -OutFile $installer
    Write-Host 'Installing Chrome Remote Desktop.'
    & msiexec.exe /I $installer /qn /quiet | Out-Default
    Remove-Item $installer
    
    $installer = "$env:TEMP\chrome_installer.exe"
    Write-Host 'Downloading Chrome.'
    Invoke-WebRequest  'https://dl.google.com/chrome/install/latest/chrome_installer.exe' `
        -OutFile $installer
    Write-Host 'Installing Chrome.'
    & $installer /silent /install | Out-Default
    Remove-Item $installer
    
    Write-Host 'Starting Chrome Remote Desktop service.'
    & "${env:ProgramFiles(x86)}\Google\Chrome Remote Desktop\CurrentVersion\remoting_start_host.exe" `
        $codeArg $redirectArg --name="$crdName" -pin="$crdPin" | Out-Default
    
    EOF
    

    このコードブロックは、VM の作成時に実行される PowerShell 専用スクリプトです。次の操作を行います。

    • Chrome リモート デスクトップ ホスト サービスをダウンロードしてインストールします。
    • Chrome ブラウザをダウンロードしてインストールします。
    • 次のメタデータ パラメータを取得します。
      • crd-command - Windows 認証と起動コマンド。
      • crd-pin - 追加の認証に使用される 6 桁の PIN。
      • crd-name - このインスタンスの名前。
    • Chrome リモート デスクトップ ホスト サービスを構成して起動します。

新しい Windows 仮想マシンを作成する

先ほど作成したファイルを使用して新しい Windows VM を作成し、Chrome リモート デスクトップを構成して設定します。

  1. Cloud Shell で、優先ゾーンを設定します。

    ZONE=us-east1-b
    REGION=us-east1
    gcloud config set compute/zone "${ZONE}"
    
  2. Chrome リモート デスクトップの追加認証用に 6 桁の PIN を設定します。

    CRD_PIN=your-pin
    

    your-pin は 6 桁の数字に置き換えてください。

  3. この VM インスタンスの名前を設定します。

    INSTANCE_NAME=crdhost
    
  4. インスタンスを作成します。

    gcloud compute instances create ${INSTANCE_NAME} \
        --machine-type=n1-standard-2 \
        --scopes=cloud-platform \
        --enable-display-device \
        --image-family=windows-2019 \
        --image-project=windows-cloud \
        --boot-disk-size=50GB \
        --boot-disk-device-name=${INSTANCE_NAME} \
        --metadata=crd-pin=${CRD_PIN},crd-name=${INSTANCE_NAME} \
        --metadata-from-file=crd-command=crd-auth-command.txt,sysprep-specialize-script-ps1=crd-sysprep-script.ps1
    

    このコマンドにより、表示デバイス(Windows VM の Chrome リモート デスクトップに必要)と 50 GB のブートディスクを備えたデフォルト VPC の Windows Server 2019 仮想マシンが作成され、インスタンスに Google Cloud APIs への完全アクセス権が付与されます。

    メタデータ値で、Chrome リモート デスクトップ サービスの起動に必要な専用スクリプト、Windows 起動コマンドライン、パラメータを指定します。

VM の起動をモニタリングする

起動スクリプトが正常に作成されているかどうかを確認するために、VM の作成中に VM のシリアルポートに記録されたメッセージをチェックします。

  1. Cloud Shell で、VM の起動時にログに記録されたメッセージを表示します。

    gcloud compute instances tail-serial-port-output ${INSTANCE_NAME}
    

    Chrome リモート デスクトップの構成が成功すると、次のログ行が表示されます。

    Found sysprep-specialize-script-ps1 in metadata.
    sysprep-specialize-script-ps1: Downloading Chrome Remote Desktop.
    sysprep-specialize-script-ps1: Installing Chrome Remote Desktop.
    sysprep-specialize-script-ps1: Downloading Chrome.
    sysprep-specialize-script-ps1: Installing Chrome.
    sysprep-specialize-script-ps1: Starting Chrome Remote Desktop service.
    sysprep-specialize-script-ps1 exit status 0
    Finished running specialize scripts.
    

    Chrome リモート デスクトップの構成が失敗した場合は、次のような問題を示すエラー メッセージが表示されます。

    sysprep-specialize-script-ps1: Couldn't start host: OAuth error.
    

    このエラーは、Chrome リモート デスクトップ認証ページの OAuth トークンがすでに使用されているか、期限切れになっているために、無効になったことを示しています。

    このエラーを修正するには、RDP 経由で接続し、前述のように対話型で設定を行うか、VM を削除して設定プロセスを再試行します。

    シリアルポート モニターに次のメッセージが表示されたら、VM の準備は完了です。

    GCEInstanceSetup: ------------------------------------------------------------
    GCEInstanceSetup: Instance setup finished. crdhost is ready to use.
    GCEInstanceSetup: ------------------------------------------------------------
    
  2. Control+C キーを押して、起動メッセージの表示を停止します。

Windows ユーザー アカウントを作成する

  1. Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. インスタンス名 crdhost をクリックして [VM インスタンスの詳細] ページを開きます。

  3. [リモート アクセス] で [Windows パスワードを設定] をクリックし、[設定] をクリックしてリモートマシンにアカウントを作成します。

    この手順ではパスワードが生成されます。ユーザー名とパスワードをメモするか、安全な一時ファイルにコピーします。

Chrome リモート デスクトップを使用した VM インスタンスへの接続

Chrome リモート デスクトップ ウェブ アプリケーションを使用して VM インスタンスに接続できます。

  1. ローカル PC から Chrome リモート デスクトップのウェブサイトにアクセスします。

  2. まだ Google にログインしていない場合は、Chrome リモート デスクトップ サービスの設定で使用した Google アカウントでログインします。

    新しい crdhost VM インスタンスが [リモート デバイス] リストに表示されます。

    接続可能なリモート デバイスのリスト

  3. インスタンスの名前をクリックします。

  4. プロンプトが表示されたら、前に作成した PIN を入力し、矢印 ボタンをクリックして接続します。

    これで、リモートの Compute Engine インスタンスの Windows ログイン画面に接続されました。

  5. 任意のキーを押して、前に生成した Windows ユーザーのパスワードを入力します。デフォルトのリモート キーボードは英語(米国)のレイアウトになっているため、入力した文字がローカル キーボードの文字と一致しない場合があります。パスワードをコピーして貼り付けることもできません。

これで、リモートの Windows デスクトップに接続してログインできました。

リモート デスクトップ エクスペリエンスの向上

このセクションでは、リモート デスクトップ エクスペリエンスを向上させるために設定を変更する手順について説明します。

クリップボードの同期を有効にする

クリップボードの同期を使用すると、クリップボードの内容をローカルマシンとリモートマシンの間で共有できます。この機能がまだ有効になっていない場合は、次の操作を行います。

  1. ウィンドウの横にあるボタン を使用して [セッションのオプション] パネルを開きます。
  2. [クリップボードの同期を有効にする] セクションで、[開始] をクリックします。
  3. [許可] をクリックします。

リモート デスクトップ Chrome アプリをインストールする

リモート デスクトップ Chrome アプリでは、個別のウィンドウが開き、リモート システムでより多くのキーボード ショートカットを使用できます。このアプリがインストールされていない場合は、次の操作を行います。

  1. ウィンドウの横にあるボタン を使用して [セッションのオプション] パネルを開きます。
  2. [アプリをインストール] セクションで [開始] をクリックします。
  3. [インストール] をクリックします。

    リモート デスクトップ セッションが別のウィンドウで再度開かれます。

URL バーの [アプリケーションで開く] アイコンをクリックすると、リモート デスクトップ セッションを Chrome タブからアプリ ウィンドウに移動できます。

画面の解像度を改善する

デフォルトのリモート デスクトップの解像度は、ローカル コンピュータのデスクトップの解像度に合わせて変更できます。

  1. リモート デスクトップの背景を右クリックし、[ディスプレイ設定] を選択します。
  2. [解像度] プルダウン リストで、別の画面解像度を選択します。
  3. ダイアログで新しい画面解像度を確認します。

サービスを再度有効にする

クライアント アプリでリモート インスタンスへの接続を誤って無効にした場合は、Chrome リモート デスクトップ サービスの設定の手順に従って、サービスを再構成して再度有効にできます。

クリーンアップ

このチュートリアルで使用するリソースについて、Google Cloud Platform アカウントへの課金が発生しないようにする手順は次のとおりです。

プロジェクトの削除

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

Compute Engine インスタンスの削除

プロジェクト全体を削除する代わりに、このチュートリアル用に作成した VM インスタンスを削除することもできます。

  1. Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 作成したインスタンス名(crdhost)の横にあるチェックボックスをオンにします。

  3. ページ上部にある [削除] ボタンをクリックします。

    VM インスタンスの削除

    インスタンスの削除には少し時間がかかります。

インスタンスに対する Chrome リモート デスクトップの承認を解除する

VM インスタンスに接続する必要がなくなった場合は、インスタンスを無効にして、[リモート デバイス] リストから削除できます。

  1. ローカル PC から Chrome リモート デスクトップのリモート デバイスリスト(ベータ版)のウェブサイトにアクセスします。

  2. インスタンス名の横にある をクリックします。

    Chrome でリモート デバイスを無効にする

  3. [OK] をクリックして、リモート デバイス接続を無効にする必要があります。

次のステップ