Skip to content

Commit 042aa4e

Browse files
authored
[AKS] az aks create: Add new parameter --kms-infrastructure-encryption to enable KMS infrastructure encryption. (#9071)
1 parent 93679b3 commit 042aa4e

File tree

10 files changed

+6783
-1
lines changed

10 files changed

+6783
-1
lines changed

src/aks-preview/HISTORY.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ To release a new version, please select a new version number (usually plus 1 to
1212
Pending
1313
+++++++
1414

15+
18.0.0b33
16+
+++++++
17+
* `az aks create`: Add new parameter `--kms-infrastructure-encryption` to enable KMS infrastructure encryption.
18+
1519
18.0.0b32
1620
+++++++
1721
* Remove the sku preview flag from help command for AKS automatic

src/aks-preview/azext_aks_preview/_help.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,10 @@
495495
- name: --azure-keyvault-kms-key-vault-resource-id
496496
type: string
497497
short-summary: Resource ID of Azure Key Vault.
498+
- name: --kms-infrastructure-encryption
499+
type: string
500+
short-summary: Enable encryption at rest of Kubernetes resource objects using service-managed keys.
501+
long-summary: Enable infrastructure encryption for Kubernetes resource objects. This feature provides encryption at rest for cluster secrets and configuration using service-managed keys. For more information see https://aka.ms/aks/kubernetesResourceObjectEncryption.
498502
- name: --enable-image-cleaner
499503
type: bool
500504
short-summary: Enable ImageCleaner Service.

src/aks-preview/azext_aks_preview/_params.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,12 @@ def load_arguments(self, _):
690690
"azure_keyvault_kms_key_vault_resource_id",
691691
validator=validate_azure_keyvault_kms_key_vault_resource_id,
692692
)
693+
c.argument(
694+
"kms_infrastructure_encryption",
695+
arg_type=get_enum_type(["Enabled", "Disabled"]),
696+
default="Disabled",
697+
is_preview=True,
698+
)
693699
c.argument("http_proxy_config")
694700
c.argument(
695701
"bootstrap_artifact_source",

src/aks-preview/azext_aks_preview/custom.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,7 @@ def aks_create(
609609
azure_keyvault_kms_key_id=None,
610610
azure_keyvault_kms_key_vault_network_access=None,
611611
azure_keyvault_kms_key_vault_resource_id=None,
612+
kms_infrastructure_encryption="Disabled",
612613
http_proxy_config=None,
613614
bootstrap_artifact_source=CONST_ARTIFACT_SOURCE_DIRECT,
614615
bootstrap_container_registry_resource_id=None,

src/aks-preview/azext_aks_preview/managed_cluster_decorator.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,6 +1231,16 @@ def get_disable_image_integrity(self) -> bool:
12311231

12321232
return disable_image_integrity
12331233

1234+
def get_kms_infrastructure_encryption(self) -> str:
1235+
"""Obtain the value of kms_infrastructure_encryption.
1236+
1237+
:return: str
1238+
"""
1239+
# read the original value passed by the command
1240+
kms_infrastructure_encryption = self.raw_param.get("kms_infrastructure_encryption")
1241+
1242+
return kms_infrastructure_encryption
1243+
12341244
def get_cluster_snapshot_id(self) -> Union[str, None]:
12351245
"""Obtain the values of cluster_snapshot_id.
12361246
@@ -3250,6 +3260,30 @@ def set_up_image_integrity(self, mc: ManagedCluster) -> ManagedCluster:
32503260

32513261
return mc
32523262

3263+
def set_up_kms_infrastructure_encryption(self, mc: ManagedCluster) -> ManagedCluster:
3264+
"""Set up security profile KubernetesResourceObjectEncryptionProfile for the ManagedCluster object.
3265+
3266+
:return: the ManagedCluster object
3267+
"""
3268+
self._ensure_mc(mc)
3269+
3270+
kms_infrastructure_encryption = self.context.get_kms_infrastructure_encryption()
3271+
if kms_infrastructure_encryption and kms_infrastructure_encryption != "Disabled":
3272+
if mc.security_profile is None:
3273+
mc.security_profile = self.models.ManagedClusterSecurityProfile() # pylint: disable=no-member
3274+
3275+
# Set or update the kubernetes resource object encryption profile
3276+
if mc.security_profile.kubernetes_resource_object_encryption_profile is None:
3277+
mc.security_profile.kubernetes_resource_object_encryption_profile = (
3278+
self.models.KubernetesResourceObjectEncryptionProfile() # pylint: disable=no-member
3279+
)
3280+
3281+
# Set infrastructure encryption
3282+
# pylint: disable=line-too-long
3283+
mc.security_profile.kubernetes_resource_object_encryption_profile.infrastructure_encryption = kms_infrastructure_encryption
3284+
3285+
return mc
3286+
32533287
def set_up_creationdata_of_cluster_snapshot(self, mc: ManagedCluster) -> ManagedCluster:
32543288
"""Set up creationData of cluster snapshot for the ManagedCluster object.
32553289
@@ -3784,6 +3818,8 @@ def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) ->
37843818
mc = self.set_up_image_cleaner(mc)
37853819
# set up image integrity
37863820
mc = self.set_up_image_integrity(mc)
3821+
# set up KMS infrastructure encryption
3822+
mc = self.set_up_kms_infrastructure_encryption(mc)
37873823
# set up cluster snapshot
37883824
mc = self.set_up_creationdata_of_cluster_snapshot(mc)
37893825
# set up app routing profile

0 commit comments

Comments
 (0)