高度なインストール:Entra ID アプリを作成します

従来の Nerdio Manager デプロイメントでは、インストールガイドに記載されている手順と指示に従う必要があります。詳細については、「Nerdio Manager インストールガイド」を参照してください。ここに記載されている高度なインストール方法は、必要に応じて特定の状況でのみ使用してください。

警告

これは Nerdio Manager の高度なカスタムインストールであり、特別な状況でのみお勧めです。Nerdio Supportのアドバイスとガイダンスに従って使用してください。ご不明な点がございましたら、nme.support@getnerdio.com までお問い合わせください。

注記

Nerdio Managerの更新には、Cloud ShellまたはPowerShellスクリプトの実行が必要です。詳細については、アプリのNerdio Manager更新を参照してください。

Entra ID で Nerdio Manager アプリを手動で作成するための高度なインストール手順:

  • Azure Marketplace デプロイメント (サブスクリプション所有者が完了します)。

  • Entra ID アプリケーション登録とセットアップ (グローバル管理者、または特権ロール管理者とクラウド アプリケーション管理者の組み合わせが完了します)。

  • Azure リソース構成 (サブスクリプション所有者が完了します)。

アプリとサービス プリンシパルを作成します

以下の手順で、アプリとサービス プリンシパルを作成します。

アプリとサービス プリンシパルを作成するには:
  1. Azure ポータルで、Microsoft Entra ID > アプリの登録 > 新規登録 に移動します。

  2. 次の情報を入力してください:

    • 名前: nerdio-nmw-app (必要に応じてデフォルトのアプリ名を変更してください)

    • アカウントタイプ'任意の組織ディレクトリ内のアカウント (任意の Entra ID ディレクトリ - マルチテナント)'

    • リダイレクト URL:Web, https://<app_service_name>.azurewebsites.net/

  3. アプリ ID を保存します。(Nerdio Manager 展開用に提供されます。)

  4. Microsoft Entra ID > アプリの登録 > すべてのアプリケーション > nerdio-nmw-app (またはカスタムアプリ名) > 認証 に移動します。

  5. 次の情報を入力してください:

    • Redirect URLs > Add URL: https://<app_service_name>.azurewebsites.net/signin-oidc

    • Front-channel logout URL: https://<app_service_name>.azurewebsites.net/signout-oidc

    • 暗黙的な許可およびハイブリッド フロー:アクセストークンと ID トークンを有効にします

  6. Microsoft Entra ID > エンタープライズ アプリケーション > すべてのアプリケーション > nerdio-nmw-app (またはカスタムアプリ名) に移動します

  7. オブジェクト ID を保存します。(Nerdio Manager 展開用に提供されます。)

  8. あるいは、以下のPowerShellスクリプトを使用してこれらの変更を完了することもできます。

    $webAppName = "" # REQUIRED: Name of app service provisioned in marketplace deployment
    $appName = "nerdio-nmw-app" # Optionally rename the default application
    $webAppUrl = 'https://' + $webAppName + '.azurewebsites.net/'
    $loginUrl = $webAppUrl + 'signin-oidc'
    $logoutUrl = $webAppUrl + 'signout-oidc'
    $application = New-AzureADApplication -DisplayName $appName -HomePage $webAppUrl -LogoutUrl $logoutUrl -ReplyUrls $webAppUrl, $loginUrl -AvailableToOtherTenants $True -Oauth2AllowImplicitFlow $true -PublicClient $False
    New-AzureADServicePrincipal -AppId $application.AppId -Tags {WindowsAzureActiveDirectoryIntegratedApp} -AppRoleAssignmentRequired $True
    $servicePrincipal = Get-AzureADServicePrincipal -Filter "AppID eq '$($application.AppID)'"
    Write-Host "Application ID to be saved in to app service $($Application.AppID)"
    Write-Host "Service Principal ID to be provided to Nerdio Manager deployment: $($servicePrincipal.ObjectId)"
    

アプリロールを設定し、AVD管理者をアサインする

以下の手順で、アプリロールを設定し、AVD管理者をアサインします。

注記

アプリロールには、各役割ごとに特定の ID をアサインする必要があります。役割名、説明、および ID は、アプリ登録に変更することで追加できます。

