Povolení šifrování dat Služby správy klíčů v clusterech Azure Kubernetes Service (AKS) (Preview)

V tomto článku se dozvíte, jak povolit šifrování dat služby Správy klíčů (KMS) pro tajné kódy Kubernetes ve službě Azure Kubernetes Service (AKS). Šifrování pomocí KMS šifruje tajemství Kubernetes uložené v etcd s použitím klíčů služby Azure Key Vault.

AKS podporuje dvě možnosti správy klíčů:

  • Klíče spravované platformou (PMK):: AKS automaticky vytváří a spravuje šifrovací klíče. Tato možnost poskytuje nejjednodušší nastavení s automatickou obměnou klíče.
  • Klíče spravované zákazníkem (CMK):: Vytvoříte a spravujete vlastní služby Azure Key Vault a šifrovací klíče. Tato možnost poskytuje úplnou kontrolu nad životním cyklem klíčů a splňuje požadavky na dodržování předpisů, které vyžadují klíče spravované zákazníkem.

Další informace o konceptech šifrování a možnostech klíče najdete v tématu Koncepty šifrování neaktivních uložených dat pro AKS.

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na bázi samoobsluhy a dobrovolného přihlášení. Ukázky jsou poskytovány "jak jsou" a "podle aktuální dostupnosti" a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Předběžné verze AKS jsou částečně pokryty zákaznickou podporou podle možností. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Požadavky

  • Tento článek vyžaduje verzi 2.73.0 nebo novější azure CLI. Pokud používáte Azure Cloud Shell, je tam už nainstalovaná nejnovější verze.
  • Potřebujete aks-preview rozšíření Azure CLI verze 19.0.0b13 nebo novější.
    • Pokud ještě nemáte rozšíření aks-preview, nainstalujte jej pomocí příkazu az extension add.
      az extension add --name aks-preview
      
    • Pokud už máte rozšíření aks-preview, aktualizujte ho pomocí příkazu az extension update a ujistěte se, že máte nejnovější verzi.
      az extension update --name aks-preview
      
  • kubectl Nainstalovaný nástroj CLI.

Zaregistrujte příznak funkce

Pokud chcete používat šifrování dat KMS s klíči spravovanými platformou, zaregistrujte ve svém předplatném KMSPMKPreview příznak funkčnosti.

  1. Pomocí příkazu az feature register zaregistrujte příznak funkce.

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. Pomocí příkazu ověřte stav az feature show registrace. Zobrazení stavu Zaregistrované trvá několik minut.

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. Jakmile se zobrazí stav Registrováno, pomocí příkazu aktualizujte registraci poskytovatele prostředků az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Nastavení proměnných prostředí

Nastavte proměnné prostředí pro vaše nasazení. Zástupné hodnoty nahraďte vlastními hodnotami.

# 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

Povolení šifrování klíčů spravovaných platformou

Díky klíčům spravovaným platformou služba AKS automaticky vytvoří a spravuje službu Azure Key Vault a šifrovací klíče. Rotace klíčů probíhá automaticky platformou.

Vytvoření nového clusteru AKS s klíči spravovanými platformou

Vytvořte nový cluster AKS se šifrováním KMS pomocí klíčů spravovaných platformou.

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

Povolení klíčů spravovaných platformou v existujícím clusteru

Povolte šifrování Služby správy klíčů pomocí klíčů spravovaných platformou v existujícím clusteru AKS.

Poznámka:

Cluster musí používat Kubernetes verze 1.33 nebo novější.

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

Ověření konfigurace KMS

Po povolení šifrování Služby správy klíčů ověřte konfiguraci.

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

Výstup zahrnuje konfiguraci Key Management Service (KMS):

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

Povolení šifrování klíčů spravovaných zákazníkem pomocí privátního trezoru klíčů

Pro lepší zabezpečení můžete použít privátní trezor klíčů, který má zakázaný přístup k veřejné síti. AKS přistupuje k trezoru privátních klíčů prostřednictvím výjimky v bráně firewall pro důvěryhodné služby. Tato část ukazuje, jak nakonfigurovat klíče spravované zákazníkem pomocí privátního trezoru klíčů.

Vytvořte trezor klíčů a klíč s přístupem pro důvěryhodné služby.

Poznámka:

