高度なインストール: Entra ID アプリを作成
従来の Nerdio Manager 展開は、インストールガイドに記載された手順と指示に従ってください。詳細については、Nerdio Managerインストールガイドをご覧ください。ここに記載の高度なインストール方法は、必要な場合にのみ使用してください。
警告: これは、特別な状況でのみお勧めの、Nerdio Manager の高度なカスタム インストールです。Nerdio サポートのアドバイスと指導のもとでご利用ください。ご質問がある場合は、nme.support@getnerdio.comまでご連絡ください。
注意: Nerdio Manager の更新には、Cloud Shell または PowerShell スクリプトの実行が必要です。詳細については、Nerdio Managerアプリを更新してください。をご覧ください。
Entra ID で Nerdio Manager アプリを手動で作成する高度なインストール手順:
Azure Marketplace 展開(サブスクリプションの所有者によって完了)。
Entra ID アプリケーションの登録と設定(グローバル管理者または特権ロール管理者と Cloud アプリケーション管理者によって完了)。
Azure リソースの構成(サブスクリプションオーナーによって完了)。
アプリとサービスプリンシパルを作成する
以下の手順でアプリとサービスプリンシパルを作成します。
Azure ポータルで、Microsoft Entra ID > アプリ登録 > 新規登録に移動します。
-
以下の情報を入力します。
名前: nerdio-nmw-app(デフォルトのアプリの名前を任意で変更)
アカウントタイプ: '任意の組織ディレクトリ内のアカウント(任意の Entra ID ディレクトリ - マルチテナント)'
リダイレクト URL: Web, https://<app_service_name>.azurewebsites.net/
アプリ ID を保存してください。(Nerdio Managerの展開用に提供されます。)
Microsoft Entra ID > アプリ登録 > すべてのアプリケーション > nerdio-nmw-app(またはカスタムアプリ名) > 認証に移動します。
-
以下の情報を入力します。
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トークンを有効にします。
Microsoft Entra ID > エンタープライズアプリケーション > すべてのアプリケーション > nerdio-nmw-app(またはカスタムアプリ名)に移動します。
オブジェクト ID を保存してください。(Nerdio Managerの展開用に提供されます。)
また、以下のPowerShellスクリプトでこれらの変更を完了できます:
$webAppName = "" # 必須: マーケットプレイスデプロイメントでプロビジョニングされたアプリサービスの名前
$appName = "nerdio-nmw-app" # 既定のアプリの名前を任意で変更します
$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 "アプリサービスに保存されるアプリID $($Application.AppID)"
Write-Host "Nerdio Manager 展開に提供されるサービスプリンシパル ID: $($servicePrincipal.ObjectId)"
アプリケーションのロールを構成し、AVD 管理者を割り当てます。
以下の手順でアプリのロールを構成し、AVD 管理者を割り当てます。
注意: アプリのロールには、各ロールに割り当てる特定の ID が必要です。役割名、説明、およびIDは、アプリのマニフェストを変更することでアプリ登録に追加できます。
Azure ポータルで、Microsoft Entra ID > アプリ登録 > すべてのアプリケーション > nerdio-nmw-app(またはカスタムアプリ名) > マニフェストに移動します。
-
"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"
],
"説明": "ユーザーセッションに完全にアクセスでき、ホストプールやホストを表示し、再起動することができますが、設定を追加/削除または変更することはできません。"
"displayName": "Desktop Admin",
"id": "ed0cdef0-4267-4470-bfff-5e0b6944f9e4",
"isEnabled": true,
"origin": "Application",
"value": "DesktopAdmin"
},
{
"allowedMemberTypes": [
"User"
],
"説明": "ユーザーセッションのみに完全にアクセスできます。"
"displayName": "Help Desk",
"id": "a94e83da-b314-4232-b8c8-94508c5ed533",
"isEnabled": true,
"origin": "Application",
"value": "HelpDesk"
},
{
"allowedMemberTypes": [
"User"
],
NMWのすべてのエリアを表示できますが、保存や変更はできません。
"displayName": "Reviewer",
"id": "0a1b7425-f55a-44a6-9caa-b9a5cc9448da",
"isEnabled": true,
"origin": "Application",
"value": "Reviewer"
},
{
"allowedMemberTypes": [
"User"
],
"説明": "自分のセッションを表示および管理できます(メッセージ、ログオフ、切断)。"個人デスクトップユーザーは、自分の個人デスクトップを再起動、電源オフ、電源オン(電源を入れる)することができます。
"displayName": "End-user",
"id": "e856de81-1e53-486a-8668-7d564866ae39",
"isEnabled": true,
"origin": "Application",
"value": "EndUser"
},
{
"allowedMemberTypes": [
アプリケーション
],
"description": "Rest client description",
"displayName": "Rest client display name",
"id": "3807160f-e77a-4fcf-959a-df572bcc3767",
"isEnabled": true,
"origin": "Application",
"value": "RestClient"
}
],
[保存] を選択します。
アプリロールで、各ロールが利用可能であることを確認してください。
Microsoft Entra ID > エンタープライズアプリケーション > すべてのアプリケーション > nerdio-nmw-app(またはカスタムアプリ名) > プロパティに移動します。
オプション 「ユーザーに表示される」 が「はい」に設定されていることを確認してください。「はい」 に設定されていることを確認してください。
Microsoft Entra ID > エンタープライズアプリケーション > すべてのアプリケーション > nerdio-nmw-app(またはカスタムアプリ名) > ユーザーとグループ > ユーザー/グループを追加に移動します。
-
以下の情報を入力します。
ユーザーとグループ: Azure ポータルで Nerdio Manager展開を完了するユーザーを選択して検索します。
ロールを選択: ドロップダウンリストから WVD 管理者 を選択します。
必要な情報をすべて入力したら、[次へ] を選択します。
また、以下のPowerShellスクリプトでこれらの変更を完了できます:
$userPrincipalName = "" # 必須: Nerdio Manager の展開を完了するサブスクリプション所有者の UPN を入力してください
$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 "レビュアー" -value "レビュアー" -id "0a1b7425-f55a-44a6-9caa-b9a5cc9448da" -description "NMWのすべての領域を表示できますが、保存や変更はできません。"
$helpDesk = BuildAppRole -displayName "ヘルプデスク" -value "ヘルプデスク" -id "a94e83da-b314-4232-b8c8-94508c5ed533" -description "ユーザーセッションのみに完全にアクセスできます。"
$endUser = BuildAppRole -displayName "エンドユーザー" -value "エンドユーザー" -id "e856de81-1e53-486a-8668-7d564866ae39" -description "自分のセッションを表示および管理できます(メッセージ、ログオフ、切断)。"個人デスクトップユーザーは、自分のデスクトップを再起動、電源オフ、電源オンできます。
$desktopAdmin = BuildAppRole -displayName "デスクトップ管理者" -value "デスクトップ管理者" -id "ed0cdef0-4267-4470-bfff-5e0b6944f9e4" -description "ユーザーセッションに完全にアクセスでき、ホストプールやホストを表示し、再起動できますが、設定の追加、削除、変更はできません。"
$wvdAdmin = BuildAppRole -displayName "WVD Admin" -value "WvdAdmin" -id 'd1c2ade8-98f8-45fd-aa4a-6d06b947c66f' -description "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の権限を設定します。
Azure ポータルで、Microsoft Entra ID > アプリケーション登録 > すべてのアプリケーション > nerdio-nmw-app(またはカスタムアプリ名) > API 権限に移動します。
-
Microsoft APIs > Microsoft Graph > 委任された権限のために以下の権限を追加または確認します:
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
-
Microsoft APIs > Microsoft Graph > アプリケーション権限のために以下の権限を追加します:
Group.Read.All
GroupMember.Read.All
Organization.Read.All
User.Read.All
-
Microsoft APIs > Azure Service Management > 委任された権限のために以下の権限を追加します:
user_impersonation
-
(WVD Classic専用)私の組織が使用するAPI > Windows Virtual Desktop(アプリケーションID 5a0aa725-4958-4b0c-80a9-34562e23f3b7):
委任された権限を追加します:user_impersonation
アプリケーション権限を追加します:TenantCreator
また、以下のPowerShellスクリプトでこれらの変更を完了できます:
$appName = "nerdio-nmw-app" # デフォルトのアプリケーションの名前をオプションで変更します
$azureEnv = "AzureCloud" # 政府クラウドの展開にはAzureUSGovernmentに変更します
$wvdClassicEnabled = $False # WVD Classicの権限をオプションで含める
$readDelagatedPermissions = "User.Read|User.ReadBasic.All|Directory.Read.All"
# あるいは、Directory.Read.Allを置き換えたい場合は:
# - 値を次のように設定します: "User.Read|User.ReadBasic.All|User.Read.All|Group.Read.All|Application.Read.All|Organization.Read.All"
# - サービス設定を追加します: 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'" # WVD Classic専用に必要
$wvdClassicPermissions = GetRequiredPermissions -applicationDisplayName "Microsoft Graph" -requiredDelegatedPermissions "user_impersonation" -requiredApplicationPermissions "TenantCreator" -servicePrincipal $wvdClassicSP # WVD Classic専用に必要
}
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
サブスクリプションオーナーのユーザーアカウントを、サービスプリンシパルのオーナーとしてアサインする
以下の手順では、サブスクリプションオーナーのユーザーアカウントを、サービスプリンシパルのオーナーとしてアサインします。
Azure ポータルで、Microsoft Entra ID > エンタープライズアプリケーション > すべてのアプリケーション > nerdio-nmw-app(またはカスタムアプリ名) > 所有者 > 追加に移動します。
Azure Marketplaceから展開し、インストールを完了しているユーザーアカウントを検索し、Nerdio Manager選択します。
また、以下のPowerShellスクリプトでこれらの変更を完了します:
$userPrincipalName = "" # 必須:Nerdio Manager展開を完了するサブスクリプション所有者のUPNを入力してください
$appName = "nerdio-nmw-app" # デフォルトアプリケーションの名前を任意で変更します
$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
管理者の同意を付与して
以下の手順では、管理者の同意を付与します。
Azure ポータルで、Microsoft Entra ID > アプリ登録 > すべてのアプリケーション > nerdio-nmw-app(またはカスタムアプリ名) > APIの権限に移動します。
「<tenant_name>の管理者の同意を付与」を選択します。
プロンプトが表示された場合は「私の組織を代表して同意を付与」を選択します。
Microsoft Entra ID > エンタープライズアプリケーション > すべてのアプリケーション > nerdio-nmw-app(またはカスタムアプリ名) > 権限に移動します。
「<tenant_name>の管理者の同意を付与」を選択します。
プロンプトが表示された場合は「私の組織を代表して同意を付与」を選択します。
-
また、以下のPowerShellスクリプトでこれらの変更を完了します:
注意: $tenantIDのEntra IDテナントIDを入力してください。
$tenantId = "" # 必須:Entra IDテナントIDを入力してください
$appName = "nerdio-nmw-app" # デフォルトアプリケーションの名前をオプションで変更します
$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)
この手順は、グローバル管理者または、クラウドアプリケーション管理者と特権ロール管理者の役割を持つユーザーの代わりに、サブスクリプション所有者が任意で完了できます。この場合、サブスクリプション所有者ユーザーは、上記のエンタープライズアプリケーションのサービスプリンシパルの所有者に追加されるだけでなく、アプリ登録の下のアプリケーションの所有者としても追加される必要があります。
Microsoft Entra ID > アプリ登録 > すべてのアプリケーション > nerdio-nmw-app(またはカスタムアプリ名) > 証明書とシークレット > 新しいクライアントシークレットに移動します。
-
以下の情報を入力します。
説明: Nerdio Manager シークレット(オプション)
-
有効期限: カスタムを選択してください。
開始: 今日の日付を選択してください。
-
終了: これは、貴社のポリシーで許可されている最長の期間に設定する必要があります。
注意: Entra ID ポータルは、この値を最大 2 年に制限する場合があります。
-
生成されたシークレットの値を保存してください。
注意: これは、Azure ポータルでのインストールを完了するために必要です(サブスクリプション所有者ユーザーによる)。シークレットの ID ではなく、値が使用されていることを確認してください。
また、以下の 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 "Azure KeyVault に保存されるアプリケーションシークレット: $($appSecret.Value)"
完了
Azure ポータルで Nerdio Manager の展開を完了したユーザーと、以下の値を共有してください(サブスクリプション所有者):
アプリ ID
アプリのクライアントシークレット(生成されたシークレットの値で、ID ではありません)
サービスプリンシパル ID(これは、エンタープライズアプリケーションからのアプリケーションのオブジェクト ID です。)
コメント (0件のコメント)