アプリロールを設定し、AVD管理者をアサインするには:
  1. Azureポータルで [Microsoft Entra ID] > [アプリの登録] > [すべてのアプリケーション] > [nerdio-nmw-app] (またはカスタムアプリ名) > [マニフェスト] に移動します。

  2. "appRoles": [] エントリ (通常は8行目) を以下の値に置き換えます。

    "appRoles": [
        {
        "allowedMemberTypes": [
            "User"
        ],
        "description": "Complete access to all areas of NMW.",
        "displayName": "WVD Admin",
        "id": "d1c2ade8-98f8-45fd-aa4a-6d06b947c66f",
        "isEnabled": true,
        "origin": "Application",
        "value": "WvdAdmin"
        },
        {
        "allowedMemberTypes": [
            "User"
        ],
        "description": "Complete access to User sessions, ability to view Host Pools, hosts and restart them, but no ability to add/remove or change any settings.",
        "displayName": "Desktop Admin",
        "id": "ed0cdef0-4267-4470-bfff-5e0b6944f9e4",
        "isEnabled": true,
        "origin": "Application",
        "value": "DesktopAdmin"
        },
        {
        "allowedMemberTypes": [
            "User"
        ],
        "description": "Complete access to User sessions only.",
        "displayName": "Help Desk",
        "id": "a94e83da-b314-4232-b8c8-94508c5ed533",
        "isEnabled": true,
        "origin": "Application",
        "value": "HelpDesk"
        },
        {
        "allowedMemberTypes": [
            "User"
        ],
        "description": "View access to all areas of NMW; no ability to save or make changes.",
        "displayName": "Reviewer",
        "id": "0a1b7425-f55a-44a6-9caa-b9a5cc9448da",
        "isEnabled": true,
        "origin": "Application",
        "value": "Reviewer"
        },
        {
        "allowedMemberTypes": [
            "User"
        ],
        "description": "View & manage own sessions (Message, Log off, Disconnect). Personal desktop users can restart, power off and power their personal desktops.",
        "displayName": "End-user",
        "id": "e856de81-1e53-486a-8668-7d564866ae39",
        "isEnabled": true,
        "origin": "Application",
        "value": "EndUser"
        },
        {
        "allowedMemberTypes": [
            "Application"
        ],
        "description": "Rest client description",
        "displayName": "Rest client display name",
        "id": "3807160f-e77a-4fcf-959a-df572bcc3767",
        "isEnabled": true,
        "origin": "Application",
        "value": "RestClient"
        }
    ],
  3. [保存] を選択します。

  4. [アプリの役割] で、各役割が利用可能であることを確認します。

  5. [Microsoft Entra ID] > [エンタープライズ アプリケーション] > [すべてのアプリケーション] > [nerdio-nmw-app] (またはカスタムアプリ名) > [プロパティ] に移動します。

  6. [ユーザーに表示する?] オプションが [はい] に設定されていることを確認します。

  7. [Microsoft Entra ID] > [エンタープライズ アプリケーション] > [すべてのアプリケーション] > [nerdio-nmw-app] (またはカスタムアプリ名) > [ユーザーとグループ] > [ユーザーまたはグループの追加] に移動します。

  8. 次の情報を入力してください:

    • ユーザーとグループ:Azureポータルで Nerdio Manager デプロイを完了するユーザーを選択して検索します。

    • 役割を選択する:ドロップダウンリストから [WVD Admin] を選択します。

  9. 必要な情報をすべて入力したら、OKを選択します。

  10. あるいは、以下のPowerShellスクリプトを使用してこれらの変更を完了することもできます。

    $userPrincipalName = "" # REQUIRED: Fill in UPN of subscription owner completing Nerdio Manager deployment
    $appName = "nerdio-nmw-app" # Optionally rename the default application
    function BuildAppRole([string] $displayName, [string] $value, [Guid] $id, [string] $description) {
            $newAppRole = [Microsoft.Open.AzureAD.Model.AppRole]::new()
            $newAppRole.DisplayName = $displayName
            $newAppRole.Description = $description
            $newAppRole.Value = $value
            $newAppRole.Id = $id
            $newAppRole.IsEnabled = $true
            $newAppRole.AllowedMemberTypes = New-Object System.Collections.Generic.List[string]
            $newAppRole.AllowedMemberTypes.Add("User")
            return $newAppRole;
    }
    function GetNewAppRoles() {
            $reviewer = BuildAppRole -displayName "Reviewer" -value "Reviewer" -id "0a1b7425-f55a-44a6-9caa-b9a5cc9448da" -description "View access to all areas of NMW; no ability to save or make changes."
            $helpDesk = BuildAppRole -displayName "Help Desk" -value "HelpDesk" -id "a94e83da-b314-4232-b8c8-94508c5ed533" -description "Complete access to User sessions only."
            $endUser = BuildAppRole -displayName "End-user" -value "EndUser" -id "e856de81-1e53-486a-8668-7d564866ae39" -description "View & manage own sessions (Message, Log off, Disconnect). Personal desktop users can restart, power off and power their personal desktops."
            $desktopAdmin = BuildAppRole -displayName "Desktop Admin" -value "DesktopAdmin" -id "ed0cdef0-4267-4470-bfff-5e0b6944f9e4" -description "Complete access to User sessions, ability to view Host Pools, hosts and restart them, but no ability to add/remove or change any settings."
            $wvdAdmin = BuildAppRole -displayName "WVD Admin" -value "WvdAdmin" -id 'd1c2ade8-98f8-45fd-aa4a-6d06b947c66f' -description "Complete access to all areas of NMW."
            $newAppRoles = New-Object System.Collections.Generic.List[Microsoft.Open.AzureAD.Model.AppRole]
            $newAppRoles.Add($reviewer)
            $newAppRoles.Add($helpDesk)
            $newAppRoles.Add($endUser)
            $newAppRoles.Add($desktopAdmin)
            $newAppRoles.Add($wvdAdmin)
            return $newAppRoles
    }
    $appRoles = GetNewAppRoles
    $application = Get-AzureADApplication -Filter ("DisplayName eq '" + $appName + "'")
    Set-AzureADApplication -ObjectId $application.ObjectId -AppRoles $appRoles
    $userId = (Get-AzureADUser -Filter "UserPrincipalName eq '$userPrincipalName'").ObjectId
    $servicePrincipal = Get-AzureADServicePrincipal -Filter ("AppId eq '" + $application.AppId + "'")
    $wvdAdminRoleId = 'd1c2ade8-98f8-45fd-aa4a-6d06b947c66f'
    New-AzureADUserAppRoleAssignment -ObjectId $userId -PrincipalId $userId -ResourceId $servicePrincipal.ObjectId -Id $WVDAdminRoleID

