Skip to main content
Version: Next

Local Identity Authentication - Portal Deployment

DOCUMENT CATEGORY: Runbook SCOPE: Portal-based cluster deployment with local identity PURPOSE: Deploy cluster without Active Directory using Azure Key Vault MASTER REFERENCE: Microsoft Learn - Local Identity with Key Vault

Runbook Azure

Preview

Status: Active Estimated Time: 2-3 hours Last Updated: 2026-03-08


Overview

Local Identity deployment enables Azure Local clusters without Active Directory dependency. Authentication is managed through local Windows accounts on each node, with credentials stored securely in Azure Key Vault.

Use Cases for Local Identity
  • Edge locations without AD connectivity
  • Proof-of-concept deployments
  • Simplified lab environments
  • Scenarios requiring AD independence
  • Remote/disconnected site deployments
Preview Feature — Not for Production

Local Identity with Azure Key Vault is in public preview. Microsoft does not recommend this for production workloads. Windows Admin Center (WAC) deployment is not supported with Local Identity.

Source: MS Learn — Local Identity with Key Vault


Prerequisites

Azure Requirements

RequirementDescriptionValidation
Azure SubscriptionActive subscriptionGet-AzSubscription
Resource GroupDedicated resource groupCreated in Azure Portal
RBAC PermissionsContributor + User Access AdministratorVerify in IAM
Azure ArcAll nodes registered (Stage 13)Verify in Arc > Servers
Key VaultFor credential storageCreated or existing

Node Requirements

RequirementDescriptionValidation
Local AdminIdentical credentials on ALL nodesVerify login works
Windows ServerAzure Stack HCI OS installedwinver
NetworkAll nodes can communicateTest-NetConnection
WinRMRemote management enabledTest-WSMan
Critical Requirement

The local administrator password MUST be identical across all cluster nodes. Different passwords will cause deployment failure.


Variables from variables.yml

PathTypeDescription
identity.accounts.account_local_admin_usernamestringLocal admin username
compute.arm_deployment.cluster_namestringCluster name
azure_platform.regionstringAzure region
compute.arm_deployment.network_intents[*].*objectNetwork configuration
compute.arm_deployment.ip_allocation.*objectIP pool settings
compute.arm_deployment.subnet_maskstringSubnet mask
compute.arm_deployment.default_gatewaystringDefault gateway
compute.arm_deployment.dns_serversarrayDNS servers
storage_accounts.storage_accounts.cluster_witness.*objectWitness storage account
security.keyvault.*objectKey Vault for credentials

Key Differences from AD Deployment

AspectActive DirectoryLocal Identity
AuthenticationDomain accountsLocal Windows accounts
Credential storageAD + Key VaultAzure Key Vault only
Service accountsAD service accountsLocal accounts
Group policiesGPO managedLocal security policy
SSODomain SSOPer-node authentication
AD dependencyRequiredNot required

Pre-Deployment: Create Local Accounts

Microsoft requires a non-built-in local administrator account with identical credentials on every cluster node before portal deployment begins.

Do NOT use the built-in Administrator account

Microsoft explicitly states: do not use the built-in Administrator account for Local Identity deployments. Create a separate, non-default local account. The account name is configured at identity.accounts.account_local_admin_username in variables.yml.

Source: MS Learn — Local Identity with Key Vault

On each cluster node (via RDP or console), use Computer Management (compmgmt.msc) to create the local account:

  1. Open Computer ManagementLocal Users and GroupsUsers
  2. Right-click UsersNew User
  3. Set User name to the value from identity.accounts.account_local_admin_username
  4. Set Password — minimum 14 characters, identical on ALL nodes
  5. Uncheck User must change password at next logon
  6. Check Password never expires and Account never expires
  7. Click Create, then Close
  8. Right-click the new user → PropertiesMember Of tab → Add → type AdministratorsOK

Repeat on every cluster node. Verify by signing in locally with the new account credentials on each node before proceeding.

warning

Do NOT set the same password as the built-in Administrator account, and do NOT use Administrator as the username. Use a unique, non-default account name.

Password requirement

