Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions documentation/change-safety.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Azure Policy Change Safety (Preview)

Azure Policy Change Safety introduces *policy evaluation tokens* that must accompany certain state-changing (write) operations to Azure Resource Manager (ARM). These short‑lived, signed tokens prove that any required external validators (approvals, safety checks, etc.) have run before the change is submitted.

## Status
This feature is behind a configuration flag and requires a corresponding update to the shared `azure-powershell-common` library. Until that dependency is updated, enabling the flag has no effect.

## Phased Rollout
| Phase | Scope | Visible Parameter(s) | Notes |
|-------|-------|----------------------|-------|
| Phase 1 (current) | Token acquisition only | `-AcquirePolicyToken` | `-ChangeReference` is suppressed/hidden. |
| Phase 2 (planned) | Adds change reference association | `-AcquirePolicyToken`, `-ChangeReference` | `-ChangeReference` implies token acquisition. |
Comment on lines +9 to +12
Copy link

Copilot AI Oct 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tables use a double leading pipe (||) which breaks standard Markdown table rendering; remove the extra leading pipe so each row begins with a single | to ensure proper formatting.

Copilot uses AI. Check for mistakes.


If you see references to `-ChangeReference` below, they describe future behavior (Phase 2) and are not yet active.

## Enabling the Feature
```powershell
Update-AzConfig -EnablePolicyToken $true
```

You can also disable it later:
```powershell
Update-AzConfig -EnablePolicyToken $false
```

Environment variable override (session only):
```powershell
$env:AZ_ENABLE_POLICY_TOKEN = "true"
```

## Parameters (write cmdlets; conditional & phased)
| Parameter | Type | Phase | Purpose |
|----------|------|-------|---------|
| `-AcquirePolicyToken` | Switch | 1+ | Force acquisition of a change-safety policy token for the operation. |
| `-ChangeReference <string>` | String | 2 | (Planned) Associates the operation with an external change record (e.g., a ChangeState resource ID); implies token acquisition. Not yet surfaced. |
Comment on lines +32 to +35
Copy link

Copilot AI Oct 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tables use a double leading pipe (||) which breaks standard Markdown table rendering; remove the extra leading pipe so each row begins with a single | to ensure proper formatting.

Copilot uses AI. Check for mistakes.


Read-only (GET/list/show) cmdlets will not expose these parameters.

## Example Usage (Phase 1)
```powershell
# Acquire a token automatically for a write operation
New-AzResourceGroup -Name rg-change -Location eastus -AcquirePolicyToken
```

### Phase 2 (Planned) Example (Not Yet Active)
```powershell
# This will only work once Phase 2 ships
New-AzVm -Name web01 -ResourceGroupName rg-change -ChangeReference \
"/providers/Microsoft.Change/changes/abc123/changeStates/state456" -Image UbuntuLTS -Location eastus
```

## How It Works (Conceptual)
1. You provide `-AcquirePolicyToken` (Phase 1) or later `-ChangeReference` (Phase 2) on a write cmdlet.
2. The client calls `Microsoft.Authorization/acquirePolicyToken` (synchronously) with method, URI and body of the impending request plus optional change reference (Phase 2).
3. Service returns a signed token; it is attached as `x-ms-policy-external-evaluations` header on the actual ARM call.
4. ARM validates token; if missing or invalid and required policies exist, the request is rejected.

## Troubleshooting
| Symptom | Possible Cause | Mitigation |
|--------|----------------|-----------|
| Parameters not visible | Feature flag not enabled or common library not updated | Run `Update-AzConfig -EnablePolicyToken $true` and ensure you have a version that includes the handler. |
Comment on lines +59 to +61
Copy link

Copilot AI Oct 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tables use a double leading pipe (||) which breaks standard Markdown table rendering; remove the extra leading pipe so each row begins with a single | to ensure proper formatting.

Copilot uses AI. Check for mistakes.

| Error: failed to acquire policy token | Network / permission / unsupported scope | Re-run with `-Debug`; confirm subscription context and that the operation is write. |
| ARM denies request citing policy token | Missing `-AcquirePolicyToken` / `-ChangeReference` where a policy now requires it | Re-run with one of the parameters enabled. |

## Logging & Privacy
The token is sensitive and should not appear in logs. The implementation sanitizes the header value in debug traces.

