Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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
Utilize o ambiente Bash no Azure Cloud Shell. Para mais informações, veja Get started with Azure Cloud Shell.
Se preferir executar comandos de referência da CLI localmente, instale o CLI do Azure. Se estiver a usar Windows ou macOS, considere executar o Azure CLI num contentor Docker. Para obter mais informações, consulte 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 os passos exibidos no seu terminal. Para outras opções de entrada, consulte Autenticar no Azure usando a CLI do Azure.
Quando solicitado, instale a extensão do Azure CLI na primeira utilização. Para obter mais informações sobre extensões, consulte Usar e gerenciar extensões com a CLI do Azure.
Execute az version para descobrir 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á.
- É necessário ter a versão 19.0.0b13 ou posterior da extensão do
aks-previewAzure CLI.- Se você ainda não tiver a
aks-previewextensão, instale-a usando oaz extension addcomando.az extension add --name aks-preview - Se você já tiver a
aks-previewextensão, atualize-a para garantir que você tenha a versão mais recente usando oaz extension updatecomando.az extension update --name aks-preview
- Se você ainda não tiver a
-
kubectlFerramenta 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.
Regista a declaração da função usando o comando
az feature register.az feature register --namespace Microsoft.ContainerService --name KMSPMKPreviewVerifique o status do registro usando o
az feature showcomando. Leva alguns minutos para que o status mostre Registrado.az feature show --namespace Microsoft.ContainerService --name KMSPMKPreviewQuando 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.
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)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_IDCria 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|/[^/]*$||')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 AzureServicesO
--default-action Denyparâmetro bloqueia o acesso à rede pública, e permite--bypass AzureServicesque serviços Azure confiáveis (incluindo AKS) acedam ao cofre de chaves.
Criar uma identidade gerenciada atribuída pelo usuário
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)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
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)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_IDCria 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
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)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.