The password must be identical across all cluster nodes and at least 14 characters in length. Any mismatch will cause deployment failure.


Step-by-Step Portal Deployment

Task 1: Navigate to Azure Local

  1. Open Azure Portal
  2. Search for "Azure Local"
  3. Click + Create

Task 2: Basics Configuration

FieldValueNotes
SubscriptionSelect subscriptionMust have Contributor + UAA
Resource groupSelect or createDedicated RG for cluster
Cluster name<CLUSTER_NAME>From variables.yml: compute.arm_deployment.cluster_name
Region<AZURE_REGION>From variables.yml: azure_platform.azure_tenants.aztenant_location

Add Arc-registered machines:

  1. Click Add machines
  2. Select all Arc-registered nodes from Stage 13
  3. Click Add
  4. Wait for Arc extension installation

Step 6 — Configure Authentication:

  • Under the Identity section of the Basics tab, select Local identity with Azure Key Vault as the authentication type
  • Enter credentials in Task 4 below

Task 3: Configuration

  • Select New configuration (manual configuration)
  • Template specs available for future deployments

Task 4: Basics — Identity Credentials

The following credential fields are part of the Basics tab — there is no separate Identity tab in the portal wizard.

FieldValueDescription
Authentication typeLocal identityUses local Windows accounts
Local admin username<LOCAL_ADMIN_USERNAME>Account created in pre-deployment step — from identity.accounts.account_local_admin_username
Local admin password[Enter password]Must match all nodes exactly
Deployment username<LOCAL_ADMIN_USERNAME>Same account used for LCM deployment
Deployment password[Enter password]Stored in Key Vault
Do NOT use the built-in Administrator account

Microsoft explicitly prohibits using the built-in Administrator account for Local Identity deployments. Enter the custom non-built-in account created in the pre-deployment step above. Using Administrator will either fail validation or break the deployment.

Source: MS Learn — Local Identity with Key Vault


Task 5: Networking Configuration

Storage connectivity:

OptionWhen to use
Network switch for storage traffic3+ node clusters (recommended)
No switch for storage1–2 node clusters only (switchless)

Network intents:

Network intents are defined by your planning design

The number of intents, traffic type assignments, and adapter bindings configured here must match the design from your planning and discovery sessions, as captured in variables.yml under compute.arm_deployment.network_intents. Do not assume a specific number of intents or a fixed layout.

Typical layouts:

LayoutIntentTraffic types
2-intentManagement + ComputeManagement, Compute
2-intentStorageStorage
3-intentManagementManagement
3-intentComputeCompute
3-intentStorageStorage

For adapter assignments for each intent, refer to compute.arm_deployment.network_intents[*].intent_adapters in your variables.yml.

IP Allocation:

SettingValueSource
Starting IPFirst available IPvariables.yml: compute.arm_deployment.ip_allocation.starting_ip
Ending IPLast available IPvariables.yml: compute.arm_deployment.ip_allocation.ending_ip
Subnet maske.g., 255.255.255.0variables.yml: compute.arm_deployment.subnet_mask
Default gatewayGateway IPvariables.yml: compute.arm_deployment.default_gateway
DNS serversPrimary, Secondaryvariables.yml: compute.arm_deployment.dns_servers
Zone name (domain)<DNS_ZONE_NAME>variables.yml: compute.arm_deployment.domain_fqdnLocal Identity only
Zone name — Local Identity only

This field only appears for Local Identity deployments. Enter the DNS zone where Host A records for each node have been pre-created (e.g., iic.local). Must match the zone used when configuring node DNS entries in the pre-deployment DNS requirements step.

IP Pool Requirement

Minimum 6 consecutive IPs required for cluster + Arc Resource Bridge. Do NOT include node management IPs in this pool.


Task 6: Management Configuration

Step 1 — Select Identity Provider: Under the Identity section of the Management tab:

  1. From the Identity dropdown, select Local identity with Azure Key Vault
  2. In the Key Vault field, enter or select the Key Vault name (variables.yml: security.keyvault.kv_azl.kv_azl_name)
SettingValueDescription
Custom location name<CLUSTER_NAME>-locationFor Arc VM management
Cloud witness storageCreate or selectFor cluster quorum
No Domain Configuration