API のアクセス許可を設定する

以下の手順で API のアクセス許可を設定します。

API のアクセス許可を設定するには:
  1. Azureポータルで [Microsoft Entra ID] > [アプリの登録] > [すべてのアプリケーション] > [nerdio-nmw-app] (またはカスタムアプリ名) > [APIのアクセス許可] に移動します。

  2. Microsoft APIs > Microsoft Graph > Delegated permissions に、以下の権限を追加または確認します。

    • User.Read (既定で含まれます)

    • User.ReadBasic.All

    • User.Read.All

    • Group.Read.All

    • GroupMember.Read.All

    • Application.Read.All

    • Organization.Read.All

    • AppRoleAssignment.ReadWrite.All

    • Application.ReadWrite.All

    • Mail.Send (メール通知を有効にするためのオプション)

    • offline_access

    • openid

    • profile

  3. Microsoft APIs > Microsoft Graph > Application permissions に、以下の権限を追加します。

    • Group.Read.All

    • GroupMember.Read.All

    • Organization.Read.All

    • User.Read.All

  4. Microsoft APIs > Azure Service Management > Delegated permissions に、以下の権限を追加します。

    • user_impersonation

  5. (WVD Classicのみ) APIs my organization uses > Windows Virtual Desktop (アプリケーションID 5a0aa725-4958-4b0c-80a9-34562e23f3b7):

    • Delegated permissions(委任された権限)を追加します: user_impersonation

    • アプリケーションの権限を追加します:TenantCreator

  6. あるいは、以下の PowerShell スクリプトを使用してこれらの変更を完了することもできます。

    $appName = "nerdio-nmw-app" # Optionally rename the default application
    $azureEnv = "AzureCloud" # Change to AzureUSGovernment for government cloud deployments
    $wvdClassicEnabled = $False # Optionally include permissions for WVD Classic
    $readDelagatedPermissions = "User.Read|User.ReadBasic.All|Directory.Read.All"
    # Or if you wanna replace Directory.Read.All then:
    # - set value to: "User.Read|User.ReadBasic.All|User.Read.All|Group.Read.All|Application.Read.All|Organization.Read.All"
    # - add add service setting: AzureAD:DefaultGraphScopes "User.Read|User.ReadBasic.All|User.Read.All|Group.Read.All|Application.Read.All|Organization.Read.All"
    function AddResourcePermission($requiredAccess, $exposedPermissions, [string]$requiredAccesses, [string]$permissionType) {
            foreach ($permission in $requiredAccesses.Trim().Split("|")) {
                    foreach ($exposedPermission in $exposedPermissions) {
                            if ($exposedPermission.Value -eq $permission) {
                                    $resourceAccess = New-Object Microsoft.Open.AzureAD.Model.ResourceAccess
                                    $resourceAccess.Type = $permissionType
                                    $resourceAccess.Id = $exposedPermission.Id
                                    $requiredAccess.ResourceAccess.Add($resourceAccess)
                            }
                    }
            }
    }
    function GetRequiredPermissions([string] $applicationDisplayName, [string] $requiredDelegatedPermissions, [string]$requiredApplicationPermissions, $servicePrincipal) {
            if ($servicePrincipal) {
                    $sp = $servicePrincipal
            }
            else {
                    $sp = Get-AzureADServicePrincipal -Filter "DisplayName eq '$applicationDisplayName'"
            }
            $appid = $sp.AppId
            $requiredAccess = New-Object Microsoft.Open.AzureAD.Model.RequiredResourceAccess
            $requiredAccess.ResourceAppId = $appid
            $requiredAccess.ResourceAccess = New-Object System.Collections.Generic.List[Microsoft.Open.AzureAD.Model.ResourceAccess]
            if ($requiredDelegatedPermissions) {
                    AddResourcePermission $requiredAccess -exposedPermissions $sp.Oauth2Permissions -requiredAccesses $requiredDelegatedPermissions -permissionType "Scope"
            }
            if ($requiredApplicationPermissions) {
                    AddResourcePermission $requiredAccess -exposedPermissions $sp.AppRoles -requiredAccesses $requiredApplicationPermissions -permissionType "Role"
            }
            return $requiredAccess
    }
    $application = Get-AzureADApplication -Filter ("DisplayName eq '" + $appName + "'")
    $graphPermissions = GetRequiredPermissions -applicationDisplayName "Microsoft Graph" -requiredDelegatedPermissions "$readDelagatedPermissions|AppRoleAssignment.ReadWrite.All|Application.ReadWrite.All|offline_access|openid|profile|Mail.Send" -requiredApplicationPermissions "Group.Read.All|GroupMember.Read.All|Organization.Read.All|User.Read.All"
    if ($wvdClassicEnabled) {
            $wvdClassicSP = Get-AzureADServicePrincipal -Filter "AppId eq '5a0aa725-4958-4b0c-80a9-34562e23f3b7'" # Required for WVD classic only
            $wvdClassicPermissions = GetRequiredPermissions -applicationDisplayName "Microsoft Graph" -requiredDelegatedPermissions "user_impersonation" -requiredApplicationPermissions "TenantCreator" -servicePrincipal $wvdClassicSP # Required for WVD classic only
    }
    if ($azureEnv -eq 'AzureCloud') {
            $rmPermissions = GetRequiredPermissions -applicationDisplayName "Windows Azure Service Management API" -requiredDelegatedPermissions "user_impersonation"
    }
    if ($azureEnv -eq 'AzureUSGovernment') {
            $rmPermissions = GetRequiredPermissions -applicationDisplayName "Azure Government Cloud Management API" -requiredDelegatedPermissions "user_impersonation"
    }
    $requiredResourcesAccess = New-Object System.Collections.Generic.List[Microsoft.Open.AzureAD.Model.RequiredResourceAccess]
    $requiredResourcesAccess.Add($graphPermissions)
    $requiredResourcesAccess.Add($rmPermissions)
    if ($wvdClassicEnabled) {
            $requiredResourcesAccess.Add($wvdClassicPermissions) # Required for WVD classic only
    }
    Set-AzureADApplication -ObjectId $application.ObjectId -RequiredResourceAccess $requiredResourcesAccess

