You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# 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
14
14
15
15
> [!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.
17
17
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.
21
19
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).
@@ -46,39 +45,40 @@ Linux Virtual Machine (VM) Extensions currently comply with FIPS 140-2 but updat
46
45
47
46
## Prerequisites
48
47
49
-
There are four requirements to being able to use a FIPS 140-3compliant VM in Azure:
48
+
You must meet the following four requirements to use a FIPS 140-3-compliant VM in Azure:
50
49
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 optedin 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.
55
54
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.
57
56
58
57
---
59
58
60
-
## Implementing prerequisites
59
+
## Implement prerequisites
60
+
61
+
### 1. Enabled regions
61
62
62
-
### 1. Enabled Regions
63
63
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.
64
64
65
65
| Cloud | Region |
66
66
|:-----|:-----|
67
67
| 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|
70
70
71
-
### 2. Subscription Enablement / Opt-In
71
+
### 2. Subscription enablement/opt-in
72
72
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
75
76
76
-
**Azure CLI**
77
77
```
78
78
az feature register --namespace Microsoft.Compute --name OptInToFips1403Compliance
79
79
```
80
80
81
-
Verify with the following command
81
+
Verify with the following command:
82
82
```
83
83
az feature list | jq '.[] | select(.name=="Microsoft.Compute/OptInToFips1403Compliance")'
84
84
```
@@ -96,16 +96,16 @@ az feature list | jq '.[] | select(.name=="Microsoft.Compute/OptInToFips1403Comp
96
96
97
97
---
98
98
99
-
### 3. Per-VM Opt-In
99
+
### 3. Per-VM opt-in
100
100
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 optingin 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.
102
102
103
103
> [!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.
105
105
106
-
#### Deploying a new VM
106
+
#### Deploy a new VM
107
107
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.
109
109
110
110
```json
111
111
{
@@ -121,14 +121,14 @@ In order to deploy a new VM with FIPS 140-3 enablement turned on immediately, us
121
121
}
122
122
```
123
123
124
-
#### Modifying an existing VM
124
+
#### Modify an existing VM
125
125
126
126
##### az cli commands
127
127
128
128
> [!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`.
130
130
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.
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.
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:
157
157
158
158
```
159
159
az rest \
@@ -162,7 +162,7 @@ az rest \
162
162
| jq .properties.additionalCapabilities
163
163
```
164
164
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.
166
166
167
167
```json
168
168
({
@@ -183,34 +183,30 @@ Leaving the marker here, but deleting the content pending research -->
183
183
184
184
### 4. In-guest considerations
185
185
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.
189
187
190
-
The following distributions support FIPS 140-3 and provide instructions for enabling
188
+
#### Configure the OS for FIPS enablement
191
189
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:
196
191
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).
197
194
198
195
Older versions of these operating systems operate at the FIPS 140-2 level and don't require any of these special considerations.
199
196
197
+
#### Linux guest agent
200
198
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.
202
200
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`:
204
202
205
-
/etc/waagent.conf:
206
203
```
207
204
AutoUpdate.Enabled=y
208
205
```
209
206
210
-
##### RedHat 9 Workaround
207
+
##### RHEL 9 workaround
211
208
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:
214
210
215
211
```
216
212
systemctl stop waagent
@@ -220,7 +216,7 @@ sed -i -E '/(.+)(self._initialize_telemetry\(\))/s//\1# \2/' /usr/lib/python3.9/
220
216
221
217
```
222
218
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:
@@ -233,7 +229,7 @@ The output should be exactly this text:
233
229
# self._initialize_telemetry()
234
230
```
235
231
236
-
Once verified, restart the agent
232
+
After verification, restart the agent:
237
233
238
234
```
239
235
systemctl start waagent
@@ -243,18 +239,18 @@ systemctl start waagent
243
239
244
240
## Validation
245
241
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:
251
243
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.
253
248
249
+
If these tests fail, force the Azure platform to generate a new personal information exchange (PFX) package.
254
250
255
-
### Reset Password
251
+
### Reset password
256
252
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.
258
254
259
255
```bash
260
256
az vm user update \
@@ -267,22 +263,26 @@ az vm user update \
267
263
268
264
### Run a custom script
269
265
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
271
269
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:
273
271
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.
275
274
276
275
#### Deallocate/Reallocate the VM
277
276
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
279
280
280
-
#### Add a Keyvault Certificate
281
+
Create the Key Vault certificate, add it to the modified ARM template, and deploy.
281
282
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).
284
284
285
-
Example: 'properties' section of the VM model:
285
+
The following example shows the `properties` section of the VM model:
0 commit comments