Compartilhar via


Aplicativos, chaves de API e segredos do Azure Key Vault

O Azure Key Vault é um serviço do Azure que protege chaves criptográficas, segredos e certificados. Ele fornece um repositório centralizado, seguro e altamente disponível para informações confidenciais, como chaves de API. Um método para evitar a prática insegura de incorporar chaves de API diretamente no código-fonte do seu aplicativo é configurar seu aplicativo para interagir com segurança com chaves de API armazenadas no Azure Key Vault.

Nesse artigo, você aprenderá como criar uma instância do Key Vault, adicionar uma chave de API como um segredo para esse key vault e, em seguida, configurar o key vault usando as práticas recomendadas. Essas práticas recomendadas incluem restringir o acesso usando o controle de acesso baseado em função (RBAC), habilitar o monitoramento e restringir o acesso à rede.

Criando e protegendo uma instância do Azure Key Vault

O Azure Key Vault permite que você armazene com segurança chaves criptográficas, segredos e certificados. Você deve implantar cofres de chaves separados para diferentes ambientes (desenvolvimento, preparação, produção) e aplicativos.

Crie um grupo de recursos e uma instância do cofre de chaves

Para criar uma instância do Key Vault, você pode usar o seguinte comando do CLI do Azure ou do Azure Cloud Shell:

  1. Use o comando az group create para criar um grupo de recursos:

    az group create --name myResourceGroup --location eastus
    

    Você poderá alterar "eastus" para um local mais próximo de você, se preferir.

  2. Use az keyvault create para criar o cofre de chaves:

    az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
    

    Substitua <your-unique-keyvault-name> por um nome que seja exclusivo em todo o Azure. Normalmente, você usa o nome pessoal ou da empresa junto com outros números e identificadores.

Adicione uma chave de API ao Azure Key Vault como um segredo

Depois de criar a instância do Azure Key Vault, você pode adicionar uma chave de API como um segredo para essa instância do Azure Key Vault.

O seguinte usa o comando CLI do Azure conjunto secreto az keyvault para adicionar um segredo chamado MyApiKey ao keyvault e define o segredo para expirar após 180 dias:

az keyvault secret set \
    --vault-name "<YourKeyVaultName>" \
    --name "MyApiKey" \
    --value "<YourSecretValue>"
    --expires "$(date -u -d '+180 days' +'%Y-%m-%dT%H:%M:%SZ')"

Você deve tentar rotacionar suas chaves de API periodicamente. Dependendo das necessidades de segurança da sua organização, você pode optar por rotacionar as chaves com mais ou menos frequência do que a cada 180 dias. Você pode configurar uma assinatura do Grade de Eventos do Azure para o evento "SecretNearExpiry" como um método de receber notificações sobre segredos de chaves de API prestes a expirar.

Restringir o acesso ao Key Vault usando RBAC

Você pode restringir o acesso à instância do Azure Key Vault para que somente a identidade do aplicativo tenha acesso ao Azure Key Vault.

Para fazer isso, configure uma função de Controle de Acesso Baseado em Função (RBAC) usando o comando Azure CLI az atribuição de função criar:

az role assignment create --role "Key Vault Secrets User" \
  --assignee <object-id-of-app-or-user> \
  --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<key-vault-name>

Habilitar registro e alertas do Key Vault

Você deve habilitar o registro e os alertas na sua instância do Key Vault como um método de detecção de atividades potencialmente suspeitas.

Para habilitar o registro e os alertas do Azure Key Vault, use o comando az monitor diagnóstico-configurações criar da CLI do Azure:

az monitor diagnostic-settings create \
    --name myDiagnosticSettings \
    --resource {key-vault-resource-id} \
    --logs '[{"category": "AuditEvent","enabled": true}]' \
    --workspace {log-analytics-workspace-id}

Esse comando cria uma configuração de diagnóstico chamada myDiagnosticSettings, configura-a para o Azure Key Vault especificado, habilita a categoria de log AuditEvent, que rastreia eventos relacionados à segurança e ao acesso e envia os logs para o espaço de trabalho do Log Analytics especificado para monitoramento, análise e alerta. Isso permite que você monitore padrões de acesso, detecte tentativas de acesso não autorizado e configure alertas para eventos críticos de segurança (por exemplo, alguém tenta acessar um segredo sem as permissões corretas).

