Skip to content

Commit f909d8a

Browse files
authored
Merge pull request #2574 from paulth1/azure-vms-linux-extensions
[AQ] edit pass: Azure vms linux extensions
2 parents 493d690 + 993c7a7 commit f909d8a

File tree

4 files changed

+154
-152
lines changed

4 files changed

+154
-152
lines changed

articles/virtual-machines/extensions/agent-linux-fips.md

Lines changed: 67 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: FIPS 140-3 Support for Azure Linux VM Extensions and Guest Agent
3-
description: Learn how to opt in to FIPS 140-3 support for Azure Linux VM Extensions and Guest Agent.
3+
description: Learn how to opt in to FIPS 140-3 support for Azure Linux VM extensions and the guest agent.
44
ms.topic: how-to
55
ms.service: azure-virtual-machines
66
ms.subservice: extensions
@@ -10,21 +10,20 @@ ms.custom: linux-related-content; references_regions
1010
ms.collection: linux
1111
ms.date: 09/25/2025
1212
---
13-
# FIPS 140-3 support for Azure Linux VM Extensions and Guest Agent
13+
# FIPS 140-3 support for Azure Linux VM extensions and guest agent
1414

1515
> [!NOTE]
16-
> This feature is currently in **Public Preview**, production workloads are supported.
16+
> This feature is currently in public preview. Production workloads are supported.
1717
18-
Linux Virtual Machine (VM) Extensions currently comply with FIPS 140-2 but updates to the platform were required to add support for FIPS 140-3. These changes are currently being enabled across the Commercial Cloud and Azure Government Clouds. Linux VM Extensions that use protected settings are also being updated to be able to use a FIPS 140-3 compliant encryption algorithm. This document helps enable support for FIPS 140-3 on Linux VMs where compliance with FIPS 140-3 is enforced. This change isn't needed on Windows images due to the way FIPS compliance is implemented.
19-
20-
- [What is the Federal Information Processing Standards (FIPS)](https://www.nist.gov/standardsgov/compliance-faqs-federal-information-processing-standards-fips)
18+
Linux virtual machine (VM) extensions currently comply with FIPS 140-2, but updates to the platform were required to add support for FIPS 140-3. These changes are currently being enabled across the commercial cloud and Azure Government clouds. Linux VM extensions that use protected settings are also being updated to be able to use a FIPS 140-3-compliant encryption algorithm. This article helps enable support for FIPS 140-3 on Linux VMs where compliance with FIPS 140-3 is enforced. This change isn't needed on Windows images because of the way that FIPS compliance is implemented.
2119

20+
For more information, see [What are the Federal Information Processing Standards (FIPS)?](https://www.nist.gov/standardsgov/compliance-faqs-federal-information-processing-standards-fips).
2221

2322
[!INCLUDE [VM assist troubleshooting tools](../includes/vmassist-include.md)]
2423

25-
## Confirmed Supported Extensions
24+
## Confirmed supported extensions
2625

27-
| Extension | Supported Clouds<br> _Commercial,<br> Government,<br> Air-Gap_ |
26+
| Extension | Supported clouds<br> Commercial,<br> Government,<br> Air-Gap |
2827
|:----------|:---------------------------------------------------:|
2928
| MICROSOFT.AKS.COMPUTE.AKS.LINUX.AKSNODE | Commercial,<br>Government |
3029
| MICROSOFT.AKS.COMPUTE.AKS.LINUX.BILLING | Commercial,<br>Government |
@@ -46,39 +45,40 @@ Linux Virtual Machine (VM) Extensions currently comply with FIPS 140-2 but updat
4645

4746
## Prerequisites
4847

49-
There are four requirements to being able to use a FIPS 140-3 compliant VM in Azure:
48+
You must meet the following four requirements to use a FIPS 140-3-compliant VM in Azure:
5049

51-
- The Virtual Machine must be in a region where FIPS 140-3 platform changes are rolled out.
52-
- Your Azure Subscription must be opted-in to FIPS 140-3 enablement.
53-
- Each VM must be enrolled in FIPS 140-3 enablement in the Azure Resource Manager.
54-
- Inside of the guest OS, the operating system must be configured for FIPS 140 mode, and running a version of the Azure guest agent (waagent) which is also FIPS 140-3 compliant.
50+
- The VM must be in a region where FIPS 140-3 platform changes are rolled out.
51+
- Your Azure subscription must be opted in to FIPS 140-3 enablement.
52+
- Each VM must be enrolled in FIPS 140-3 enablement in Azure Resource Manager.
53+
- Inside the guest operating system (OS), the OS must be configured for FIPS 140 mode. The OS must run a version of the Azure guest agent (waagent), which is also compliant with FIPS 140-3.
5554

56-
Once these steps are followed, validation should be done to ensure functionality of VM extensions.
55+
Afterward, validate to ensure the functionality of the VM extensions.
5756

5857
---
5958

60-
## Implementing prerequisites
59+
## Implement prerequisites
60+
61+
### 1. Enabled regions
6162

62-
### 1. Enabled Regions
6363
To view the latest supported regions, use the Linux VM Guest [v2.14.0.1](https://github.com/Azure/WALinuxAgent/releases/tag/v2.14.0.1) release page.
6464

6565
| Cloud | Region |
6666
|:-----|:-----|
6767
| Commercial | Australia Central, Australia Central 2, Australia East, Australia Southeast, Brazil South, Brazil Southeast, Canada Central, Canada East, Central India, Denmark East, East Asia, France Central, France South, Germany North, Germany West Central, India South, Japan East, Japan West, Jio India Central, Jio India West, Korea Central, Korea South, Norway East, Norway West, Qatar Central, South Africa North, South Africa West, Southeast US, Sweden Central, Sweden South, Switzerland North, Switzerland West, Taiwan North, UAE Central, UAE North, UK West, West Central US, West India, West US 2, West US 3 |
68-
| USGov | All Regions |
69-
| Air-Gap | All Regions |
68+
| USGov | All regions |
69+
| Air-Gap | All regions |
7070

71-
### 2. Subscription Enablement / Opt-In
71+
### 2. Subscription enablement/opt-in
7272

73-
Because not all extensions are onboarded onto using FIPS 140-3 encryption yet, we’re requiring the subscription to opt into this feature.
74-
- The Subscription needs to enable the feature: “_Microsoft.Compute/OptInToFips1403Compliance_
73+
Because not all extensions are onboarded by using FIPS 140-3 encryption yet, we require the subscription to opt in to the feature `_Microsoft.Compute/OptInToFips1403Compliance_`.
74+
75+
#### Azure CLI
7576

76-
**Azure CLI**
7777
```
7878
az feature register --namespace Microsoft.Compute --name OptInToFips1403Compliance
7979
```
8080

81-
Verify with the following command
81+
Verify with the following command:
8282
```
8383
az feature list | jq '.[] | select(.name=="Microsoft.Compute/OptInToFips1403Compliance")'
8484
```
@@ -96,16 +96,16 @@ az feature list | jq '.[] | select(.name=="Microsoft.Compute/OptInToFips1403Comp
9696

9797
---
9898

99-
### 3. Per-VM Opt-In
99+
### 3. Per-VM opt-in
100100

101-
There are different methods available for opting-in each VM. The changes can be made at deployment for a new VM, or an existing VM can be altered to add the FIPS 140-3 enablement on the Azure platform.
101+
There are different methods available for opting in to each VM. You can make the changes at deployment for a new VM. You can also alter an existing VM to add the FIPS 140-3 enablement on the Azure platform.
102102

103103
> [!WARNING]
104-
> We do not recommend using the below Opt-In methods on RedHat 9.5 and 9.6 using version 2.7.0.6 of WALinuxAgent on production systems. This is due to an issue that will surface after rebooting, after the FIPS enablement and subsequent reboot. In these VMs the `waagent.service` will enter an internal loop and never come to a "Ready" state, and because of this error, no extensions are able to function. For testing you can try the below "RedHat 9 Workaround".
104+
> We don't recommend using the following opt-in methods on Red Hat Enterprise Linux (RHEL) 9.5 and 9.6 by using version 2.7.0.6 of `WALinuxAgent` on production systems. An issue can surface after rebooting, after the FIPS enablement and subsequent reboot. On these VMs, the `waagent.service` enters an internal loop and never comes to a `Ready` state. Because of this error, no extensions can function. For testing, you can try the RHEL 9 workaround.
105105
106-
#### Deploying a new VM
106+
#### Deploy a new VM
107107

108-
In order to deploy a new VM with FIPS 140-3 enablement turned on immediately, use an ARM Template or CLI and add the `enableFips1403Encryption` property to the `additionalCapabilities` section of the `virtualMachines` object definition
108+
To deploy a new VM with FIPS 140-3 enablement turned on immediately, use an Azure Resource Manager template (ARM template) or the Azure CLI. Add the `enableFips1403Encryption` property to the `additionalCapabilities` section of the `virtualMachines` object definition.
109109

110110
```json
111111
{
@@ -121,14 +121,14 @@ In order to deploy a new VM with FIPS 140-3 enablement turned on immediately, us
121121
}
122122
```
123123

124-
#### Modifying an existing VM
124+
#### Modify an existing VM
125125

126126
##### az cli commands
127127

128128
> [!NOTE]
129-
> For the Government cloud, use "https://management.usgovcloudapi.net" instead of "https://management.azure.com"
129+
> For the Government cloud, use `https://management.usgovcloudapi.net` instead of `https://management.azure.com`.
130130
131-
While updates to SDK/CLI are still in progress, you can still use AZ CLI to add the property.
131+
While updates to the SDK/CLI are still in progress, you can continue to use `az cli` to add the property.
132132

133133
```
134134
az rest \
@@ -137,23 +137,23 @@ az rest \
137137
--body '{"location": "<LOCATION>", "properties": {"additionalCapabilities": {"enableFips1403Encryption": true}}}'
138138
```
139139

140-
Running the `put` command outputs the resulting json for the modified VM. For later verification, this `get` command can be run against the VM object, which outputs the full JSON again
140+
Running the `put` command outputs the resulting JSON for the modified VM. For later verification, you can run this `get` command against the VM object, which outputs the full JSON again.
141141

142142
```
143143
az rest \
144144
--method get \
145145
--url 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/virtualMachines/<VM NAME>/?api-version=2024-11-01'
146146
```
147147

148-
The command output should include
148+
The command output should include:
149149

150150
```json
151151
{
152152
"enableFips1403Encryption": true
153153
}
154154
```
155155

156-
In order to more easily find the property in the output, you can add `jq` to parse out the specific section needed. This block is the new command
156+
To more easily find the property in the output, you can add `jq` to parse out the specific section needed. This block is the new command:
157157

158158
```
159159
az rest \
@@ -162,7 +162,7 @@ az rest \
162162
| jq .properties.additionalCapabilities
163163
```
164164

165-
For comparison, one possible outcome when trying to enable FIPS 140-3 on a VM when the VM isn't in an enabled region, the `put` command can output the following, indicating the action isn't possible in the region
165+
For comparison, one possible outcome when you try to enable FIPS 140-3 on a VM when the VM isn't in an enabled region, the `put` command can output the following code, which indicates that the action isn't possible in the region.
166166

167167
```json
168168
({
@@ -183,34 +183,30 @@ Leaving the marker here, but deleting the content pending research -->
183183

184184
### 4. In-guest considerations
185185

186-
There are important changes that need to be done to the Linux operating system environment to enable and support FIPS 140-3 compliance.
187-
188-
#### Configuring the operating system for FIPS enablement
186+
Important changes must be made to the Linux OS environment to enable and support FIPS 140-3 compliance.
189187

190-
The following distributions support FIPS 140-3 and provide instructions for enabling
188+
#### Configure the OS for FIPS enablement
191189

192-
- Ubuntu 22.04 LTS and newer
193-
- Use an Ubuntu pro client or pro image: https://documentation.ubuntu.com/pro-client/en/docs/howtoguides/enable_fips/
194-
- Red Hat Enterprise Linux 9
195-
- Steps to enable FIPS on Redhat: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/security_hardening/switching-rhel-to-fips-mode_security-hardening
190+
The following distributions support FIPS 140-3 and provide instructions for enabling:
196191

192+
- Ubuntu 22.04 LTS and newer: Use an [Ubuntu pro client or pro image](https://documentation.ubuntu.com/pro-client/en/docs/howtoguides/enable_fips/).
193+
- RHEL 9: Use the steps to [enable FIPS on RHEL](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/security_hardening/switching-rhel-to-fips-mode_security-hardening).
197194

198195
Older versions of these operating systems operate at the FIPS 140-2 level and don't require any of these special considerations.
199196

197+
#### Linux guest agent
200198

201-
#### Linux Guest Agent
199+
Minimum [Goal State Agent](https://github.com/Azure/WALinuxAgent/wiki/FAQ#what-does-goal-state-agent-mean-in-waagent---version-output) version: [v2.14.0.1](https://github.com/Azure/WALinuxAgent/releases/tag/v2.14.0.1). To be sure that the goal state is updating, the `AutoUpdate.Enabled` flag should be `y` or commented out entirely so that the default behavior is used.
202200

203-
Minimum [Goal State Agent](https://github.com/Azure/WALinuxAgent/wiki/FAQ#what-does-goal-state-agent-mean-in-waagent---version-output) Version: [v2.14.0.1](https://github.com/Azure/WALinuxAgent/releases/tag/v2.14.0.1). To be sure the goal state is updating, the `AutoUpdate.Enabled` flag should be `y` or commented out entirely so that the default behavior is used
201+
`/etc/waagent.conf`:
204202

205-
/etc/waagent.conf:
206203
```
207204
AutoUpdate.Enabled=y
208205
```
209206

210-
##### RedHat 9 Workaround
207+
##### RHEL 9 workaround
211208

212-
> [!NOTE]
213-
> This workaround is intended for testing purposes only and does not support all VM deployment scenarios. After enabling FIPS on a running VM, execute the following commands to proceed.
209+
This workaround is intended for testing purposes only and doesn't support all VM deployment scenarios. After you enable FIPS on a running VM, run the following commands to proceed:
214210

215211
```
216212
systemctl stop waagent
@@ -220,7 +216,7 @@ sed -i -E '/(.+)(self._initialize_telemetry\(\))/s//\1# \2/' /usr/lib/python3.9/
220216
221217
```
222218

223-
Use the following command to verify that the previous change was applied successfully
219+
To verify that the previous change was applied successfully, use the following command:
224220

225221
```
226222
grep self\._initialize_telemetry /usr/lib/python3.9/site-packages/azurelinuxagent/daemon/main.py
@@ -233,7 +229,7 @@ The output should be exactly this text:
233229
# self._initialize_telemetry()
234230
```
235231

236-
Once verified, restart the agent
232+
After verification, restart the agent:
237233

238234
```
239235
systemctl start waagent
@@ -243,18 +239,18 @@ systemctl start waagent
243239

244240
## Validation
245241

246-
To validate proper functionality of the VM Extensions
247-
- Check that the agent status is 'Ready'
248-
- Test an extension utilizing the "protected settings" of the VM extensions
249-
- Using the "Reset Password" function of the Azure portal or az cli, reset a password or create a new temporary user.
250-
- Run a custom script
242+
To validate proper functionality of the VM extensions:
251243

252-
If these tests fail, it is necessary to force the Azure platform to generate a new PFX.
244+
- Check that the agent status is `Ready`.
245+
- Test an extension by using the protected settings of the VM extensions.
246+
- By using the `Reset Password` function of the Azure portal or `az cli`, reset a password or create a new temporary user.
247+
- Run a custom script.
253248

249+
If these tests fail, force the Azure platform to generate a new personal information exchange (PFX) package.
254250

255-
### Reset Password
251+
### Reset password
256252

257-
Using either the Azure portal, or an az cli command such as this example, to set a user's password or create a temporary user. Check the execution state for success or failure.
253+
Use either the Azure portal or an `az cli` command, such as this example, to set a user's password or create a temporary user. Check the execution state for success or failure.
258254

259255
```bash
260256
az vm user update \
@@ -267,22 +263,26 @@ az vm user update \
267263

268264
### Run a custom script
269265

270-
Use the [Custom Script Extension](/azure/virtual-machines/extensions/custom-script-linux) documentation to send a basic script such as `cat /etc/os-release` to test extension functionality
266+
Use the [Custom Script extension](/azure/virtual-machines/extensions/custom-script-linux) documentation to send a basic script, such as `cat /etc/os-release`, to test extension functionality.
267+
268+
### Fix a validation failure
271269

272-
### Fixing a validation failure
270+
If the validations fail to execute, force the Azure platform to generate a new PFX package. There are two methods to force this regeneration:
273271

274-
If the validations fail to execute, it is required to force the Azure platform to generate a new PFX package. There are two methods to force this regeneration to happen. Reallocating the VM or applying a Keyvault Certificate.
272+
- Reallocate the VM.
273+
- Apply an Azure Key Vault certificate.
275274

276275
#### Deallocate/Reallocate the VM
277276

278-
Using any method such as Azure CLI, the Azure portal, or any other method to deallocate the VM, wait for the deallocation to occur, then start the VM.
277+
You can use the Azure CLI, the Azure portal, or any other method to deallocate the VM. Wait for the deallocation to occur, and then start the VM.
278+
279+
#### Add a Key Vault certificate
279280

280-
#### Add a Keyvault Certificate
281+
Create the Key Vault certificate, add it to the modified ARM template, and deploy.
281282

282-
Create the keyvault/certificate then add it to the modified ARM template and deploy.
283-
- [Get started with Key Vault certificates | Microsoft Learn](/azure/key-vault/certificates/certificate-scenarios)
283+
For more information, see [Get started with Key Vault certificates](/azure/key-vault/certificates/certificate-scenarios).
284284

285-
Example: 'properties' section of the VM model:
285+
The following example shows the `properties` section of the VM model:
286286

287287
```json
288288
"secrets": [

0 commit comments

Comments
 (0)