Tato část znázorňuje vytvoření trezoru klíčů s přístupem k veřejné síti zpočátku a povolením brány firewall s obejití důvěryhodných služeb. Tento přístup je určen pouze pro ilustrativní účely. V produkčních prostředích byste měli vytvořit a spravovat trezor klíčů jako soukromý od začátku. Pokyny ke správě trezorů privátních klíčů najdete v tématu Zabezpečení sítě služby Azure Key Vault.

  1. Vytvořte trezor klíčů s povoleným Azure RBAC.

    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. Přiřaďte si roli Crypto Officer v Key Vault pro vytvoření klíče.

    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. Vytvořte klíč v trezoru klíčů. Ujistěte se, že operace s encrypt a decrypt klíči jsou povoleny.

    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. Povolte bránu firewall Key Vault s výjimkou pro důvěryhodné služby.

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

    Parametr --default-action Deny blokuje přístup k veřejné síti a tento --bypass AzureServices parametr umožňuje důvěryhodným službám Azure (včetně AKS) přistupovat k trezoru klíčů.

Vytvořit uživatelsky přiřazenou spravovanou identitu

  1. Vytvořte spravovanou identitu přiřazenou uživatelem pro cluster.

    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. Přiřaďte spravované identitě požadované role.

    # 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
    

Vytvoření nového clusteru AKS s klíči spravovanými zákazníkem (privátní)

Vytvořte nový cluster AKS s šifrováním pomocí služby Key Management Service (KMS) s použitím klíčů spravovaných zákazníkem v rámci soukromého úložiště klíčů.

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

Povolení klíčů spravovaných zákazníkem v existujícím clusteru (privátní)

Povolte šifrování KMS s klíči spravovanými zákazníkem prostřednictvím privátního trezoru klíčů v existujícím clusteru AKS.

Poznámka:

Cluster musí používat Kubernetes verze 1.33 nebo novější.

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

Ověření konfigurace KMS

Po povolení šifrování Služby správy klíčů ověřte konfiguraci.

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

Výstup zahrnuje konfiguraci Key Management Service (KMS):

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

Povolení šifrování klíčů spravovaných zákazníkem pomocí veřejného trezoru klíčů

Pomocí klíčů spravovaných zákazníkem vytvoříte a spravujete vlastní službu Azure Key Vault a šifrovací klíče. Tato část ukazuje, jak nakonfigurovat klíče spravované zákazníkem pomocí veřejného trezoru klíčů.

Vytvořit klíčový trezor a klíč

  1. Vytvořte trezor klíčů s povoleným Azure RBAC.

    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. Přiřaďte si roli Crypto Officer v Key Vault pro vytvoření klíče.

    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. Vytvořte klíč v trezoru klíčů. Ujistěte se, že operace s encrypt a decrypt klíči jsou povoleny.

    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|/[^/]*$||')
    

Vytvořit uživatelsky přiřazenou spravovanou identitu

  1. Vytvořte spravovanou identitu přiřazenou uživatelem pro cluster.

    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. Přiřaďte spravované identitě požadované role.

    # 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
    

Vytvoření nového clusteru AKS s klíči spravovanými zákazníkem

Vytvořte nový cluster AKS se šifrováním KMS pomocí klíčů řízených zákazníkem.

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

Povolení klíčů spravovaných zákazníkem v existujícím clusteru

Povolte šifrování Služby správy klíčů pomocí klíčů spravovaných zákazníkem v existujícím clusteru AKS.

Poznámka:

Cluster musí používat Kubernetes verze 1.33 nebo novější.

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

Ověření konfigurace KMS

Po povolení šifrování Služby správy klíčů ověřte konfiguraci.

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

Výstup zahrnuje konfiguraci Key Management Service (KMS):

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

Migrace mezi variantami správy klíčů

Můžete migrovat mezi klíči spravovanými platformou a klíči spravovanými zákazníkem.

Migrace z klíčů spravovaných platformou na klíče spravované zákazníkem

Pokud chcete migrovat z klíčů spravovaných platformou na klíče spravované zákazníkem, nejprve nastavte trezor klíčů, klíč a spravovanou identitu, jak je popsáno v části klíče spravované zákazníkem, a pak spusťte příkaz update:

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

Migrace z klíčů spravovaných zákazníkem na klíče spravované platformou

Migrace z klíčů spravovaných zákazníkem na klíče spravované platformou:

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

Rotace klíčů

Při šifrování dat pomocí KMS probíhá rotace klíčů odlišně v závislosti na vaší možnosti správy klíčů.

  • Klíče spravované platformou: Obměně klíčů je automatická. Není vyžadována žádná akce.
  • Klíče spravované zákazníkem: Při obměně verze klíče ve službě Azure Key Vault kontroler Služby správy klíčů pravidelně zjišťuje rotaci (každých 6 hodin) a používá novou verzi klíče.

Poznámka:

Na rozdíl od starší verze prostředí Služby správy klíčů s touto novou implementací nemusíte po obměně klíčů ručně šifrovat tajné kódy. Platforma to zpracovává automaticky.