Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo mostra como habilitar a criptografia de dados KMS (Serviço de Gerenciamento de Chaves) para segredos do Kubernetes no AKS (Serviço de Kubernetes do Azure). A criptografia KMS criptografa segredos do Kubernetes armazenados em etcd usando chaves do Azure Key Vault.
O AKS dá suporte a duas opções de gerenciamento de chaves:
- PMK (chaves gerenciadas pela plataforma): o AKS cria e gerencia automaticamente as chaves de criptografia. Essa opção fornece a configuração mais simples com rotação automática de chaves.
- CMK (chaves gerenciadas pelo cliente): crie e gerencie seu próprio Azure Key Vault e chaves de criptografia. Essa opção fornece controle total sobre o ciclo de vida da chave e atende aos requisitos de conformidade que exigem chaves gerenciadas pelo cliente.
Para obter mais informações sobre conceitos de criptografia e opções de chave, consulte Os conceitos de criptografia de dados em repouso para o AKS.
Importante
As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
Pré-requisitos
Utilize o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Introdução ao Azure Cloud Shell.
Se você preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se você estiver executando no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se você estiver usando uma instalação local, entre na CLI do Azure usando o comando az login . Para concluir o processo de autenticação, siga as etapas exibidas em seu terminal. Para obter outras opções de entrada, consulte Autenticar no Azure usando a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar e gerenciar extensões com a CLI do Azure.
Execute o comando az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade.
- 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á.
- Você precisa da extensão Azure CLI na versão 19.0.0b13 ou posterior.
- Se você ainda não tem a extensão
aks-preview, instale-a usando o comandoaz extension add.az extension add --name aks-preview - Se você já tem a extensão
aks-preview, atualize-a para garantir que você tenha a última versão usando o comandoaz extension update.az extension update --name aks-preview
- Se você ainda não tem a extensão
-
kubectlFerramenta de Interface de Linha de Comando (CLI) instalada.
Registrar o sinalizador de recurso
Para usar a criptografia de dados KMS com chaves gerenciadas pela plataforma, registre o sinalizador de recurso KMSPMKPreview em sua assinatura.
Registre o sinalizador de recurso usando o comando
az feature register.az feature register --namespace Microsoft.ContainerService --name KMSPMKPreviewVerifique o status do registro usando o comando
az feature show. Demora alguns minutos para o status mostrar Registrado.az feature show --namespace Microsoft.ContainerService --name KMSPMKPreviewQuando o status mostrar Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o
az provider registercomando.az provider register --namespace Microsoft.ContainerService
Configurar variáveis de ambiente
Configure variáveis de ambiente para sua implantação. Substitua os valores de espaço reservado pelos seus 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
Habilitar a criptografia de chave gerenciada pela plataforma
Com chaves gerenciadas pela plataforma, o AKS cria e gerencia automaticamente o Azure Key Vault e as chaves de criptografia. A rotação de chaves é tratada automaticamente pela plataforma.
Criar um novo cluster do AKS com chaves gerenciadas por plataforma
Crie um novo cluster do AKS com criptografia KMS usando chaves gerenciadas pela plataforma.
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kubernetes-version 1.33.0 \
--kms-infrastructure-encryption Enabled \
--generate-ssh-keys
Habilitar chaves gerenciadas por plataforma em um cluster existente
Habilite a criptografia KMS com chaves gerenciadas pela plataforma em um cluster do AKS existente.
Observação
O cluster deve estar executando o Kubernetes versão 1.33 ou posterior.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled
Habilitar a criptografia de chave gerenciada pelo cliente com um cofre de chaves privado
Para segurança aprimorada, você pode usar um cofre de chaves privado que tem acesso à rede pública desabilitado. O AKS acessa o cofre de chaves privado usando a exceção de firewall de serviços confiáveis. Esta seção mostra como configurar chaves gerenciadas pelo cliente com um cofre de chaves privado.
Criar um cofre de chaves e uma chave com acesso a serviços confiáveis
Observação
Esta seção ilustra a criação de um cofre de chaves com acesso inicial à rede pública e, em seguida, a habilitação do firewall com exceção para serviços confiáveis. Essa abordagem é apenas para fins ilustrativos. Em ambientes de produção, você deve criar e gerenciar seu cofre de chaves como privado desde o início. Para obter diretrizes sobre como gerenciar cofres de chaves privados, consulte a segurança de rede do Azure Key Vault.
Crie um cofre de chaves com o RBAC do Azure habilitado.
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)Atribua a si mesmo a função de Diretor de Criptografia do Key Vault 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_IDCrie 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|/[^/]*$||')Habilite o firewall do cofre de chaves com bypass de serviços confiáveis.
az keyvault update \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --default-action Deny \ --bypass AzureServicesO
--default-action Denyparâmetro bloqueia o acesso à rede pública e o--bypass AzureServicesparâmetro permite que serviços confiáveis do Azure (incluindo o AKS) acessem o cofre de chaves.
Criar uma identidade gerenciada atribuída ao usuário
Crie uma identidade gerenciada atribuída pelo usuário 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)Atribua as funções necessárias à identidade gerenciada.
# 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 cluster do AKS com chaves gerenciadas pelo cliente (privadas)
Crie um novo cluster do AKS com criptografia KMS usando chaves gerenciadas pelo cliente com um cofre de chaves privado.
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
Habilitar chaves gerenciadas pelo cliente em um cluster existente (privado)
Habilite a criptografia KMS com chaves gerenciadas pelo cliente usando um cofre de chaves privado em um cluster do AKS existente.
Observação
O cluster deve estar executando o 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
Habilitar a criptografia de chave gerenciada pelo cliente com um cofre de chaves público
Com chaves gerenciadas pelo cliente, você cria e gerencia seu próprio Azure Key Vault e chaves de criptografia. Esta seção mostra como configurar chaves gerenciadas pelo cliente com um cofre de chaves público.
Criar um cofre de chaves e uma chave
Crie um cofre de chaves com o RBAC do Azure habilitado.
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)Atribua a si mesmo a função de Diretor de Criptografia do Key Vault 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_IDCrie 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 ao usuário
Crie uma identidade gerenciada atribuída pelo usuário 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)Atribua as funções necessárias à identidade gerenciada.
# 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 cluster do AKS com chaves gerenciadas pelo cliente
Crie um novo cluster do AKS com criptografia KMS usando chaves gerenciadas 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
Habilitar chaves gerenciadas pelo cliente em um cluster existente
Habilite a criptografia KMS com chaves gerenciadas pelo cliente em um cluster do AKS existente.
Observação
O cluster deve estar executando o 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 a configuração do KMS
Depois de habilitar a criptografia 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
Você pode migrar entre chaves gerenciadas pela plataforma e chaves gerenciadas pelo cliente.
Migrar de chaves gerenciadas pela plataforma para chaves gerenciadas pelo cliente
Para migrar de chaves gerenciadas pela plataforma para chaves gerenciadas pelo cliente, primeiro configure o cofre de chaves, a chave e a identidade gerenciada conforme descrito na seção chaves gerenciadas pelo cliente e execute o comando de atualização:
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 gerenciadas pelo cliente para chaves gerenciadas pela plataforma
Para migrar de chaves gerenciadas pelo cliente para chaves gerenciadas pela plataforma:
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled \
--disable-azure-keyvault-kms
Alteração de chaves
Com a criptografia de dados KMS, a rotação de chaves é tratada de forma diferente dependendo da opção de gerenciamento de chaves:
- Chaves gerenciadas pela plataforma: a rotação de chaves é automática. Nenhuma ação é necessária.
- Chaves gerenciadas pelo cliente: quando você gira a versão da chave no Azure Key Vault, o controlador KMS detecta a rotação periodicamente (a cada 6 horas) e usa a nova versão da chave.
Observação
Ao contrário da experiência herdada do KMS, com essa nova implementação, você não precisa criptografar manualmente os segredos após a rotação de chaves. A plataforma lida com isso automaticamente.