Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O fornecedor Azure Key Vault para o driver Secrets Store Container Storage Interface (CSI) permite a integração de um Azure Key Vault como um armazenamento secreto com um cluster Azure Kubernetes Service (AKS) através de um volume CSI.
Funcionalidades
- Monta segredos, chaves e certificados em um pod usando um volume CSI.
- Suporta os volumes em linha do CSI.
- Suporta a montagem de vários objetos de armazenamento de segredos como um único volume.
- Suporta portabilidade de pods com a
SecretProviderClassDefinição de Recursos Personalizados (CRD). - Suporta contêineres do Windows.
- Sincroniza com segredos do Kubernetes.
- Suporta autorotação de conteúdos montados e segredos sincronizados do Kubernetes.
Limitações
- Um contentor que usa um
ConfigMapouSecretcomosubPathsuporte de volume não recebe atualizações automáticas quando o segredo é rodado, o que é uma limitação do Kubernetes. Para que as alterações entrem em vigor, o aplicativo precisa recarregar o arquivo alterado observando as alterações no sistema de arquivos ou reiniciando o pod. Para obter mais informações, consulte Limitações conhecidas do driver CSI do Secrets Store. - O add-on cria uma identidade gerida nomeada
azurekeyvaultsecretsprovider-xxxxxno grupo de recursos de nós (MC_) e atribui-a automaticamente ao Virtual Machine Scale Set. Você pode usar essa identidade gerenciada ou sua própria identidade gerenciada para acessar o cofre de chaves. Não é possível impedir a criação da identidade.
Pré-requisitos
- Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
- Verifique se a sua versão da CLI do Azure é 2.30.0 ou posterior. Se for uma versão anterior, instale a versão mais recente.
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Terraform na versão 1.6 ou superior.
CLI do Azure instalado e início de sessão efetuado. instale a versão mais recente.
Permissões para criar recursos AKS e Key Vault.
Defina a sua subscrição do Azure na CLI do Azure com o seguinte comando. Substitua
<subscriptionId>pelo seu ID de subscrição.az account set --subscription <subscriptionId>
Rede
- Se usarem clusters isolados na rede, a recomendação é configurar um endpoint privado para aceder ao Azure Key Vault.
- Se o cluster tiver o tipo
userDefinedRoutingde saída e usar um dispositivo de firewall que possa controlar o tráfego de saída com base em nomes de domínio, como o Firewall do Azure, verifique se as regras de rede de saída e os FQDNs necessários são permitidos. - Se você estiver restringindo a Entrada ao cluster, verifique se as portas 9808 e 8095 estão abertas.
Funções
- Este artigo utiliza a função Oficial de Segredos do Cofre de Chaves para conceder à sua conta a permissão para criar um segredo no cofre de chaves.
- No artigo para fornecer acesso ao Azure Key Vault, a identidade usada com o
SecretProviderClassprecisa de Utilizador de Certificado do Key Vault para acederkeyaoscertificatede objeto, e o Utilizador de Segredos do Key Vault para acedersecretao tipo de objeto.
Criar um cluster do AKS
Crie um cluster AKS com o fornecedor Azure Key Vault para suporte ao driver CSI da Secrets Store.
Crie variáveis que sejam usadas nos comandos para criar um cluster AKS e Key Vault.
export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM") export KEYVAULT_NAME=myKeyVault${RANDOM_STRING} export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastus2Os nomes do Azure Key Vault devem ser globalmente únicos, alfanuméricos incluindo hífens e 3-24 caracteres. O nome do cofre de chave concatena o
KEYVAULT_NAMEvalor damyKeyVaultvariável com aRANDOM_STRINGcadeia de 10 caracteres da variável.Crie um grupo de recursos do Azure usando o
az group createcomando.az group create --name $RESOURCE_GROUP --location $LOCATIONCrie um cluster AKS com o provedor do Azure Key Vault para a funcionalidade do Secrets Store CSI Driver, utilizando o comando
az aks createcom o parâmetro--enable-addons azure-keyvault-secrets-provider.O
--enable-addonsparâmetro cria uma identidade gerida atribuída pelo utilizador chamadaazurekeyvaultsecretsprovider-xxxxque podes usar para autenticar no teu cofre de chaves. A identidade gerida é armazenada no grupo de recursos de nós (MC_) e é automaticamente atribuída ao Virtual Machine Scale Set. Você pode usar essa identidade gerenciada ou sua própria identidade gerenciada para acessar o cofre de chaves. Não é possível impedir a criação da identidade.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-addons azure-keyvault-secrets-provider \ --generate-ssh-keysSugestão
Se quiser usar o ID de Carga de Trabalho do Microsoft Entra, o comando
az aks createdeve incluir os parâmetros--enable-oidc-issuere--enable-workload-identity.
Criar um cluster do AKS
Crie um ficheiro main.tf com a seguinte configuração para criar um cluster AKS com Azure Key Vault fornecedor para suporte ao driver CSI da Secrets Store.
Crie a configuração do Terraform.
terraform { required_version = ">= 1.6.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} } data "azurerm_client_config" "current" {} resource "azurerm_resource_group" "rg" { name = "aks-rg" location = "East US" }Crie o cluster AKS.
resource "azurerm_kubernetes_cluster" "aks" { name = "aks-cluster" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name dns_prefix = "akscsi" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" } identity { type = "SystemAssigned" } key_vault_secrets_provider { secret_rotation_enabled = false } }Implementa a configuração. Formar uma sessão Bash, executar os seguintes comandos para implementar os recursos:
terraform init terraform validate terraform plan terraform apply
Atualizar um cluster AKS existente
Atualize um cluster AKS existente com o fornecedor Azure Key Vault para suporte ao driver CSI da Secrets Store.
Cria variáveis que são usadas nos comandos. Substitua os valores conforme necessário para atualizar o seu cluster AKS existente ou Key Vault.
Por exemplo, se estiver a usar um cofre de chaves existente, substitua o valor da variável
KEYVAULT_NAMEsem usar a variávelRANDOM_STRING.Se não tiveres um cofre de chaves, os nomes dos cofres de chaves do Azure devem ser globalmente únicos, alfanuméricos incluindo hífens, e ter entre 3 a 24 caracteres. O nome do cofre de chave concatena o
KEYVAULT_NAMEvalor damyKeyVaultvariável com aRANDOM_STRINGcadeia de 10 caracteres da variável. Pode criar o cofre de chaves mais adiante neste artigo.export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM") export KEYVAULT_NAME=myKeyVault${RANDOM_STRING} export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastus2Atualize um cluster AKS existente com o fornecedor Azure Key Vault para a capacidade Secrets Store CSI Driver usando o
az aks enable-addonscomando e ative oazure-keyvault-secrets-providercomplemento. O complemento cria uma identidade gerenciada atribuída pelo usuário que você pode usar para autenticar no cofre de chaves.az aks enable-addons \ --addons azure-keyvault-secrets-provider \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPDepois de ativares o fornecedor de segredos Azure Key Vault, o AKS cria uma identidade gerida chamada
azurekeyvaultsecretsprovider-xxxxque podes usar para autenticar no teu cofre de chaves. A identidade gerida é armazenada no grupo de recursos de nós (MC_) e é automaticamente atribuída ao Virtual Machine Scale Set. Você pode usar essa identidade gerenciada ou sua própria identidade gerenciada para acessar o cofre de chaves. Não é possível impedir a criação da identidade.
Atualizar um cluster AKS existente
Crie um ficheiro main.tf com a seguinte configuração para atualizar um cluster AKS existente com Azure Key Vault fornecedor para suporte ao driver CSI da Secrets Store.
Atualizar um cluster AKS existente.
resource "azurerm_kubernetes_cluster" "aks" { name = "<existing-cluster>" resource_group_name = "<resource-group>" key_vault_secrets_provider { secret_rotation_enabled = false } }Implementa a configuração. Formar uma sessão Bash, executar os seguintes comandos para implementar a configuração:
Run the following commands to apply the updates: terraform init terraform validate terraform plan terraform apply
Verifique a instalação do fornecedor da identidade gerida e do cofre de chaves.
Se usou o Terraform para criar um novo cluster ou atualizar um cluster existente, precisa de substituir as variáveis, como $CLUSTER_NAME nos comandos seguintes, pelos valores que usou na sua configuração do Terraform.
Verificar a identidade gerida
Use os seguintes passos para verificar se a identidade gerida foi criada e atribuída ao Virtual Machine Scale Set do cluster.
Verifique se a identidade gerida foi criada e atribuída ao cluster usando o
az aks showcomando.az aks show \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --query addonProfiles{ "azureKeyvaultSecretsProvider": { "config": { "enableSecretRotation": "false", "rotationPollInterval": "2m" }, "enabled": true, "identity": { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444", "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "resourceId": "/subscriptions/<subscriptionID>/resourcegroups/MC_myResourceGroup_myAKSCluster_eastus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/azurekeyvaultsecretsprovider-myakscluster" } } }pt-PT: A propriedade
resourceIdmostra o grupo de recursos e o nome da identidadeazurekeyvaultsecretsprovider-myakscluster.Verifique se a identidade gerida está atribuída ao Virtual Machine Scale Set do grupo de recursos de nós.
NODE_RG=$(az aks show \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --query nodeResourceGroup --output tsv) VMSS_NAME=$(az vmss list \ --resource-group $NODE_RG \ --query [].name --output tsv) az vmss show --name $VMSS_NAME --resource-group $NODE_RG --query '[id, identity]'A saída mostra o ID de recurso dos Conjuntos de Escalamento de Máquinas Virtuais
Microsoft.Compute/virtualMachineScaleSetse a propriedadeuserAssignedIdentitiescom um ID de recurso paraazurekeyvaultsecretsprovider-myaksclusterque confirma que a identidade está atribuída aos Conjuntos de Escalamento de Máquinas Virtuais.
Verifique o provedor do Azure Key Vault para a instalação do Driver CSI do Secrets Store
Obtenha as credenciais do cluster AKS usando o
az aks get-credentialscomando.az aks get-credentials \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPVerifique se a instalação está concluída usando o comando
kubectl get pods, que lista todos os pods com as etiquetassecrets-store-csi-driveresecrets-store-provider-azureno namespacekube-system.kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver,secrets-store-provider-azure)' -o wideA
-o wideflag inclui o nó em que cada pod está a funcionar na saída.Sua saída deve ser semelhante à saída de exemplo a seguir:
NAME READY STATUS RESTARTS AGE NODE aks-secrets-store-csi-driver-4vpkj 3/3 Running 2 4m25s aks-nodepool1-12345678-vmss000002 aks-secrets-store-csi-driver-ctjq6 3/3 Running 2 4m21s aks-nodepool1-12345678-vmss000001 aks-secrets-store-csi-driver-tlvlq 3/3 Running 2 4m24s aks-nodepool1-12345678-vmss000000 aks-secrets-store-provider-azure-5p4nb 1/1 Running 0 4m21s aks-nodepool1-12345678-vmss000000 aks-secrets-store-provider-azure-6pqmv 1/1 Running 0 4m24s aks-nodepool1-12345678-vmss000001 aks-secrets-store-provider-azure-f5qlm 1/1 Running 0 4m25s aks-nodepool1-12345678-vmss000002
Criar novo cofre de chaves
Executa o az keyvault create comando para criar um novo cofre de chaves com o Azure RBAC ativado.
az keyvault create \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--enable-rbac-authorization
O Azure RBAC está ativado por defeito quando crias um novo cofre de chaves, mesmo que não incluas o --enable-rbac-authorization parâmetro.
Para mais informações sobre modelos de permissões do Key Vault e Azure RBAC, consulte Fornecer acesso a chaves, certificados e segredos do Key Vault com controlo de acesso baseado em funções do Azure.
Atualizar o cofre de chaves existente
Execute o comando az keyvault update para atualizar um cofre de chaves existente com controlo de acesso baseado em funções Azure (Azure RBAC). O parâmetro --enable-rbac-authorization é necessário para ativar o Azure RBAC quando atualizar um cofre de chaves existente que tem o Azure RBAC desativado.
az keyvault update \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--enable-rbac-authorization
Para mais informações sobre modelos de permissões de cofres de chaves e Azure RBAC, consulte Fornecer acesso a chaves, certificados e segredos do Cofre de Chaves com controlo de acesso baseado em funções no Azure
Adicionar atribuição de função e chave secreta ao cofre de chaves
Executa o
az keyvault showcomando para verificar se o cofre de chaves tem o Azure RBAC ativado.az keyvault show \ --name $KEYVAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query properties.enableRbacAuthorizationA saída deve ser
true.Adicione uma atribuição de funções para a sua conta de utilizador ao escopo do cofre de chaves usando o
az role assignment createcomando, para que possa adicionar um segredo do cofre de chaves no próximo passo.O papel de Oficial de Segredos do Cofre de Chaves com identificador
b86a8fe4-44ce-4948-aee5-eccb2c155cd7único foi adicionado e pode utilizar o nome ou o identificador único. Usar o identificador único da função é uma boa prática para evitar problemas caso o nome da função mude.KEYVAULT_ID=$(az keyvault show \ --name $KEYVAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query id -o tsv) MYID=$(az ad signed-in-user show --query id --output tsv) az role assignment create \ --assignee-object-id $MYID \ --role "b86a8fe4-44ce-4948-aee5-eccb2c155cd7" \ --scope $KEYVAULT_ID \ --assignee-principal-type UserPode demorar vários minutos até que a atribuição de funções faça efeito. Pode verificar se a atribuição de funções foi criada com o seguinte comando:
az role assignment list \ --assignee-object-id $MYID \ --scope $KEYVAULT_ID \ --query '[].{Role:roleDefinitionName, Scope:scope}' \ --output tableCrie um segredo em texto simples nomeado
ExampleSecretno cofre de chaves usando oaz keyvault secret setcomando.Seu cofre de chaves pode armazenar chaves, segredos e certificados. O
valueparâmetro usa aRANDOM_STRINGvariável para criar um valor único para o segredo.az keyvault secret set \ --vault-name $KEYVAULT_NAME \ --name ExampleSecret \ --value MyAKSExampleSecret${RANDOM_STRING}Verifique se o segredo foi adicionado ao cofre de chaves usando o comando [
az keyvault secret show][az-keyvault-secret-show].az keyvault secret show --vault-name $KEYVAULT_NAME --name ExampleSecret
Criar novo cofre de chaves
Atualize o seu ficheiro main.tf para criar um novo cofre de chaves com Azure controlo de acesso baseado em funções (Azure RBAC) ativado.
Crie um novo cofre de chaves com o Azure RBAC ativado.
data "azurerm_client_config" "current" {} resource "random_string" "suffix" { length = 5 special = false upper = false } resource "azurerm_key_vault" "kv" { name = "akskv${random_string.suffix.result}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name tenant_id = data.azurerm_client_config.current.tenant_id sku_name = "standard" enable_rbac_authorization = true }Atribuir o papel de Oficial de Segredos da Key Vault.
resource "azurerm_role_assignment" "kv_role" { scope = azurerm_key_vault.kv.id role_definition_name = "Key Vault Secrets Officer" principal_id = data.azurerm_client_config.current.object_id }Crie ExampleSecret no cofre de chaves.
resource "azurerm_key_vault_secret" "example" { name = "ExampleSecret" value = "MyAKSExampleSecret" key_vault_id = azurerm_key_vault.kv.id }Implementa a configuração. Formar uma sessão Bash, executar os seguintes comandos para implementar a configuração atualizada:
terraform plan terraform applyVerify ExampleSecret foi adicionado ao cofre de chaves usando o comando [
az keyvault secret show][az-keyvault-secret-show]. Substitui<keyvault-name>pelo nome do cofre de chaves que criaste na configuração do Terraform.az keyvault secret show \ --vault-name <keyvault-name> \ --name ExampleSecret
Atualizar o cofre de chaves existente
Atualize o seu ficheiro main.tf para atualizar um cofre de chaves existente com Azure controlo de acesso baseado em funções (Azure RBAC) ativado.
Atualize o cofre de chaves existente para ativar o Azure RBAC.
resource "azurerm_key_vault" "kv" { name = "<existing-kv>" resource_group_name = "<resource-group>" enable_rbac_authorization = true }Atribua a função e adicione o segredo.
resource "azurerm_role_assignment" "kv_role" { scope = azurerm_key_vault.kv.id role_definition_name = "Key Vault Secrets Officer" principal_id = data.azurerm_client_config.current.object_id } resource "azurerm_key_vault_secret" "example" { name = "ExampleSecret" value = "MyAKSExampleSecret" key_vault_id = azurerm_key_vault.kv.id }Implementa a configuração. Formar uma sessão Bash, executar os seguintes comandos para implementar a configuração atualizada:
terraform plan terraform apply
Limpeza de recursos
Se for para o próximo artigo e precisar destes recursos, ignore os passos seguintes. Caso contrário, se já terminou e não planeia continuar para o próximo artigo, deve eliminar os recursos criados neste artigo para evitar custos desnecessários.
Remova as credenciais do seu cluster do seu ficheiro .kube/config local.
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTApague o grupo de recursos e todos os recursos dentro dele, incluindo os recursos no grupo de recursos de nós (
MC_), utilizando o comandoaz group delete.az group delete --name $RESOURCE_GROUP --yes --no-wait
O terraform destroy comando remove todos os recursos definidos na configuração atual do Terraform e no ficheiro de estado. Execute este comando apenas a partir do diretório de trabalho utilizado neste artigo.
Advertência
Se estiver a trabalhar com recursos existentes ou de produção, reveja cuidadosamente o plano de execução antes de executar:
terraform plan -destroy
Evita executar terraform destroy em infraestruturas partilhadas ou importadas, a menos que tenha a certeza de que é seguro removê-las. Para mais informações, consulte a documentação do Terraform para o comando terraform destroy.
Remova as credenciais do seu cluster do seu ficheiro .kube/config local.
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTExecute o seguinte comando para remover os recursos criados neste artigo:
terraform destroy
Próximos passos
Neste artigo, você aprendeu como usar o provedor do Cofre de Chaves do Azure para o Driver CSI do Repositório de Segredos em um cluster AKS. Agora você precisa fornecer uma identidade para acessar o Cofre da Chave do Azure. Para saber como, continue para o próximo artigo.