Az Azure Kubernetes Service (AKS) fürtök KMS-adattitkosításának engedélyezése (előzetes verzió)

Ez a cikk bemutatja, hogyan engedélyezheti a Kulcskezelési szolgáltatás (KMS) adattitkosítását a Kubernetes-titkos kulcsokhoz az Azure Kubernetes Service-ben (AKS). A KMS-titkosítás az Azure Key Vault-kulcsokkal titkosítja az etcd-ben tárolt Kubernetes-titkos kulcsokat.

Az AKS két kulcskezelési lehetőséget támogat:

  • Platform által felügyelt kulcsok (PMK): Az AKS automatikusan létrehozza és kezeli a titkosítási kulcsokat. Ez a beállítás a legegyszerűbb beállítást biztosítja automatikus kulcsforgatással.
  • Ügyfél által felügyelt kulcsok (CMK): Saját Azure Key Vault- és titkosítási kulcsokat hozhat létre és kezelhet. Ez a beállítás teljes körű vezérlést biztosít a kulcs életciklusa felett, és megfelel az ügyfél által felügyelt kulcsokat meghatalmaozó megfelelőségi követelményeknek.

További információ a titkosítási fogalmakról és a kulcsbeállításokról: Az AKS inaktív állapotban lévő adattitkosítási fogalmai.

Fontos

Az AKS előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az AKS előzetes verzióihoz részleges támogatást nyújt az ügyfélszolgálat a tőle telhető legjobb módon. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:

Előfeltételek

  • Ez a cikk az Azure CLI 2.73.0-s vagy újabb verzióját igényli. Az Azure Cloud Shell használata esetén a legújabb verzió már telepítve van.
  • Az Azure aks-preview vagy újabb verziójára van szüksége.
    • Ha még nem rendelkezik a aks-preview bővítményrel, telepítse a az extension add parancs használatával.
      az extension add --name aks-preview
      
    • Ha már rendelkezik a aks-preview bővítményrel, frissítse, hogy biztosan a legújabb verzióval rendelkezzen a az extension update parancs használatával.
      az extension update --name aks-preview
      
  • kubectl A parancssori felület eszköz telepítve van.

A funkciójelző regisztrálása

Ha a KMS-adattitkosítást platform által felügyelt kulcsokkal szeretné használni, regisztrálja a KMSPMKPreview funkciójelzőt az előfizetésben.

  1. Regisztrálja a funkciójelzőt a az feature register paranccsal.

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. Ellenőrizze a regisztrációs állapotot a az feature show paranccsal. Néhány percig tart, amíg az állapot megjelenik a Regisztrált állapotban.

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. Ha az állapot a Regisztrált állapotot jeleníti meg, frissítse a Microsoft.ContainerService erőforrás-szolgáltató regisztrációját a az provider register paranccsal.

    az provider register --namespace Microsoft.ContainerService
    

Környezeti változók beállítása

Környezeti változók beállítása az üzembe helyezéshez. Cserélje le a helyőrző értékeket a sajátjára.

# Set environment variables
export SUBSCRIPTION_ID="<your-subscription-id>"
export RESOURCE_GROUP="<your-resource-group>"
export LOCATION="<your-location>"
export CLUSTER_NAME="<your-cluster-name>"

# Set subscription
az account set --subscription $SUBSCRIPTION_ID

# Create resource group if it doesn't exist
az group create --name $RESOURCE_GROUP --location $LOCATION

Platform által felügyelt kulcstitkosítás engedélyezése

Platform által felügyelt kulcsokkal az AKS automatikusan létrehozza és kezeli az Azure Key Vaultot és a titkosítási kulcsokat. A kulcsforgatást a platform automatikusan kezeli.

Új AKS-fürt létrehozása platform által felügyelt kulcsokkal

Hozzon létre egy új AKS-fürtöt KMS-titkosítással a platform által felügyelt kulcsokat használva.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --generate-ssh-keys

Platform által felügyelt kulcsok engedélyezése meglévő fürtön

Engedélyezze a KMS-titkosítást platform által felügyelt kulcsokkal egy meglévő AKS-fürtön.

Megjegyzés:

A fürtnek a Kubernetes 1.33-es vagy újabb verzióját kell futtatnia.

Ha a az aks update parancs ReconcileAzureKeyVaultKmsError hibát ad vissza, futtassa a következő parancsot annak ellenőrzéséhez, hogy tud-e meglévő titkokat olvasni és írni:

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Ha ez a parancs meghiúsul (például a webhookot elutasítják, vagy az erőforrás nem található), javítsa ki a problémát, és futtassa újra a frissítési parancsot. Az "Objektum módosult" üzenet nem igényel műveletet – kezelje sikerként.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled

KMS-konfiguráció ellenőrzése

A KMS-titkosítás engedélyezése után ellenőrizze a konfigurációt.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

A kimenet tartalmazza a KMS-konfigurációt:

