Skip to content

Commit 273683e

Browse files
committed
feat(vhd): add FIPS-compliant AzureLinux v3 gen2 Kata host VHD
Wire a new aks-azurelinux-v3-gen2-kata-fips distro that builds the AzureLinux 3 gen2 Kata host VHD with host-side FIPS enabled (ENABLE_FIPS, ENABLE_CGROUPV2). Adds the release pipeline build job, the distro const and Kata/cgroupv2 classification, the SIG image config template and mapping, and corresponding unit test coverage. Note: host FIPS (dracut-fips + fips=1 host cmdline) does not propagate to the guest microVM; true guest UVM FIPS is tracked separately (kernel-uvm).
1 parent a359909 commit 273683e

6 files changed

Lines changed: 59 additions & 2 deletions

File tree

.pipelines/.vsts-vhd-builder-release.yaml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ parameters:
3333
displayName: Build AzureLinuxV3 Gen2 Kata
3434
type: boolean
3535
default: true
36+
- name: buildAzureLinuxV3gen2katafips
37+
displayName: Build AzureLinuxV3 Gen2 Kata FIPS
38+
type: boolean
39+
default: true
3640
- name: buildAzureLinuxV3ARM64
3741
displayName: Build AzureLinuxV3 Gen2 - ARM64
3842
type: boolean
@@ -324,6 +328,31 @@ stages:
324328
useOverrides: ${{ parameters.useOverrides }}
325329
overrideBranch: ${{ parameters.overrideBranch }}
326330
artifactName: azurelinuxv3-gen2-kata
331+
- job: buildAzureLinuxV3gen2katafips
332+
condition: eq('${{ parameters.buildAzureLinuxV3gen2katafips }}', true)
333+
dependsOn: [ ]
334+
timeoutInMinutes: 360
335+
steps:
336+
- bash: |
337+
echo '##vso[task.setvariable variable=OS_SKU]AzureLinux'
338+
echo '##vso[task.setvariable variable=OS_VERSION]V3kata'
339+
echo '##vso[task.setvariable variable=IMG_PUBLISHER]MicrosoftCBLMariner'
340+
echo '##vso[task.setvariable variable=IMG_OFFER]azure-linux-3'
341+
echo '##vso[task.setvariable variable=IMG_SKU]azure-linux-3-gen2'
342+
echo '##vso[task.setvariable variable=IMG_VERSION]latest'
343+
echo '##vso[task.setvariable variable=HYPERV_GENERATION]V2'
344+
echo '##vso[task.setvariable variable=AZURE_VM_SIZE]Standard_D16ads_v5'
345+
echo '##vso[task.setvariable variable=FEATURE_FLAGS]kata'
346+
echo '##vso[task.setvariable variable=ARCHITECTURE]X86_64'
347+
echo '##vso[task.setvariable variable=ENABLE_FIPS]True'
348+
echo '##vso[task.setvariable variable=ENABLE_TRUSTED_LAUNCH]False'
349+
echo '##vso[task.setvariable variable=ENABLE_CGROUPV2]True'
350+
displayName: Setup Build Variables
351+
- template: ./templates/.builder-release-template.yaml
352+
parameters:
353+
useOverrides: ${{ parameters.useOverrides }}
354+
overrideBranch: ${{ parameters.overrideBranch }}
355+
artifactName: azurelinuxv3-gen2-kata-fips
327356
- job: buildAzureLinuxV3gen2TrustedLaunch
328357
condition: eq('${{ parameters.buildAzureLinuxV3gen2TrustedLaunch }}', true)
329358
dependsOn: [ ]

