Partilhar 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 de 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 Cofre de Chaves do Azure.

Neste artigo, você aprenderá a criar uma instância do Cofre de Chaves, adicionar uma chave de API como um segredo a esse cofre de chaves e, em seguida, configurar o cofre de chaves usando as práticas recomendadas. Essas práticas recomendadas incluem restringir o acesso usando o RBAC (controle de acesso baseado em função), habilitar o monitoramento e restringir o acesso à rede.

Criando e protegendo uma instância do Azure Key Vault

O Azure Key Vault permite armazenar 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.

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

Para criar uma instância do cofre de chaves, você pode usar o seguinte comando da CLI do Azure ou do Azure Cloud Shell:

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

    az group create --name myResourceGroup --location eastus
    

    Você pode mudar "eastus" para um local mais perto 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 exclusivo em todo o Azure. Normalmente, utiliza o seu nome pessoal ou da empresa juntamente com outros números e identificadores.

Adicionar uma chave de API ao Cofre de Chaves do Azure como um segredo

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

O seguinte usa o comando Azure CLI az keyvault secret set 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 procurar girar suas chaves de API periodicamente. Dependendo das necessidades de segurança da sua organização, pode optar por rodar as chaves com mais ou menos frequência do que a cada 180 dias. Você pode configurar uma assinatura de Grade de Eventos para o evento "SecretNearExpiry" como um método de receber notificações sobre segredos de chave de API expirando.

Restringir o acesso ao Cofre da Chave usando o RBAC

Você pode restringir o acesso à instância do Cofre da Chave do Azure para que apenas a identidade do aplicativo tenha acesso ao Cofre da Chave do Azure.

Para fazer isso, configure uma função RBAC (Controle de Acesso Baseado em Função) usando o comando azur role assignment create da CLI do Azure:

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>

Ativar o registo e alertas do Cofre da Chave

Você deve habilitar o registro em log e os alertas na instância do Cofre da Chave como um método para detetar atividades potencialmente suspeitas.

Para habilitar o Log e os Alertas do Cofre da Chave do Azure, use o comando azur CLI az monitor diagnostic-settings create :

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

Este comando cria uma definição de diagnóstico denominada myDiagnosticSettings, configura-a para o Cofre de Chaves do Azure especificado, habilita a AuditEvent categoria de log, que rastreia eventos relacionados à segurança e ao acesso e envia os logs para o espaço de trabalho especificado do Log Analytics para monitoramento, análise e alerta. Isso permite monitorar padrões de acesso, detetar tentativas de acesso não autorizadas e configurar 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 Azure CLI az monitor scheduled-query create para monitorar logs no espaço de trabalho especificado do Log Analytics para 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 detetada:

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 à rede ao Cofre da Chave

Você deve restringir o acesso à rede ao Cofre de Chaves do Azure para que o cofre só aceite solicitações de locais de rede conhecidos. Há dois métodos gerais que você pode usar para fazer isso:

  • Azure Private Link. Isso cria um ponto de extremidade privado em sua rede virtual, permitindo que seu aplicativo se conecte ao Cofre da Chave do Azure sem atravessar a Internet pública. Esta 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 definir as configurações de firewall do Cofre da Chave do Azure, localizado em Redes, com uma lista de intervalos de IP permitidos. Você também pode usar esse método para permitir o 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 azur CLI az network private-endpoint create :

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 impõe HTTPS para todas as comunicações. Isso garante que suas chaves de API e outros dados confidenciais sejam criptografados em trânsito, protegendo-os de escutas e ataques man-in-the-middle.

Interagir com o Azure Key Vault usando Python

Para interagir com o Azure Key Vault usando Python, instale a biblioteca de identidades do Azure para 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 cliente Azure Identity e 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}")

Neste 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: Esta classe fornece métodos para interagir com segredos no Cofre de Chaves.
  • get_secret(): Recupera o segredo do Cofre da Chave.

Próximos passos