{
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

Ügyfél által felügyelt kulcstitkosítás engedélyezése privát kulcstartóval

A fokozott biztonság érdekében használhat egy privát kulcstartót, amelynek nyilvános hálózati hozzáférése le van tiltva. Az AKS a megbízható szolgáltatások tűzfalkivételén keresztül fér hozzá a titkos kulcstartóhoz. Ez a szakasz bemutatja, hogyan konfigurálhatók az ügyfél által felügyelt kulcsok privát kulcstartóval.

Kulcstárhely és kulcs létrehozása megbízható szolgáltatások hozzáférésével

Megjegyzés:

Ez a szakasz bemutatja, hogyan hozhat létre kezdetben nyilvános hálózati hozzáféréssel rendelkező kulcstárat, majd engedélyezheti a tűzfalat megbízható szolgáltatások kihagyásával. Ez a megközelítés csak szemléltető célokat szolgál. Éles környezetben a kulcstárolót kezdetektől fogva privátként kell létrehozni és kezelni. A privát kulcstartók kezelésével kapcsolatos útmutatásért tekintse meg az Azure Key Vault hálózati biztonságát.

  1. Hozzon létre egy kulcstárat, az Azure RBAC engedélyezésével.

    export KEY_VAULT_NAME="<your-key-vault-name>"
    
    az keyvault create \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-rbac-authorization true \
        --public-network-access Enabled
    
    # Get the key vault resource ID
    export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    
  2. Rendelje hozzá magát a Key Vault Crypto Officer szerephez, hogy létrehozhasson egy kulcsot.

    az role assignment create \
        --role "Key Vault Crypto Officer" \
        --assignee-object-id $(az ad signed-in-user show --query id -o tsv) \
        --assignee-principal-type "User" \
        --scope $KEY_VAULT_RESOURCE_ID
    
  3. Hozzon létre egy kulcsot a kulcstárban. Győződjön meg arról, hogy encryptdecrypt a kulcsműveletek engedélyezve vannak.

    export KEY_NAME="<your-key-name>"
    
    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME
    
    # Get the key ID (without version for automatic rotation)
    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv)
    export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
    
  4. Engedélyezze a Key Vault tűzfalát a megbízható szolgáltatások általi megkerüléssel.

    az keyvault update \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --default-action Deny \
        --bypass AzureServices
    

    A --default-action Deny paraméter blokkolja a nyilvános hálózati hozzáférést, és a paraméter lehetővé teszi, hogy megbízható --bypass AzureServices Azure-szolgáltatások (beleértve az AKS-t) hozzáférjenek a kulcstartóhoz.

Felhasználó által hozzárendelt felügyelt identitás létrehozása

  1. Hozzon létre egy felhasználó által hozzárendelt felügyelt identitást a fürthöz.

    export IDENTITY_NAME="<your-identity-name>"
    
    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
    # Get the identity details
    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    
  2. Rendelje hozzá a szükséges szerepköröket a felügyelt identitáshoz.

    # Assign Key Vault Crypto User role for encrypt/decrypt operations
    az role assignment create \
        --role "Key Vault Crypto User" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    
    # Assign Key Vault Contributor role for key management
    az role assignment create \
        --role "Key Vault Contributor" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    

Privát új AKS cluster létrehozása ügyfél által kezelt kulcsokkal

Hozzon létre egy új AKS-fürtöt KMS-titkosítással, ügyfél által felügyelt kulcsok és egy privát kulcstároló használatával.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Private \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --generate-ssh-keys

Ügyfél által felügyelt kulcsok engedélyezése meglévő fürtön (privát)

Engedélyezze a KMS-titkosítást ügyfél által felügyelt kulcsokkal egy meglévő AKS-fürt privát kulcstárolójának használatával.

Megjegyzés:

A fürtnek a Kubernetes 1.33-es vagy újabb verzióját kell futtatnia.

Ha a az aks update parancs ReconcileAzureKeyVaultKmsError hibát ad vissza, futtassa a következő parancsot annak ellenőrzéséhez, hogy tud-e meglévő titkokat olvasni és írni:

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Ha ez a parancs meghiúsul (például a webhookot elutasítják, vagy az erőforrás nem található), javítsa ki a problémát, és futtassa újra a frissítési parancsot. Az "Objektum módosult" üzenet nem igényel műveletet – kezelje sikerként.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Private \
    --assign-identity $IDENTITY_RESOURCE_ID

KMS-konfiguráció ellenőrzése

A KMS-titkosítás engedélyezése után ellenőrizze a konfigurációt.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

A kimenet tartalmazza a KMS-konfigurációt:

