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.
O provedor do Azure Key Vault para o Driver CSI (Interface de Armazenamento de Contêiner) do repositório de segredos permite a integração de um Azure Key Vault como um repositório de segredos a um cluster do AKS (Serviço de Kubernetes do Azure) por meio de um volume de CSI.
Recursos
- Monta segredos, chaves e certificados em um pod usando um volume de CSI.
- Dá suporte a volumes em linha de CSI.
- Dá suporte à montagem de vários objetos de armazenamento de segredos como um único volume.
- É compatível com a portabilidade de pods com a
SecretProviderClassCRD (Definição de Recurso Personalizado). - Dá suporte a contêineres do Windows.
- Sincroniza com segredos do Kubernetes.
- Dá suporte à rotação automática de conteúdo montado e segredos do Kubernetes sincronizados
Limitações
- Um contêiner usando um
ConfigMapou umSecretcomo um ponto de montagem de volumesubPathnão recebe atualizações automáticas quando o segredo é rotacionado, 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, confira Limitações conhecidas do Driver CSI do Repositório de Segredos. - O complemento cria uma identidade gerenciada chamada
azurekeyvaultsecretsprovider-xxxxxno grupo de recursos do nó (MC_) e a atribui automaticamente ao Conjunto de Dimensionamento de Máquinas Virtuais. Você pode usar essa identidade gerenciada ou sua própria identidade gerenciada para acessar o cofre de chaves. Não há suporte para impedir a criação da identidade.
Pré-requisitos
- Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
- Verifique se sua versão da CLI do Azure é 2.30.0 ou posterior. Se ela for uma versão anterior, instale a última versão.
Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Terraform na versão 1.6 ou superior.
CLI do Azure instalado e conectado. instale a versão mais recente.
Permissões para criar os recursos AKS e Key Vault.
Defina sua assinatura Azure no CLI do Azure com o comando a seguir. Substitua
<subscriptionId>por sua ID da assinatura.az account set --subscription <subscriptionId>
Rede
- Se estiver usando clusters isolados de rede, a recomendação é configurar o ponto de extremidade privado para acessar o 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 FQDNs necessárias são permitidas. - Se você estiver restringindo a Entrada ao cluster, verifique se as portas 9808 e 8095 estão abertas.
Funções
- Este artigo usa a função Responsável pelos Segredos do Key Vault para conceder à sua conta 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 da função Usuário de certificado do Key Vault para acessarkeyoucertificatetipos de objeto e Usuário de Segredos do Key Vault para acessarsecrettipo de objeto.
Criar um cluster do AKS
Crie um cluster AKS com o provedor Azure Key Vault para suporte ao Secrets Store CSI Driver.
Crie variáveis usadas nos comandos para criar um cluster do AKS e o 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 exclusivos, alfanuméricos, incluindo hifens e 3 a 24 caracteres. O nome do cofre de chaves concatena o valor da variável
KEYVAULT_NAMEmyKeyVaultcom o valorRANDOM_STRINGe a string de 10 caracteres da variável.Crie um grupo de recursos do Azure usando o comando
az group create.az group create --name $RESOURCE_GROUP --location $LOCATIONCrie um cluster AKS com o fornecedor Azure Key Vault para a capacidade do Secrets Store CSI Driver utilizando o
az aks createcomando com o--enable-addons azure-keyvault-secrets-providerparâmetro.O
--enable-addonsparâmetro cria uma identidade gerenciada atribuída pelo usuário chamadaazurekeyvaultsecretsprovider-xxxxque você pode usar para autenticar-se no cofre de chaves. A identidade gerenciada é armazenada no grupo de recursos do nó (MC_) e atribuída automaticamente ao Conjunto de Dimensionamento de Máquinas Virtuais. Você pode usar essa identidade gerenciada ou sua própria identidade gerenciada para acessar o cofre de chaves. Não há suporte para impedir a criação da identidade.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-addons azure-keyvault-secrets-provider \ --generate-ssh-keysDica
Se você quiser usar a ID da Carga de Trabalho do Microsoft Entra, o comando
az aks createdeverá incluir os parâmetros--enable-oidc-issuere--enable-workload-identity.
Criar um cluster do AKS
Crie um arquivo main.tf com a configuração a seguir para criar um cluster AKS com o provedor Azure Key Vault para suporte ao CSI Driver para o 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 do 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 } }Implante a configuração. Forme uma sessão bash, execute os seguintes comandos para implantar os recursos:
terraform init terraform validate terraform plan terraform apply
Atualizar um cluster de AKS existente
Atualize um cluster do AKS existente com o provedor do Azure Key Vault para dar suporte ao Secrets Store CSI Driver.
Crie variáveis usadas nos comandos. Substitua os valores conforme necessário para atualizar o cluster do AKS existente ou o Key Vault.
Por exemplo, se você estiver usando um cofre de chaves existente, substitua o valor da variável
KEYVAULT_NAMEsem usar a variávelRANDOM_STRING.Se você não tiver um cofre de chaves, os nomes do Azure Key Vault deverão ser globalmente exclusivos, alfanuméricos, incluindo hifens e 3 a 24 caracteres. O nome do cofre de chaves concatena o valor da variável
KEYVAULT_NAMEmyKeyVaultcom o valorRANDOM_STRINGe a string de 10 caracteres da variável. Você 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 do AKS existente com a capacidade do provedor do Azure Key Vault para o Driver CSI do Repositório de Segredos, usando o comando
az aks enable-addonscom e habilite o complementoazure-keyvault-secrets-provider. O complemento cria uma identidade gerenciada atribuída pelo usuário que você pode usar para se autenticar no seu cofre de chaves.az aks enable-addons \ --addons azure-keyvault-secrets-provider \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPDepois de habilitar o provedor de segredo do Azure Key Vault, o AKS cria uma identidade gerenciada chamada
azurekeyvaultsecretsprovider-xxxxque você pode usar para autenticação no cofre de chaves. A identidade gerenciada é armazenada no grupo de recursos do nó (MC_) e atribuída automaticamente ao Conjunto de Dimensionamento de Máquinas Virtuais. Você pode usar essa identidade gerenciada ou sua própria identidade gerenciada para acessar o cofre de chaves. Não há suporte para impedir a criação da identidade.
Atualizar um cluster de AKS existente
Crie um arquivo main.tf com a configuração a seguir para atualizar um cluster AKS existente com o provedor do Azure Key Vault para suporte ao Driver CSI do 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 } }Implante a configuração. Forme uma sessão bash, execute os seguintes comandos para implantar a configuração:
Run the following commands to apply the updates: terraform init terraform validate terraform plan terraform apply
Verifique a instalação da identidade gerenciada e do provedor do cofre de chaves
Se você usou o Terraform para criar um cluster ou atualizar um cluster existente, precisará substituir as variáveis, como $CLUSTER_NAME nos comandos a seguir, pelos valores usados na configuração do Terraform.
Verificar a identidade gerenciada
Siga as etapas seguintes para verificar se a identidade gerenciada foi criada e atribuída ao Conjunto de Escala de Máquinas Virtuais do cluster.
Verifique se a identidade gerenciada 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" } } }A
resourceIdpropriedade mostra o grupo de recursos e o nomeazurekeyvaultsecretsprovider-myaksclusterda identidade.Verifique se a identidade gerenciada está atribuída ao Conjunto de Dimensionamento de Máquinas Virtuais do grupo de recursos do nó.
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 do recurso dos Conjuntos de Dimensionamento de Máquinas Virtuais
Microsoft.Compute/virtualMachineScaleSetse a propriedadeuserAssignedIdentitiescom a ID de recurso paraazurekeyvaultsecretsprovider-myaksclusterque confirma que a identidade está atribuída ao Conjunto de Dimensionamento de Máquinas Virtuais.
Verificar o provedor do Azure Key Vault para a instalação do Driver do CSI do Armazenamento de Segredos
Obtenha as credenciais de cluster do AKS usando o comando
az aks get-credentials.az aks get-credentials \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPVerifique se a instalação foi concluída usando o comando
kubectl get pods, que lista todos os pods com os rótulossecrets-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 wideO sinalizador
o wideinclui o nó em que cada pod está sendo executado na saída.Seu resultado deve ser semelhante ao seguinte exemplo de saída:
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 um novo cofre de chaves
Execute o az keyvault create comando para criar um novo cofre de chaves com o RBAC do Azure habilitado.
az keyvault create \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--enable-rbac-authorization
O RBAC do Azure é habilitado por padrão quando você cria um novo cofre de chaves, mesmo que não inclua o --enable-rbac-authorization parâmetro.
Para obter mais informações sobre modelos de permissão do Key Vault e Azure RBAC, consulte Fornecer acesso às chaves, certificados e segredos do Key Vault com um controle de acesso baseado em função do Azure.
Atualizar o cofre de chaves existente
Execute o comando az keyvault update para atualizar um cofre de chaves existente com controle de acesso baseado em função do Azure (Azure RBAC). O parâmetro --enable-rbac-authorization é necessário para ativar o Azure RBAC quando você atualizar um cofre de chaves existente que tem Azure RBAC desabilitado.
az keyvault update \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--enable-rbac-authorization
Para obter mais informações sobre modelos de permissão do cofre de chaves e RBAC do Azure, consulte Fornecer acesso a chaves, certificados e segredos do Key Vault com um controle de acesso baseado em função do Azure
Adicionar atribuição de função e segredo ao cofre de chaves
Execute o
az keyvault showcomando para verificar se o cofre de chaves tem o RBAC do Azure habilitado.az keyvault show \ --name $KEYVAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query properties.enableRbacAuthorizationA saída deve ser
true.Adicione uma atribuição de função para sua conta de usuário ao escopo do cofre de chaves usando o
az role assignment createcomando para que você possa adicionar um segredo do cofre de chaves na próxima etapa.A função Responsável pelos Segredos do Key Vault com identificador exclusivo
b86a8fe4-44ce-4948-aee5-eccb2c155cd7é adicionada e você pode usar o nome ou o identificador exclusivo. Usar o identificador exclusivo da função é uma prática recomendada para evitar problemas se o nome das funções for alterado.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 levar vários minutos para que a atribuição de função entre em vigor. Você pode verificar se a atribuição de função 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 de texto sem formatação 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 exclusivo 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
az keyvault secret showcomando.az keyvault secret show --vault-name $KEYVAULT_NAME --name ExampleSecret
Criar um novo cofre de chaves
Atualize o arquivo main.tf para criar um novo cofre de chaves com Azure controle de acesso baseado em função (Azure RBAC) habilitado.
Crie um novo cofre de chaves com Azure RBAC habilitado.
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 a função de Oficial de Segredos do 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 }Implante a configuração. Forme uma sessão bash, execute os seguintes comandos para implantar a configuração atualizada:
terraform plan terraform applyVerifique se ExampleSecret foi adicionado ao cofre de chaves usando o
az keyvault secret showcomando. Substitua<keyvault-name>pelo nome do cofre de chaves que você criou na configuração do Terraform.az keyvault secret show \ --vault-name <keyvault-name> \ --name ExampleSecret
Atualizar o cofre de chaves existente
Atualize o arquivo main.tf para atualizar um cofre de chaves existente com Azure controle de acesso baseado em função (Azure RBAC) habilitado.
Atualize o cofre de chaves existente para habilitar Azure RBAC.
resource "azurerm_key_vault" "kv" { name = "<existing-kv>" resource_group_name = "<resource-group>" enable_rbac_authorization = true }Atribuir função e adicionar 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 }Implante a configuração. Forme uma sessão bash, execute os seguintes comandos para implantar a configuração atualizada:
terraform plan terraform apply
Limpar os recursos
Se você estiver indo para o próximo artigo e precisar desses recursos, ignore as etapas a seguir. Caso contrário, se você terminar e não planeja continuar para o próximo artigo, deverá excluir os recursos criados neste artigo para evitar custos desnecessários.
Remova as credenciais do cluster do arquivo .kube/config local.
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTExclua o grupo de recursos e todos os recursos dentro dele, incluindo recursos no grupo de recursos do nó (
MC_) usando 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 do Terraform atual e no arquivo de estado. Execute este comando somente no diretório de trabalho usado para este artigo.
Aviso
Se você estiver trabalhando com recursos existentes ou de produção, examine o plano de execução cuidadosamente antes de executar:
terraform plan -destroy
Evite executar terraform destroy em uma infraestrutura compartilhada ou importada, a menos que tenha certeza de que é seguro remover. Para obter mais informações, consulte a documentação do Terraform para o comando terraform destroy .
Remova as credenciais do cluster do arquivo .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óximas etapas
Neste artigo, você aprendeu a usar o provedor do Azure Key Vault para o Driver do CSI do Armazenamento de Segredos com um cluster do AKS. Agora, você precisa fornecer uma identidade para acessar o Azure Key Vault. Para saber como, prossiga para o próximo artigo.