Partilhar via


Ativar a encriptação de dados KMS nos clusters do Serviço Azure Kubernetes (AKS) (Pré-visualização)

Este artigo mostra-lhe como ativar a encriptação de dados do Key Management Service (KMS) para segredos Kubernetes no Azure Kubernetes Service (AKS). A encriptação KMS encripta os segredos Kubernetes armazenados no etcd usando chaves Azure Key Vault.

O AKS suporta duas opções principais de gestão:

  • Chaves geridas pela plataforma (PMK): O AKS cria e gere automaticamente as chaves de encriptação. Esta opção proporciona a configuração mais simples com rotação automática das teclas.
  • Chaves geridas pelo cliente (CMK): Cria e gere o seu próprio Azure Key Vault e chaves de encriptação. Esta opção oferece controlo total sobre o ciclo de vida das chaves e cumpre os requisitos de conformidade que exigem chaves geridas pelo cliente.

Para mais informações sobre conceitos de encriptação e opções de chave, consulte Conceitos de encriptação de dados em repouso para AKS.

Importante

Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

Pré-requisitos

  • Este artigo requer a versão 2.73.0 ou posterior da CLI do Azure. Se você estiver usando o Azure Cloud Shell, a versão mais recente já está instalada lá.
  • É necessário ter a versão 19.0.0b13 ou posterior da extensão do aks-preview Azure CLI.
    • Se você ainda não tiver a aks-preview extensão, instale-a usando o az extension add comando.
      az extension add --name aks-preview
      
    • Se você já tiver a aks-preview extensão, atualize-a para garantir que você tenha a versão mais recente usando o az extension update comando.
      az extension update --name aks-preview
      
  • kubectl Ferramenta CLI instalada.

Registrar o sinalizador de recurso

Para utilizar a encriptação de dados KMS com chaves geridas pela plataforma, registe o sinalizador de funcionalidade KMSPMKPreview na sua subscrição.

  1. Regista a declaração da função usando o comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. Verifique o status do registro usando o az feature show comando. Leva alguns minutos para que o status mostre Registrado.

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. Quando o estado mostrar Registado, atualize o registo do recurso fornecedor Microsoft.ContainerService usando o comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Configurar variáveis de ambiente

Configura variáveis de ambiente para a tua implementação. Substitui os valores provisórios pelos teus próprios.

# 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

Ativar a encriptação de chaves gerida pela plataforma

Com chaves geridas pela plataforma, o AKS cria e gere automaticamente o Azure Key Vault e as chaves de encriptação. A rotação das chaves é gerida automaticamente pela plataforma.

Crie um novo cluster AKS com chaves geridas pela plataforma

Crie um novo cluster AKS com encriptação KMS usando chaves geridas pela plataforma.

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

Ativar chaves geridas pela plataforma num cluster existente

Ative a encriptação KMS com chaves geridas pela plataforma num cluster AKS existente.

Observação

O cluster deve estar a correr Kubernetes versão 1.33 ou posterior.

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

Ative a encriptação de chaves gerida pelo cliente com um cofre de chave privada

Para maior segurança, pode usar um cofre de chaves privadas que tenha o acesso à rede pública desativado. O AKS acede ao cofre de chaves privadas através da exceção do firewall de serviços de confiança. Esta secção mostra como configurar chaves geridas pelo cliente com um cofre de chaves privadas.

Crie um cofre de chaves e uma chave com acesso a serviços de confiança

Observação

Esta secção ilustra a criação de um cofre de chaves com acesso público à rede inicialmente, seguido pela ativação do firewall com bypass de serviços confiáveis. Esta abordagem é apenas para fins ilustrativos. Em ambientes de produção, deves criar e gerir o teu cofre de chaves como privado desde o início. Para orientações sobre a gestão de cofres de chaves privadas, consulte a segurança de rede do Azure Key Vault.

  1. Crie um cofre de chaves com o Azure RBAC ativado.

    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. Atribui a ti próprio o papel de Oficial de Cripto do Cofre de Chaves para criar uma chave.

    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. Cria uma chave no cofre de chaves.

    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. Ativa o firewall do cofre de chaves com exceção para serviços de confiança.

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

    O --default-action Deny parâmetro bloqueia o acesso à rede pública, e permite --bypass AzureServices que serviços Azure confiáveis (incluindo AKS) acedam ao cofre de chaves.

Criar uma identidade gerenciada atribuída pelo usuário

  1. Crie uma identidade gerida atribuída pelo utilizador para o 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. Atribuir as funções necessárias à identidade gerida.

    # 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
    

Criar um novo cluster AKS com chaves geridas pelo cliente (privado)

Crie um novo cluster AKS com encriptação KMS usando chaves geridas pelo cliente com um cofre de chaves privadas.

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

Ativar chaves geridas pelo cliente num cluster existente (privado)

Ative a encriptação KMS com chaves geridas pelo cliente usando um cofre de chaves privadas num cluster AKS existente.

Observação

O cluster deve estar a correr Kubernetes versão 1.33 ou posterior.

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

Ative a encriptação de chaves geridas pelo cliente com um cofre de chave pública

Com chaves geridas pelo cliente, cria e gere o seu próprio Azure Key Vault e chaves de encriptação. Esta secção mostra como configurar chaves geridas pelo cliente com um cofre de chaves públicas.

Criar um cofre de chaves e uma chave

  1. Crie um cofre de chaves com o Azure RBAC ativado.

    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. Atribui a ti próprio o papel de Oficial de Cripto do Cofre de Chaves para criar uma chave.

    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. Cria uma chave no cofre de chaves.

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

Criar uma identidade gerenciada atribuída pelo usuário

  1. Crie uma identidade gerida atribuída pelo utilizador para o 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. Atribua as funções necessárias à identidade gerida.

    # 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
    

Crie um novo cluster AKS com chaves geridas pelo cliente

Crie um novo cluster AKS com encriptação KMS usando chaves geridas pelo cliente.

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

Ativar chaves geridas pelo cliente num cluster existente

Ative a encriptação KMS com chaves geridas pelo cliente num cluster AKS existente.

Observação

O cluster deve estar a correr Kubernetes versão 1.33 ou posterior.

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

Verificar configuração do KMS

Depois de ativar a encriptação KMS, verifique a configuração.

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

A saída inclui a configuração 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"
    }
}

Migrar entre opções de gerenciamento de chaves

Pode migrar entre chaves geridas pela plataforma e chaves geridas pelo cliente.

Migrar de chaves geridas pela plataforma para chaves geridas pelo cliente

Para migrar de chaves geridas pela plataforma para chaves geridas pelo cliente, configure primeiro o cofre de chaves, a chave e a identidade gerida conforme descrito na secção de chaves geridas pelo cliente, depois execute o comando 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

Migrar de chaves geridas pelo cliente para chaves geridas pela plataforma

Para migrar de chaves geridas pelo cliente para chaves geridas pela plataforma:

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

Rotação de chaves

Com a encriptação de dados KMS, a rotação de chaves é gerida de forma diferente consoante a sua opção de gestão de chaves:

  • Chaves geridas pela plataforma: A rotação das chaves é automática. Não é necessária qualquer ação.
  • Chaves geridas pelo cliente: Quando faz a rotação da versão da chave no Azure Key Vault, o controlador KMS detecta a rotação periodicamente (a cada seis horas) e usa a nova versão da chave.

Observação

Ao contrário da experiência antiga do KMS, com esta nova implementação não precisa de re-encriptar manualmente os segredos após a rotação da chave. A plataforma trata disto automaticamente.