With Local Identity, there is no Active Directory configuration in the Management tab. Skip domain, OU path, and deployment account fields — they do not appear for Local Identity deployments.


Task 7: Security Configuration

SettingRecommendationNotes
BitLockerEnabledEncrypt all volumes
Credential GuardEnabledProtect credentials
WDACEnabledApplication control
SMB signingRequiredSecure SMB
SMB encryptionEnabledEncrypt cluster traffic
Drift controlEnabledMonitor security baseline

Select Recommended security settings for highest security.


Task 8: Advanced Configuration

Volume creation strategy:

  • Create workload volumes and required infrastructure volumes ✓ (Recommended)
  • Creates infrastructure + workload volumes automatically

Tags: Apply Azure tags for governance:

TagValue
EnvironmentProduction / Development
DeploymentTypeLocalIdentity
DeploymentDateYYYY-MM-DD

Task 9: Validation

  1. Click Start validation
  2. Wait for validation (~15 minutes)
  3. DO NOT click "Try again" while validation is running
Run the validation monitor

While validation runs, start Monitor-Validation.ps1 to see live step status and EnvironmentValidatorFull log output. It auto-exits when validation completes.

Validation checks:

  • Network connectivity
  • Arc registration
  • Storage availability
  • Endpoint accessibility

Resolve any errors before proceeding.


Task 10: Review + Create

  1. Review all configuration settings
  2. Verify:
  • All Arc-registered nodes selected
  • Local identity authentication selected
  • Management IP pool has 6+ IPs
  • Storage adapters configured
  1. Click Create

Deployment Progress

Deployment Time:

  • Single machine: 1.5-2 hours
  • Two-node cluster: ~2.5 hours

Deployment Stages:

  1. Begin cloud deployment (45-60 min)
  2. Install Arc extensions
  3. Configure network intents
  4. Create storage pools and volumes
  5. Deploy Arc Resource Bridge
  6. Provision custom location

Monitor progress in Resource Groups > Your RG > Deployments

Run the deployment monitor

After clicking Create, start Monitor-Deployment.ps1 to track hierarchical step progress and stream OrchestratorFull logs in real time. Press Ctrl+C to exit at any time.


Post-Deployment Validation

Verify Azure Resources

Resource TypeCountDescription
Machine - Azure Arc1 per nodeArc-connected machines
Azure Local instance1Cluster resource
Arc Resource Bridge1VM management bridge
Key Vault1Credential storage (auto-created by deployment)
Custom location1Arc VM location
Storage accounts2Witness + audit logs
Infrastructure logical network1<clustername>-InfraLNET — created automatically
Azure Local storage path - Azure Arc1 per nodeStorage path resource

Verify Cluster Health

Run directly on a cluster node via RDP or console session.

Script: scripts/deploy/04-cluster-deployment/phase-05-cluster-deployment/local-identity/task-03-verify-deployment-completion/powershell/Test-ClusterHealth.ps1

Test-ClusterHealth.ps1 — run directly on node
Write-Host "`n=== Cluster Health Verification — $env:COMPUTERNAME ===" -ForegroundColor Cyan

Write-Host "`n--- Cluster Status ---" -ForegroundColor Cyan
$cluster = Get-Cluster -ErrorAction Stop
$cluster | Format-List Name, SharedVolumesRoot

Write-Host "`n--- Node Status ---" -ForegroundColor Cyan
Get-ClusterNode | Format-Table Name, State -AutoSize

$downNodes = @(Get-ClusterNode | Where-Object { $_.State -ne 'Up' })
if ($downNodes.Count -gt 0) {
Write-Host "[WARN] $($downNodes.Count) node(s) not in 'Up' state:" -ForegroundColor Yellow
$downNodes | ForEach-Object { Write-Host " - $($_.Name): $($_.State)" -ForegroundColor Yellow }
} else {
Write-Host "[PASS] All nodes are Up" -ForegroundColor Green
}