Você pode executar o comando az monitor consulta programada criar da CLI do Azure para monitorar logs no espaço de trabalho especificado do Log Analytics em busca de tentativas de acesso não autorizado aos segredos do Azure Key Vault e disparar um alerta se qualquer tentativa de acesso não autorizado correspondente for detectada:

az monitor scheduled-query create \
    --name "Suspicious Access Alert" \
    --resource-group myResourceGroup \
    --scopes {log-analytics-workspace-resource-id} \
    --condition "AzureDiagnostics | where ResourceType == 'VAULTS' | where OperationName == 'SecretGet' | where ResultSignature == 'Unauthorized'"

Restringir o acesso de rede ao Key Vault

Você deve restringir o acesso de rede ao Azure Key Vault para que o cofre aceite apenas solicitações de locais de rede conhecidos. Há dois métodos gerais que você pode usar para fazer isso:

  • Link Privado do Azure. Isso cria um ponto de extremidade privado dentro da sua rede virtual, permitindo que seu aplicativo se conecte ao Azure Key Vault sem atravessar a Internet pública. Essa opção é a mais segura, pois o tráfego permanece dentro da sua rede, mas requer a criação de um ponto de extremidade privado e a configuração do DNS.
  • Regras de Firewall. Você pode configurar as configurações de firewall do Azure Key Vault, localizadas em Redes, com uma lista de intervalos de IP permitidos. Você também pode usar esse método para permitir acesso a redes virtuais existentes, mas isso requer que você habilite um ponto de extremidade de serviço para Microsoft.KeyVault na sub-rede selecionada.

Você pode criar um ponto de extremidade privado usando o comando Azure CLI az rede privada-ponto de extremidade criar:

az network private-endpoint create \
    --name myPrivateEndpoint \
    --resource-group myResourceGroup \
    --vnet-name myVNet \
    --subnet mySubnet \
    --private-connection-resource-id /subscriptions/{subscription}/resourceGroups/{rg}/providers/Microsoft.KeyVault/vaults/{key-vault-name} \
    --group-id vault \
    --connection-name myConnection

You can create firewall rules on the Azure Key Vault instance using the Azure CLI [az keyvault network-rule add](/cli/azure/keyvault/network-rule#az-keyvault-network-rule-add) command, substituting the appropriate key vault names, resource groups, subnet, and subnet mask information:

```azurecli
az keyvault network-rule add \
    --name {key-vault-name} \
    --resource-group myResourceGroup \
    --ip-address {trusted-ip-address}/32

O Azure Key Vault aplica HTTPS para todas as comunicações. Isso garante que suas chaves de API e outros dados confidenciais sejam criptografados em trânsito, protegendo-os contra espionagem e ataques do tipo man-in-the-middle.

Interaja com o Azure Key Vault usando Python

Para interagir com o Azure Key Vault usando Python, instale a biblioteca de identidades do Azure para o Microsoft Entra ID e a biblioteca de segredos do Azure Key Vault:

pip install azure-identity
pip install azure-keyvault-secrets

Você pode usar a biblioteca de clientes do Azure Identity e do Azure Key Vault Secrets para gerenciar segredos programaticamente:

from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

key_vault_name = "<your-key-vault-name>"
KVUri = f"https://{key_vault_name}.vault.azure.net"
secret_name = "<your-secret-name>"

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)

retrieved_secret = client.get_secret(secret_name)

# Now you can use the API key:

api_key = retrieved_secret.value
print(f"The API key is: {api_key}")

Nesse código de exemplo:

  • DefaultAzureCredential: essa classe tenta autenticar usando vários métodos (variáveis ​​de ambiente, identidades gerenciadas, etc.), tornando-a adequada para diferentes ambientes do Azure.
  • SecretClient: Essa classe fornece métodos para interagir com segredos no Key Vault.
  • get_secret(): Recupera o segredo do Key Vault.

Próximas etapas