サービスプリンシパルにサブスクリプション所有者ユーザーアカウントを所有者としてアサインします。

以下の手順で、サービスプリンシパルにサブスクリプション所有者ユーザーアカウントを所有者としてアサインします。

サブスクリプション所有者をアサインするには:
  1. Azure ポータルで、Microsoft Entra ID > エンタープライズ アプリケーション > すべてのアプリケーション > nerdio-nmw-app (またはカスタムアプリ名) > 所有者 > 追加 に移動します。

  2. Azure Marketplace から Nerdio Manager をデプロイし、インストールを完了しているユーザーアカウントを検索して、選択します。

  3. あるいは、以下の PowerShell スクリプトを使用してこれらの変更を完了することもできます。

    $userPrincipalName = "" # REQUIRED: Fill in UPN of subscription owner completing Nerdio Manager deployment
    $appName = "nerdio-nmw-app" # Optionally rename the default application
    $application = Get-AzureADApplication -Filter "DisplayName eq '$appName'"
    $servicePrincipal = Get-AzureADServicePrincipal -Filter "AppID eq '$($application.AppID)'"
    $userId = (Get-AzureADUser -Filter "UserPrincipalName eq '$userPrincipalName'").ObjectId
    Add-AzureADServicePrincipalOwner -ObjectId $servicePrincipal.ObjectId -RefObjectId $userId