Write-Host "`n--- Storage Pool ---" -ForegroundColor Cyan
$pools = @(Get-StoragePool | Where-Object { -not $_.IsPrimordial })
if ($pools.Count -eq 0) {
Write-Host "[WARN] No S2D storage pool found" -ForegroundColor Yellow
} else {
$pools | Format-Table FriendlyName, HealthStatus, OperationalStatus, Size -AutoSize
$unhealthy = @($pools | Where-Object { $_.HealthStatus -ne 'Healthy' })
if ($unhealthy.Count -gt 0) {
Write-Host "[WARN] $($unhealthy.Count) pool(s) not Healthy" -ForegroundColor Yellow
} else {
Write-Host "[PASS] Storage pool healthy" -ForegroundColor Green
}
}

Write-Host "`n[DONE] Cluster health check complete on $env:COMPUTERNAME" -ForegroundColor Cyan

Verify Local Identity Configuration

Run these MS-required checks to confirm the cluster deployed in AD-less mode.

Expected values:

  • DomainWORKGROUP — nodes must NOT be domain-joined
  • ADAware2 — cluster is in AD-less (Local Identity) mode

Run directly on a cluster node via RDP or console session.

Script: scripts/deploy/04-cluster-deployment/phase-05-cluster-deployment/local-identity/task-03-verify-deployment-completion/powershell/Test-LocalIdentityConfig.ps1

Test-LocalIdentityConfig.ps1 — run directly on node
# Check 1: Node must NOT be domain-joined — expected result: WORKGROUP
$domain = (Get-WmiObject Win32_ComputerSystem).Domain
Write-Host "Domain membership: $domain" -ForegroundColor $(if ($domain -eq 'WORKGROUP') { 'Green' } else { 'Red' })
if ($domain -ne 'WORKGROUP') {
Write-Warning "Node is domain-joined ('$domain'). Expected WORKGROUP for Local Identity."
}

# Check 2: Cluster must be in AD-less mode — expected result: 2
$adAware = Get-ClusterResource "Cluster Name" | Get-ClusterParameter ADAware
Write-Host "ADAware value: $($adAware.Value)" -ForegroundColor $(if ($adAware.Value -eq 2) { 'Green' } else { 'Red' })
if ($adAware.Value -ne 2) {
Write-Warning "ADAware is $($adAware.Value). Expected 2 for Local Identity (AD-less) mode."
}
Recovery Admin Account

During Local Identity deployment, Azure automatically stores a RecoveryAdmin account in the deployment Key Vault. This is a break-glass account. Retrieve it if needed:

Get-AzKeyVaultSecret -VaultName "<VAULT_NAME>" -Name "RecoveryAdmin" -AsPlainText

VAULT_NAME = variables.yml: security.keyvault.kv_azl.kv_azl_name

RDP is disabled after deployment

RDP is disabled on all cluster nodes by default after deployment completes. To re-enable on a node:

Enable-ASRemoteDesktop

Run this on each node, or via PSRemoting from the management box. This applies to all Azure Local deployments regardless of identity type.

Source: MS Learn — Deploy via Portal


Troubleshooting

IssueCauseResolution
Authentication failsPassword mismatchEnsure IDENTICAL password on all nodes
Deployment failsKey Vault accessVerify Key Vault permissions
Remote access deniedWinRM not configuredRun Enable-PSRemoting -Force
Validation timeoutNetwork issuesCheck Azure endpoint connectivity
Arc extension failsAgent issueReinstall Azure Connected Machine agent

Check Deployment Logs

Get most recent deployment log files — run on cluster node
Get-ChildItem "C:\CloudDeployment\Logs" -Recurse |
Sort-Object LastWriteTime -Descending |
Select-Object -First 10

Next Steps

Deployment StatusNext Action
SuccessfulProceed to Phase 16: Post-Deployment
FailedReview troubleshooting and deployment logs

References:


Version Control

  • Created: 2026-01-31 by Azure Local Cloudnology Team
  • Last Updated: 2026-03-08 by Azure Local Cloudnology Team
  • Version: 1.1.0
  • Tags: azure-local, local-identity, portal, runbook, key-vault
  • Keywords: local identity, key vault, portal deployment, no active directory, azure local cluster
  • Author: Azure Local Cloudnology Team