pkg/agent/bakerapi_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,7 @@ var _ = Describe("AgentBaker API implementation tests", func() {
350350
datamodel.AKSAzureLinuxV3Gen2FIPS,
351351
datamodel.AKSAzureLinuxV2Gen2Kata,
352352
datamodel.AKSAzureLinuxV3Gen2Kata,
353+
datamodel.AKSAzureLinuxV3Gen2KataFIPS,
353354
datamodel.AKSAzureLinuxV2Arm64Gen2,
354355
datamodel.AKSAzureLinuxV3Arm64Gen2,
355356
datamodel.AKSAzureLinuxV2Gen2TL,

pkg/agent/datamodel/sig_config.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ var AvailableContainerdDistros = []Distro{
141141
AKSCBLMarinerV2Gen2Kata,
142142
AKSAzureLinuxV2Gen2Kata,
143143
AKSAzureLinuxV3Gen2Kata,
144+
AKSAzureLinuxV3Gen2KataFIPS,
144145
AKSCBLMarinerV2Gen2TL,
145146
AKSAzureLinuxV2Gen2TL,
146147
AKSAzureLinuxV3Gen2TL,
@@ -200,6 +201,7 @@ var AvailableGen2Distros = []Distro{
200201
AKSCBLMarinerV2Gen2Kata,
201202
AKSAzureLinuxV2Gen2Kata,
202203
AKSAzureLinuxV3Gen2Kata,
204+
AKSAzureLinuxV3Gen2KataFIPS,
203205
AKSCBLMarinerV2Gen2TL,
204206
AKSAzureLinuxV2Gen2TL,
205207
AKSAzureLinuxV3Gen2TL,
@@ -230,6 +232,7 @@ var AvailableAzureLinuxDistros = []Distro{
230232
AKSCBLMarinerV2Gen2Kata,
231233
AKSAzureLinuxV2Gen2Kata,
232234
AKSAzureLinuxV3Gen2Kata,
235+
AKSAzureLinuxV3Gen2KataFIPS,
233236
AKSCBLMarinerV2Arm64Gen2,
234237
AKSAzureLinuxV2Arm64Gen2,
235238
AKSAzureLinuxV3Arm64Gen2,
@@ -255,6 +258,7 @@ var AvailableAzureLinuxCgroupV2Distros = []Distro{
255258
AKSCBLMarinerV2Gen2Kata, // Per mheberling, AKSCBLMarinerV2Gen2Kata is equal to AKSAzureLinuxV2Gen2Kata. AKSCBLMarinerV2Gen2Kata is added for now to unblock scenario_kata.
256259
AKSAzureLinuxV2Gen2Kata,
257260
AKSAzureLinuxV3Gen2Kata,
261+
AKSAzureLinuxV3Gen2KataFIPS,
258262
AKSAzureLinuxV2Arm64Gen2,
259263
AKSAzureLinuxV3Arm64Gen2,
260264
AKSAzureLinuxV3Arm64Gen2FIPS,
@@ -692,6 +696,13 @@ var (
692696
Version: LinuxSIGImageVersion,
693697
}
694698

699+
SIGAzureLinuxV3KataFIPSImageConfigTemplate = SigImageConfigTemplate{
700+
ResourceGroup: AKSAzureLinuxResourceGroup,
701+
Gallery: AKSAzureLinuxGalleryName,
702+
Definition: "V3katagen2fips",
703+
Version: LinuxSIGImageVersion,
704+
}
705+
695706
SIGCBLMarinerV2Arm64ImageConfigTemplate = SigImageConfigTemplate{
696707
ResourceGroup: AKSCBLMarinerResourceGroup,
697708
Gallery: AKSCBLMarinerGalleryName,
@@ -942,6 +953,7 @@ func getSigAzureLinuxImageConfigMapWithOpts(opts ...SigImageConfigOpt) map[Distr
942953
AKSAzureLinuxV3Gen2FIPS: SIGAzureLinuxV3Gen2FIPSImageConfigTemplate.WithOptions(opts...),
943954
AKSAzureLinuxV2Gen2Kata: SIGAzureLinuxV2KataImageConfigTemplate.WithOptions(opts...),
944955
AKSAzureLinuxV3Gen2Kata: SIGAzureLinuxV3KataImageConfigTemplate.WithOptions(opts...),
956+
AKSAzureLinuxV3Gen2KataFIPS: SIGAzureLinuxV3KataFIPSImageConfigTemplate.WithOptions(opts...),
945957
AKSAzureLinuxV2Arm64Gen2: SIGAzureLinuxV2Arm64ImageConfigTemplate.WithOptions(opts...),
946958
AKSAzureLinuxV3Arm64Gen2: SIGAzureLinuxV3Arm64ImageConfigTemplate.WithOptions(opts...),
947959
AKSAzureLinuxV3Arm64Gen2FIPS: SIGAzureLinuxV3Arm64Gen2FIPSImageConfigTemplate.WithOptions(opts...),

pkg/agent/datamodel/sig_config_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ var _ = Describe("GetMaintainedLinuxSIGImageConfigMap", func() {
3131
AKSAzureLinuxV3FIPS: SIGAzureLinuxV3Gen1FIPSImageConfigTemplate.WithOptions(),
3232
AKSAzureLinuxV3Gen2FIPS: SIGAzureLinuxV3Gen2FIPSImageConfigTemplate.WithOptions(),
3333
AKSAzureLinuxV3Gen2Kata: SIGAzureLinuxV3KataImageConfigTemplate.WithOptions(),
34+
AKSAzureLinuxV3Gen2KataFIPS: SIGAzureLinuxV3KataFIPSImageConfigTemplate.WithOptions(),
3435
AKSAzureLinuxV3Arm64Gen2: SIGAzureLinuxV3Arm64ImageConfigTemplate.WithOptions(),
3536
AKSAzureLinuxV3Arm64Gen2FIPS: SIGAzureLinuxV3Arm64Gen2FIPSImageConfigTemplate.WithOptions(),
3637
AKSAzureLinuxV3Gen2TL: SIGAzureLinuxV3TLImageConfigTemplate.WithOptions(),
@@ -109,7 +110,7 @@ var _ = Describe("GetSIGAzureCloudSpecConfig", func() {
109110
Expect(mariner.Definition).To(Equal("V1"))
110111
Expect(mariner.Version).To(Equal(FrozenCBLMarinerV1SIGImageVersionForDeprecation))
111112

112-
Expect(len(sigConfig.SigAzureLinuxImageConfig)).To(Equal(21))
113+
Expect(len(sigConfig.SigAzureLinuxImageConfig)).To(Equal(22))
113114

114115
azurelinuxV2 := sigConfig.SigAzureLinuxImageConfig[AKSAzureLinuxV2]
115116
Expect(azurelinuxV2.ResourceGroup).To(Equal("resourcegroup"))
@@ -337,6 +338,12 @@ var _ = Describe("GetSIGAzureCloudSpecConfig", func() {
337338
Expect(azurelinuxV3Gen2Kata.Definition).To(Equal("V3katagen2"))
338339
Expect(azurelinuxV3Gen2Kata.Version).To(Equal(LinuxSIGImageVersion))
339340

341+
azurelinuxV3Gen2KataFIPS := sigConfig.SigAzureLinuxImageConfig[AKSAzureLinuxV3Gen2KataFIPS]
342+
Expect(azurelinuxV3Gen2KataFIPS.ResourceGroup).To(Equal("resourcegroup"))
343+
Expect(azurelinuxV3Gen2KataFIPS.Gallery).To(Equal("aksazurelinux"))
344+
Expect(azurelinuxV3Gen2KataFIPS.Definition).To(Equal("V3katagen2fips"))
345+
Expect(azurelinuxV3Gen2KataFIPS.Version).To(Equal(LinuxSIGImageVersion))
346+
340347
aksUbuntuEgressContainerd2204Gen2 := sigConfig.SigUbuntuImageConfig[AKSUbuntuEgressContainerd2204Gen2]
341348
Expect(aksUbuntuEgressContainerd2204Gen2.ResourceGroup).To(Equal("resourcegroup"))
342349
Expect(aksUbuntuEgressContainerd2204Gen2.Gallery).To(Equal("aksubuntu"))

pkg/agent/datamodel/types.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ const (
160160
AKSCBLMarinerV2Gen2Kata Distro = "aks-cblmariner-v2-gen2-kata"
161161
AKSAzureLinuxV2Gen2Kata Distro = "aks-azurelinux-v2-gen2-kata"
162162
AKSAzureLinuxV3Gen2Kata Distro = "aks-azurelinux-v3-gen2-kata"
163+
AKSAzureLinuxV3Gen2KataFIPS Distro = "aks-azurelinux-v3-gen2-kata-fips"
163164
AKSCBLMarinerV2Gen2TL Distro = "aks-cblmariner-v2-gen2-tl"
164165
AKSAzureLinuxV2Gen2TL Distro = "aks-azurelinux-v2-gen2-tl"
165166
AKSAzureLinuxV3Gen2TL Distro = "aks-azurelinux-v3-gen2-tl"
@@ -315,7 +316,7 @@ func (d Distro) IsAzureLinuxCgroupV2VHDDistro() bool {
315316
}
316317

317318
func (d Distro) IsKataDistro() bool {
318-
return d == AKSCBLMarinerV2Gen2Kata || d == AKSAzureLinuxV3Gen2Kata || d == AKSAzureLinuxV2Gen2Kata || d == AKSCBLMarinerV2KataGen2TL || d == CustomizedImageKata
319+
return d == AKSCBLMarinerV2Gen2Kata || d == AKSAzureLinuxV3Gen2Kata || d == AKSAzureLinuxV3Gen2KataFIPS || d == AKSAzureLinuxV2Gen2Kata || d == AKSCBLMarinerV2KataGen2TL || d == CustomizedImageKata
319320
}
320321

321322
func (d Distro) IsFlatcarDistro() bool {

pkg/agent/datamodel/types_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,6 +1178,13 @@ func TestAgentPoolProfileIsAzureLinuxCgroupV2VHDDistro(t *testing.T) {
11781178
},
11791179
expected: true,
11801180
},
1181+
{
1182+
name: "Azure Linux V3 Gen2 Kata FIPS VHD distro",
1183+
ap: AgentPoolProfile{
1184+
Distro: AKSAzureLinuxV3Gen2KataFIPS,
1185+
},
1186+
expected: true,
1187+
},
11811188
{
11821189
name: "CBLMariner V2 Gen2 VHD distro",
11831190
ap: AgentPoolProfile{

0 commit comments

Comments
 (0)