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

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

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

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

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

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

目標

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

費用

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

  • Compute Engine

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

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

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

    API を有効にする

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

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

  6. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  7. Compute Engine API を有効にします。

    API を有効にする

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

  • ローカルマシンで Google Chrome ブラウザを使用している。
  • 対話型の方法を使用する場合は、ローカルマシンに RDP クライアントが必要で、リモート VM インスタンスに RDP で直接接続できる必要があります。

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

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

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

Compute Engine インスタンスの作成

コンソール

  1. コンソールで [VM インスタンス] ページに移動します。

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

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

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

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

  5. [マシンの構成] で、2 つ以上の vCPU と 4 GB 以上のメモリを備えたマシンタイプを選択します。たとえば、e2-medium(2 つの vCPU、4 GB)。

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

  7. [ブートディスク] の [変更] をクリックし、[ブートディスク] パネルを開きます。

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

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

  10. [ブートディスク サイズ(GB)] の値が 50 以上に設定されているようにしてください。

  11. [選択] をクリックしてパネルを閉じます。

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

Cloud Shell

  1. Cloud Shell を開きます。

    Cloud Shell を開く

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

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

    gcloud compute instances create crdhost \
        --machine-type=e2-medium \
        --scopes=cloud-platform \
        --enable-display-device \
        --image-family=windows-2022 \
        --image-project=windows-cloud \
        --boot-disk-size=50GB \
        --boot-disk-device-name=crdhost
    

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

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

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

  1. コンソールで [VM インスタンス] ページに移動します。

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

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

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

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

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

  5. リモート インスタンスに接続するには、[RDP] ボタンの横にある矢印 をクリックし、[RDP ファイルをダウンロード] を選択します。RDP ファイルは任意の RDP クライアントで開くことができます。

  6. パスワードの入力を求めるメッセージが RDP クライアントに表示されたら、先ほど生成したパスワードを入力します。

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

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

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. コマンドが完了したら、PowerShell を閉じます。

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

これで、Chrome リモート デスクトップ サービスを開始して Google アカウントにリンクする 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/ENCODED_AUTHENTICATION_TOKEN" --redirect-url="https://remotedesktop.google.com/_/oauthredirect" --name=%COMPUTERNAME%
    
  6. [コピー] をクリックして、クリップボードにコマンドラインをコピーします。

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

  8. 先ほどコピーしたコマンドラインをコマンド プロンプト アプリに貼り付けて Enter キーを押します。

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

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

    コマンドが完了すると、リモート デスクトップ サービスが開始されます。

  11. コマンド プロンプト ウィンドウを閉じます。

  12. RDP セッションを閉じます。

これで、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/ENCODED_AUTHENTICATION_TOKEN" --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-central1-b
    REGION=us-central1
    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=e2-medium \
        --scopes=cloud-platform \
        --enable-display-device \
        --image-family=windows-2022 \
        --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のブートディスクが接続された Windows Server 2022 仮想マシンをデフォルト VPC に作成し、インスタンスが Google Cloud API にフルアクセスできるようにします。

    メタデータ値で、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. コンソールで [VM インスタンス] ページに移動します。

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

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

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

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

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

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

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

  2. [パソコンにアクセス] をクリックします。

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

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

  4. リモート デスクトップ インスタンスの名前をクリックします。

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

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

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

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

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

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

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

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

  1. マウスをウィンドウの端に移動すると表示されるボタン を使用して、[セッション オプション] パネルを開きます。
  2. [クリップボードの同期を有効にする] セクションで、[開始] をクリックします(このセクションは、クリップボードの同期がまだ有効になっていない場合にのみ表示されます)。
  3. [許可] をクリックします。

リモート デスクトップ Chrome アプリのインストール

リモート デスクトップ Chrome アプリでは、個別のウィンドウが開き、通常は Chrome がインターセプトするキーボード ショートカットをリモート システムで使用できます。

このアプリがインストールされていない場合は、次の操作を行います。

  1. マウスをウィンドウの端に移動すると表示されるボタン を使用して、[セッション オプション] パネルを開きます。
  2. [アプリをインストール] セクションで [開始] をクリックします。
  3. [許可する] をクリックします。

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

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

画面の解像度を改善する

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

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

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

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

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

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

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

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

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

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

Compute Engine インスタンスの削除

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

  1. コンソールで [VM インスタンス] ページに移動します。

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

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

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

    VM インスタンスの削除

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

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

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

  1. ローカル PC から Chrome リモート デスクトップのリモート デバイスリストのウェブサイトにアクセスします。
  2. インスタンス名 crdhost の横にある をクリックします。
  3. [OK] をクリックして、リモート デバイス接続を無効にする必要があります。

次のステップ

  • Android または iOS Chrome リモート デスクトップ アプリを使用して、スマートフォンからリモート デスクトップ環境へのアクセスを試みる。
  • 仮想ワークステーションを作成するためのその他のオプションについて学習する。
  • Google Cloud に関するリファレンス アーキテクチャ、図、チュートリアル、ベスト プラクティスを確認する。Cloud Architecture Center を確認する。