Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
LAPS for Azure Arc enables you to configure and manage Windows Local Administrator Password Solution (LAPS) settings on supported Windows Server and client versions across Azure VMs and Azure Arc-connected machines. LAPS for Azure Arc integrates seamlessly with Azure Governance services (Policy, Machine Configuration) so you can:
- Ensure compliance with LAPS standards in your industry or organization
- Reduce attack surface by automating local administrator password backup and rotation
- Ensure consistent LAPS setup across your fleet for security and productivity
Windows LAPS is a built-in Windows feature that automatically manages and backs up the password of local administrator accounts. It can store passwords in Microsoft Entra ID (formerly Azure AD) or Active Directory and supports password rotation and other post-authentication actions.
To help you demonstrate compliance to auditors (and to help you take action where needed) each compliance check includes evidence via the Reasons field indicating how compliance or non-compliance was determined.
You can customize the LAPS parameters (password length, backup directory, post-authentication actions, etc.) or use the policy default values, which are aligned to Microsoft security best practices including NIST and CIS standards.
Documentation for getting started
- Quickstart: For a click-by-click hands-on experience, see Quickstart: Configure LAPS for Azure Arc with a test machine.
- Overview and reference: For conceptual information, reference, and FAQs, continue with this article.
Selecting audit-only vs. audit-and-configure behavior
When assigning the LAPS policy, you can choose audit-only (aka "Audit") behavior or audit-and-configure (aka "Configure") behavior using a switch within the same policy assignment.
| Policy effect | Notes on what to expect | |
|---|---|---|
| Audit-only behavior | auditIfNotExists | The policy checks machine configuration against the specified LAPS settings and reports compliance status. No changes are made to the machine. Expect to see Non-compliant states reported if machines don't match the policy. |
| Audit-and-configure behavior | deployIfNotExists | The policy checks machine configuration and automatically applies the specified LAPS settings to bring machines into compliance. Expect to see Non-compliant states reported initially, followed by eventual Compliant states as machines are reconfigured. |
For existing machines, admins typically start with audit-only behavior to determine existing state and identify any dependencies or conflicts with current LAPS configurations. After reviewing the compliance results, you would then transition to audit-and-configure behavior (with safe deployment practices such as deployment rings).
For greenfield scenarios or test machines, you might choose to skip the analysis phase and move directly to audit-and-configure behavior, starting fresh with strong LAPS defaults.
Caution
Before configuring any machines, take great care to validate your new configuration. You could accidentally disrupt access to your machines.
Examples of potential issues include:
- The
BackupDirectorysetting doesn't match your organization's identity infrastructure (for example, setting it to Active Directory when machines aren't domain-joined) - The
ADPasswordEncryptionPrincipalis not configured correctly, preventing authorized administrators from decrypting passwords - Post-authentication actions are too aggressive for your environment, causing unexpected user sign-outs or reboots
To get hands-on experience with LAPS for Azure Arc, see the Quickstart: Configure LAPS for Azure Arc with a test machine.
LAPS configuration scope: settings, defaults, and customization
The following table lists the items that can be audited or configured with LAPS for Azure Arc. Each of these is known as a setting.
Each setting has a default configuration value, aligned to Microsoft security best practices including NIST and CIS standards.
Settings can be given custom values via policy assignment parameters to audit against or configure. For example, if the standard in your organization is to use a 20-character password (rather than 15), you would set the corresponding parameter in the policy assignment.
When customizing values, take care to provide values which are compatible with Windows LAPS. For reference, see the Windows LAPS CSP documentation.
| Setting name | Default value | Description |
|---|---|---|
| BackupDirectory | 1 (Microsoft Entra ID) | Determines where LAPS stores the password backup. Values: 0 = disabled, 1 = Microsoft Entra ID, 2 = Active Directory |
| AdministratorAccountName | null | Configures which local account LAPS manages. Defaults to the built-in administrator account when null. Ignored when automatic account management is enabled. |
| PasswordAgeDays | 30 | Specifies maximum password age in days. Minimum: 1 day for AD, 7 days for Entra ID. Maximum: 365 days. |
| PasswordLength | 15 | Sets password length. Range: 8–64 characters. Default aligns with NIST minimum password length recommendations. |
| PassphraseLength | 6 | Sets number of words in a passphrase. Range: 3–10 words. |
| PasswordComplexity | 4 | Controls complexity options. Values: 1 = uppercase only, 2 = uppercase + lowercase, 3 = uppercase + lowercase + numbers, 4 = uppercase + lowercase + numbers + special characters, 5–8 = passphrase options. |
| PasswordExpirationProtectionEnabled | True | Enforces the maximum password age, preventing password expiration tampering. |
| ADPasswordEncryptionEnabled | True | Sets whether passwords are encrypted when stored in Active Directory. |
| ADPasswordEncryptionPrincipal | null | Specifies who can decrypt passwords in Active Directory. When null, only Domain Admins can decrypt passwords by default. |
| ADEncryptedPasswordHistorySize | 0 | Sets how many previous encrypted passwords are retained in Active Directory. 0 = no history retained. |
| PostAuthenticationResetDelay | 8 | Defines how long (in hours) after a password is used before post-authentication actions occur. Aligned with CIS recommendations. |
| PostAuthenticationActions | 3 | Defines what actions to take after a password is used. Values: 1 = reset password, 3 = reset password + sign out users + terminate processes, 5 = reset password + reboot. |
| AutomaticAccountManagementEnabled | False | Enables automatic management of the local administrator account. |
| AutomaticAccountManagementTarget | 1 | Targets account type for automatic management. Values: 0 = built-in administrator, 1 = new managed account. |
| AutomaticAccountManagementNameOrPrefix | WLapsAdmin | Name or prefix for the automatically managed account. |
| AutomaticAccountManagementEnableAccount | False | Enables the automatically managed account. |
| AutomaticAccountManagementRandomizeName | False | Randomizes the automatically managed account name. |
Note
Additional policy assignment parameters: When assigning the policy, two additional parameters are available: Include Arc connected servers (default: FALSE — selecting this option incurs a monthly charge per Arc connected machine) and Effect (enable/disable the policy execution and choose between audit-only or audit-and-configure behavior).
How does this fit together?
LAPS for Azure Arc uses Azure Policy and Machine Configuration to audit and configure LAPS settings on your machines. Your core action is to create a policy assignment that links a policy definition to a scope (such as a subscription or resource group). The Machine Configuration service and agent handle the OS-level auditing and configuration. For details on these concepts, see Understand the Machine Configuration feature of Azure Automanage.
Supported operating systems
LAPS for Azure Arc is supported on the following Windows versions:
Windows Client
- Windows 11 23H2 and later.
- Other versions of Windows client that have received the April 11, 2023 Update or later, including:
Windows Server
- Windows Server 2025 and later.
- Windows Server Annual Channel for Containers, 23H2 and later
- Other versions of Windows Server that have received the April 11, 2023 Update or later, including:
Verifying LAPS configuration locally
After applying the LAPS policy, you can verify the configuration is working locally on your machines.
Note
Before checking your device(s) status, ensure that you are domain-joined or you may run into errors.
Connect to your VM via RDP or Azure Bastion
Open an elevated PowerShell window and run:
Invoke-LapsPolicyProcessing Reset-LapsPassword -VerboseOpen Event Viewer and navigate to Applications and Services Logs > Microsoft-Windows-LAPS
Verify that events indicate successful LAPS configuration and password management
Note
For Active Directory-backed LAPS configurations, you can use Get-LapsADPassword -Identity $env:COMPUTERNAME to retrieve password information. Only authorized principals (as defined by ADPasswordEncryptionPrincipal) can decrypt and view the password.
How can I query the results programmatically?
Using Azure Resource Graph (ARG) queries you can integrate assignment and status data into your own workflows. These examples use Search-AzGraph in PowerShell to execute the ARG query, but PowerShell is not required. You can use ARG from many entry points including the Azure Portal, Azure CLI, REST calls, etc.
At the highest altitude of summarization, you can get machine counts per compliance status bucket:
$machineCountsQuery = @' // LAPS machine counts by compliance status guestconfigurationresources | where name contains "LAPS" | extend complianceStatus = tostring(properties.complianceStatus) | summarize machineCount = count() by complianceStatus '@ Search-AzGraph -Query $machineCountsQueryTo drill in such that you see overall compliance status by machine:
$machinePerRowQuery = @' // LAPS machine level compliance guestconfigurationresources | where name contains "LAPS" | project machine = split(properties.targetResourceId,'/')[-1], complianceStatus = properties.complianceStatus, lastComplianceStatusChecked = properties.lastComplianceStatusChecked '@ Search-AzGraph -Query $machinePerRowQueryTo drill down to setting-by-setting details:
$settingPerRowQuery = @' // LAPS setting level detail GuestConfigurationResources | where name contains "LAPS" | project report = properties.latestAssignmentReport, machine = split(properties.targetResourceId,'/')[-1], lastComplianceStatusChecked=properties.lastComplianceStatusChecked | mv-expand report.resources | project machine, setting = report_resources.resourceId, settingComplianceStatus = report_resources.complianceStatus, settingComplianceReason = report_resources.reasons[0].phrase, lastComplianceStatusChecked '@ Search-AzGraph $settingPerRowQuery
Related resources
- Quickstart: Configure LAPS for Azure Arc with a test machine
- For support with problems, contact Microsoft Support
- To provide feedback or discuss feature requests, contact: linux_sec_config_mgmt@service.microsoft.com