{
    "azureKeyVaultKms": {
        "enabled": true,
        "keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
        "keyVaultNetworkAccess": "Private",
        "keyVaultResourceId": "<key-vault-resource-id>"
    },
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

Ügyfél által felügyelt kulcstitkosítás engedélyezése nyilvános kulcstartóval

Az ügyfél által kezelt kulcsokkal saját Azure Key Vault- és titkosítási kulcsokat hozhat létre és kezelhet. Ez a szakasz bemutatja, hogyan konfigurálhatók az ügyfél által felügyelt kulcsok nyilvános kulcstartóval.

Kulcstár és kulcs létrehozása

  1. Hozzon létre egy kulcstárat, az Azure RBAC engedélyezésével.

    export KEY_VAULT_NAME="<your-key-vault-name>"
    
    az keyvault create \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-rbac-authorization true \
        --public-network-access Enabled
    
    # Get the key vault resource ID
    export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    
  2. Rendelje hozzá magát a Key Vault Crypto Officer szerephez, hogy létrehozhasson egy kulcsot.

    az role assignment create \
        --role "Key Vault Crypto Officer" \
        --assignee-object-id $(az ad signed-in-user show --query id -o tsv) \
        --assignee-principal-type "User" \
        --scope $KEY_VAULT_RESOURCE_ID
    
  3. Hozzon létre egy kulcsot a kulcstárban. Győződjön meg arról, hogy encryptdecrypt a kulcsműveletek engedélyezve vannak.

    export KEY_NAME="<your-key-name>"
    
    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME
    
    # Get the key ID (without version for automatic rotation)
    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv)
    export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
    

Felhasználó által hozzárendelt felügyelt identitás létrehozása

  1. Hozzon létre egy felhasználó által hozzárendelt felügyelt identitást a fürthöz.

    export IDENTITY_NAME="<your-identity-name>"
    
    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
    # Get the identity details
    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    
  2. Rendelje hozzá a szükséges szerepköröket a felügyelt identitáshoz.

    # Assign Key Vault Crypto User role for encrypt/decrypt operations
    az role assignment create \
        --role "Key Vault Crypto User" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    
    # Assign Key Vault Contributor role for key management
    az role assignment create \
        --role "Key Vault Contributor" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    

Új AKS-fürt létrehozása ügyfél által kezelt kulcsokkal

Hozzon létre egy új AKS fürtöt KMS titkosítással, ügyfél által kezelt kulcsokkal.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --generate-ssh-keys

Ügyfél által felügyelt kulcsok engedélyezése meglévő fürtön

Engedélyezze a KMS-titkosítást ügyfél által felügyelt kulcsokkal egy meglévő AKS-fürtön.

Megjegyzés:

A fürtnek a Kubernetes 1.33-es vagy újabb verzióját kell futtatnia.

Ha a az aks update parancs ReconcileAzureKeyVaultKmsError hibát ad vissza, futtassa a következő parancsot annak ellenőrzéséhez, hogy a meglévő titkok olvashatók-e és írhatók-e:

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Ha ez a parancs meghiúsul (például a webhookot elutasítják, vagy az erőforrás nem található), javítsa ki a problémát, és futtassa újra a frissítési parancsot. Az "Objektum módosult" üzenet nem igényel műveletet – kezelje sikerként.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID

KMS-konfiguráció ellenőrzése

A KMS-titkosítás engedélyezése után ellenőrizze a konfigurációt.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

A kimenet tartalmazza a KMS-konfigurációt:

{
    "azureKeyVaultKms": {
        "enabled": true,
        "keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
        "keyVaultNetworkAccess": "Public",
        "keyVaultResourceId": "<key-vault-resource-id>"
    },
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

Migrálás a kulcskezelési beállítások között

A platform által felügyelt és az ügyfél által felügyelt kulcsok között migrálhat.

Migrálás platform által felügyelt kulcsról ügyfél által felügyelt kulcsra

A platform által felügyelt kulcsok és az ügyfél által felügyelt kulcsok közötti migráláshoz először állítsa be a kulcstartót, a kulcsot és a felügyelt identitást az ügyfél által felügyelt kulcsok szakaszban leírtak szerint, majd futtassa a frissítési parancsot:

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID

Migrálás az ügyfél által felügyelt kulcsokból a platform által felügyelt kulcsok felé

Az ügyfél által felügyelt kulcsokból a platform által felügyelt kulcsok közötti migráláshoz:

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --disable-azure-keyvault-kms

Kulcsrotálás

A KMS-adattitkosítással a kulcsforgatás a kulcskezelési lehetőségtől függően eltérően történik:

  • Platform által felügyelt kulcsok: A kulcsváltás automatikus. Nincs szükség műveletre.
  • Ügyfél által kezelt kulcsok: Miután elforgatta a kulcsot az Azure Key Vaultban, a KMS rendszeresen észleli az új kulcsverziót. Várjon legalább hét napot az új kulcsverzió létrehozása és a régi törlése között.

Megjegyzés:

Az örökölt KMS-felülettel ellentétben ezzel az új implementációval nem kell manuálisan újra titkos kulcsokat titkosítani a kulcsváltás után. Ezt a platform automatikusan kezeli.

Ne törölje és ne állítsa lejártra a régi kulcsverziót közvetlenül az új létrehozása után.