## Roadmap (Subject to Change)
* Support asynchronous (202 Accepted) acquisition mode
* Retry and token reuse for identical retried writes
* Warning decoration for policy-denied responses when the feature is disabled

---
Feedback welcome—file an issue with `[ChangeSafety]` in the title. Please specify "Phase 1" in the issue if `-ChangeReference` is not yet available in your build.
21 changes: 21 additions & 0 deletions src/Accounts/Accounts.Test/UnitTest/EnablePolicyTokenConfigTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// ----------------------------------------------------------------------------------
// Copyright Microsoft Corporation
// Licensed under the Apache License, Version 2.0 (the "License");
// ----------------------------------------------------------------------------------
using Microsoft.Azure.Commands.Common.Authentication.Config.Definitions;
using NUnit.Framework;

namespace Microsoft.Azure.Commands.Profile.Test.UnitTest
{
[TestFixture]
public class EnablePolicyTokenConfigTest
{
[Test]
public void Default_IsFalse_And_KeyMatches()
{
var cfg = new EnablePolicyTokenConfig();
Assert.AreEqual(false, cfg.DefaultValue, "Default should be false for safety opt-in.");
Assert.AreEqual("EnablePolicyToken", cfg.Key, "Config key mismatch.");
}
}
}
98 changes: 97 additions & 1 deletion src/Accounts/Accounts.sln
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32929.385
MinimumVisualStudioVersion = 10.0.40219.1
Expand All @@ -24,6 +24,38 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AssemblyLoading", "Assembly
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AssemblyLoading.Test", "AssemblyLoading.Test\AssemblyLoading.Test.csproj", "{D4540550-9808-4DEB-9D5E-F88E38D58A85}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aks", "..\..\..\azure-powershell-common\src\Aks\Aks.csproj", "{4BD463A6-3D39-4D37-85ED-B6794563B229}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Authentication.Abstractions", "..\..\..\azure-powershell-common\src\Authentication.Abstractions\Authentication.Abstractions.csproj", "{CD310380-C39F-40FD-8EF8-6195377AE33E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Authorization", "..\..\..\azure-powershell-common\src\Authorization\Authorization.csproj", "{B65C0C51-0865-471E-9E0D-D80FCB5139BE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "..\..\..\azure-powershell-common\src\Common\Common.csproj", "{0E13990D-8388-40F2-A1A5-EF021904B639}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Compute", "..\..\..\azure-powershell-common\src\Compute\Compute.csproj", "{20385AB9-6173-40AF-9682-3719EDCBB701}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Graph.Rbac", "..\..\..\azure-powershell-common\src\Graph.Rbac\Graph.Rbac.csproj", "{074F219F-3809-4E8C-851F-F9E500B4C613}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeyVault", "..\..\..\azure-powershell-common\src\KeyVault\KeyVault.csproj", "{A12E0186-357D-40BB-9C57-54CB434124FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Monitor", "..\..\..\azure-powershell-common\src\Monitor\Monitor.csproj", "{CCD12822-329F-407F-8D13-B3A07380E4ED}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Network", "..\..\..\azure-powershell-common\src\Network\Network.csproj", "{BE9F9291-5AA7-4F41-A15A-D40A0643D14D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PolicyInsights", "..\..\..\azure-powershell-common\src\PolicyInsights\PolicyInsights.csproj", "{ED22DABE-350A-4583-8F1D-D339C4A7889F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceManager", "..\..\..\azure-powershell-common\src\ResourceManager\ResourceManager.csproj", "{2A573D7F-EEBA-4D79-A389-92CEA274D6A8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Share", "..\..\..\azure-powershell-common\src\Share\Share.csproj", "{CBCB3967-93B0-405D-B9CC-535636019E59}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Storage", "..\..\..\azure-powershell-common\src\Storage\Storage.csproj", "{63E504E1-F492-4029-B3EC-C6BEF7673B6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Storage.Management", "..\..\..\azure-powershell-common\src\Storage.Management\Storage.Management.csproj", "{98E7A744-F071-4869-87C1-27F89B398FC0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Strategies", "..\..\..\azure-powershell-common\src\Strategies\Strategies.csproj", "{872F59A5-2444-48EA-808B-F7EB15784AC5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Websites", "..\..\..\azure-powershell-common\src\Websites\Websites.csproj", "{B721A545-D346-437A-9020-7179EEFCDB9E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -70,6 +102,70 @@ Global
{D4540550-9808-4DEB-9D5E-F88E38D58A85}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D4540550-9808-4DEB-9D5E-F88E38D58A85}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D4540550-9808-4DEB-9D5E-F88E38D58A85}.Release|Any CPU.Build.0 = Release|Any CPU
{4BD463A6-3D39-4D37-85ED-B6794563B229}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4BD463A6-3D39-4D37-85ED-B6794563B229}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4BD463A6-3D39-4D37-85ED-B6794563B229}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4BD463A6-3D39-4D37-85ED-B6794563B229}.Release|Any CPU.Build.0 = Release|Any CPU
{CD310380-C39F-40FD-8EF8-6195377AE33E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD310380-C39F-40FD-8EF8-6195377AE33E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD310380-C39F-40FD-8EF8-6195377AE33E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD310380-C39F-40FD-8EF8-6195377AE33E}.Release|Any CPU.Build.0 = Release|Any CPU
{B65C0C51-0865-471E-9E0D-D80FCB5139BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B65C0C51-0865-471E-9E0D-D80FCB5139BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B65C0C51-0865-471E-9E0D-D80FCB5139BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B65C0C51-0865-471E-9E0D-D80FCB5139BE}.Release|Any CPU.Build.0 = Release|Any CPU
{0E13990D-8388-40F2-A1A5-EF021904B639}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0E13990D-8388-40F2-A1A5-EF021904B639}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0E13990D-8388-40F2-A1A5-EF021904B639}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0E13990D-8388-40F2-A1A5-EF021904B639}.Release|Any CPU.Build.0 = Release|Any CPU
{20385AB9-6173-40AF-9682-3719EDCBB701}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{20385AB9-6173-40AF-9682-3719EDCBB701}.Debug|Any CPU.Build.0 = Debug|Any CPU
{20385AB9-6173-40AF-9682-3719EDCBB701}.Release|Any CPU.ActiveCfg = Release|Any CPU
{20385AB9-6173-40AF-9682-3719EDCBB701}.Release|Any CPU.Build.0 = Release|Any CPU
{074F219F-3809-4E8C-851F-F9E500B4C613}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{074F219F-3809-4E8C-851F-F9E500B4C613}.Debug|Any CPU.Build.0 = Debug|Any CPU
{074F219F-3809-4E8C-851F-F9E500B4C613}.Release|Any CPU.ActiveCfg = Release|Any CPU
{074F219F-3809-4E8C-851F-F9E500B4C613}.Release|Any CPU.Build.0 = Release|Any CPU
{A12E0186-357D-40BB-9C57-54CB434124FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A12E0186-357D-40BB-9C57-54CB434124FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A12E0186-357D-40BB-9C57-54CB434124FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A12E0186-357D-40BB-9C57-54CB434124FB}.Release|Any CPU.Build.0 = Release|Any CPU
{CCD12822-329F-407F-8D13-B3A07380E4ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CCD12822-329F-407F-8D13-B3A07380E4ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CCD12822-329F-407F-8D13-B3A07380E4ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CCD12822-329F-407F-8D13-B3A07380E4ED}.Release|Any CPU.Build.0 = Release|Any CPU
{BE9F9291-5AA7-4F41-A15A-D40A0643D14D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE9F9291-5AA7-4F41-A15A-D40A0643D14D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BE9F9291-5AA7-4F41-A15A-D40A0643D14D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE9F9291-5AA7-4F41-A15A-D40A0643D14D}.Release|Any CPU.Build.0 = Release|Any CPU
{ED22DABE-350A-4583-8F1D-D339C4A7889F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED22DABE-350A-4583-8F1D-D339C4A7889F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED22DABE-350A-4583-8F1D-D339C4A7889F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED22DABE-350A-4583-8F1D-D339C4A7889F}.Release|Any CPU.Build.0 = Release|Any CPU
{2A573D7F-EEBA-4D79-A389-92CEA274D6A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2A573D7F-EEBA-4D79-A389-92CEA274D6A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2A573D7F-EEBA-4D79-A389-92CEA274D6A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2A573D7F-EEBA-4D79-A389-92CEA274D6A8}.Release|Any CPU.Build.0 = Release|Any CPU
{CBCB3967-93B0-405D-B9CC-535636019E59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CBCB3967-93B0-405D-B9CC-535636019E59}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CBCB3967-93B0-405D-B9CC-535636019E59}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CBCB3967-93B0-405D-B9CC-535636019E59}.Release|Any CPU.Build.0 = Release|Any CPU
{63E504E1-F492-4029-B3EC-C6BEF7673B6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{63E504E1-F492-4029-B3EC-C6BEF7673B6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{63E504E1-F492-4029-B3EC-C6BEF7673B6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{63E504E1-F492-4029-B3EC-C6BEF7673B6D}.Release|Any CPU.Build.0 = Release|Any CPU
{98E7A744-F071-4869-87C1-27F89B398FC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{98E7A744-F071-4869-87C1-27F89B398FC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{98E7A744-F071-4869-87C1-27F89B398FC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{98E7A744-F071-4869-87C1-27F89B398FC0}.Release|Any CPU.Build.0 = Release|Any CPU
{872F59A5-2444-48EA-808B-F7EB15784AC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{872F59A5-2444-48EA-808B-F7EB15784AC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{872F59A5-2444-48EA-808B-F7EB15784AC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{872F59A5-2444-48EA-808B-F7EB15784AC5}.Release|Any CPU.Build.0 = Release|Any CPU
{B721A545-D346-437A-9020-7179EEFCDB9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B721A545-D346-437A-9020-7179EEFCDB9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B721A545-D346-437A-9020-7179EEFCDB9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B721A545-D346-437A-9020-7179EEFCDB9E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
3 changes: 3 additions & 0 deletions src/Accounts/AssemblyLoading/AssemblyLoading.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Common\Common.csproj" />
</ItemGroup>
<PropertyGroup>
<PsModuleName>Accounts</PsModuleName>
</PropertyGroup>
Expand Down
17 changes: 17 additions & 0 deletions src/Accounts/Authentication/Authentication.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,23 @@

<ItemGroup>
<ProjectReference Include="..\AssemblyLoading\AssemblyLoading.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Aks\Aks.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Authentication.Abstractions\Authentication.Abstractions.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Authorization\Authorization.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Common\Common.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Compute\Compute.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Graph.Rbac\Graph.Rbac.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\KeyVault\KeyVault.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Resources\Resources.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Monitor\Monitor.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Network\Network.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\PolicyInsights\PolicyInsights.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\ResourceManager\ResourceManager.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Share\Share.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Storage\Storage.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Storage.Management\Storage.Management.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Strategies\Strategies.csproj" />
<ProjectReference Include="..\..\..\..\azure-powershell-common\src\Websites\Websites.csproj" />
</ItemGroup>

<ItemGroup>
Expand Down
1 change: 1 addition & 0 deletions src/Accounts/Authentication/Config/ConfigInitializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ private void RegisterConfigs(IConfigManager configManager)
"AZURE_CLIENTS_SHOW_SECRETS_WARNING",
new[] { AppliesTo.Az }));
configManager.RegisterConfig(new DisableInstanceDiscoveryConfig());
configManager.RegisterConfig(new EnablePolicyTokenConfig());
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// ----------------------------------------------------------------------------------
//
// Copyright Microsoft Corporation
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------------------------------------------------------------

using Microsoft.Azure.Commands.Common.Authentication.Config;
using Microsoft.Azure.PowerShell.Common.Config;
using Microsoft.Azure.Commands.Shared.Config;
using System.Collections.Generic;

namespace Microsoft.Azure.Commands.Common.Authentication.Config.Definitions
{
/// <summary>
/// Enables acquisition and attachment of Azure Policy Change Safety tokens for write operations
/// when the user opts in and supplies -AcquirePolicyToken or -ChangeReference parameters (implemented
/// in the shared base cmdlet in azure-powershell-common). This repository only contributes the
/// configuration surface; functionality becomes active when the updated common library is present.
/// </summary>
internal class EnablePolicyTokenConfig : TypedConfig<bool>
{
public override object DefaultValue => false;

public override string Key => ConfigKeys.EnablePolicyToken;

public override string HelpMessage => "Enables acquisition and attachment of Azure Policy change-safety tokens on write operations when -AcquirePolicyToken or -ChangeReference are specified.";

public override IReadOnlyCollection<AppliesTo> CanApplyTo => new[] { AppliesTo.Az };
}
}
Loading
Loading