管理者の同意を与える

以下の手順で管理者の同意を付与します。

管理者の同意を付与して
  1. Azure ポータルで Microsoft Entra ID > アプリケーションの登録 > すべてのアプリケーション > nerdio-nmw-app (またはカスタムアプリ名) > API のアクセス許可 に移動します。

  2. 「<tenant_name> に管理者の同意を付与する」を選択します。

  3. プロンプトが表示されたら、「組織の代わりに同意を付与する」を選択します。

  4. Microsoft Entra ID > エンタープライズ アプリケーション > すべてのアプリケーション > nerdio-nmw-app (またはカスタムアプリ名) > 権限 に移動します。

  5. 「<tenant_name> に管理者の同意を付与する」を選択します。

  6. プロンプトが表示されたら、「組織の代わりに同意を付与する」を選択します。

  7. あるいは、以下のPowerShellスクリプトでこれらの変更を完了します。

    注記

    $tenantID に Entra ID テナント ID を入力します。

    $tenantId = "" # REQUIRED: Fill in Entra ID tenant ID
    $appName = "nerdio-nmw-app" # Optionally rename the default application
    $microsoftLogin = 'https://login.microsoftonline.com'
    $application = Get-AzureADApplication -Filter ("DisplayName eq '" + $appName + "'")
    Start-Process -FilePath "$microsoftLogin/$tenantId/adminconsent?client_id=$($application.AppId)"

新しいアプリのクライアントシークレットを生成します (nerdio-nmw-app)

この手順は、グローバル管理者、または特権ロール管理者とクラウドアプリケーション管理者の組み合わせのユーザーの代わりに、サブスクリプションの所有者ユーザーが任意で完了できます。この場合、サブスクリプションの所有者ユーザーは、上記のエンタープライズアプリケーションのサービスプリンシパルに追加された所有者に加えて、アプリの登録の下にあるアプリの所有者として追加される必要があります。

新しいクライアントシークレットを生成するには:
  1. Microsoft Entra ID > アプリの登録 > すべてのアプリ > nerdio-nmw-app(またはカスタムアプリ名) > 証明書とシークレット > 新しいクライアントシークレットに移動します。

  2. 次の情報を入力してください。

    • 説明Nerdio Manager クライアントシークレット(オプション)

    • 有効期限カスタムを選択します。

      • 開始今日の日付を選択します。

      • 終了:これは、貴社のポリシーで許可されている最長の期間に設定する必要があります。

        注記

        Entra IDポータルでは、この値が最大2年に制限される場合があります。

  3. 生成されたシークレットの値を保存してください。

    注記

    これは、Azureポータルで(サブスクリプション所有者ユーザーによって)インストールを完了するために必要です。シークレットのIDではなく、値が使用されていることを確認してください。

  4. あるいは、以下のPowerShellスクリプトを使用してこれらの変更を完了することもできます。

    $appName = "nerdio-nmw-app" # Optionally rename the default application
    $application = Get-AzureADApplication -Filter "DisplayName eq '$appName'"
    $appSecret = New-AzureADApplicationPasswordCredential -ObjectId $application.ObjectId -StartDate ([DateTime]::Now) -EndDate ([DateTime]::Now.AddYears(10))
    Write-Host "Application secret to be saved in Azure KeyVault: $($appSecret.Value)"

完了

AzureポータルでNerdio Managerのデプロイを完了するユーザー(サブスクリプション所有者)と、以下の値を共有してください:

  • アプリケーション ID:

  • アプリのクライアントシークレット(IDではなく、生成されたシークレットの値であることを確認してください。)

  • サービスプリンシパルID(これは、エンタープライズアプリケーションのアプリケーションのオブジェクトIDです。)

この記事は役に立ちましたか?

0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください

コメント (0件のコメント)

サインインしてコメントを残してください。