Compartilhar via


Usar @akv() para substituição de segredos no Azure Key Vault no Construtor de API de Dados.

O Construtor de API de Dados (DAB) permite manter segredos, como cadeias de conexão de banco de dados, fora do arquivo de configuração de tempo de execução, substituindo-os durante o carregamento. Originalmente, isso era feito com a @env() função para variáveis de ambiente. A partir da versão 1.6, o DAB adiciona suporte ao Azure Key Vault por meio da @akv() função.

O que @akv() faz

Você pode referenciar um segredo armazenado no Azure Key Vault diretamente no JSON de configuração:

{
  "data-source": {
    "connection-string": "@akv('my-connection-secret')"
  }
}

No momento do carregamento da configuração, o DAB resolve o espaço reservado e o substitui pelo valor do secreto, semelhante a como @env('VAR_NAME') funciona. Se o segredo não puder ser recuperado, o carregamento de configuração falhará. Os erros incluem segredos ausentes ou falhas de autorização.

Estrutura de configuração

Adicione a azure-key-vault seção no nível raiz da configuração:

{
  "azure-key-vault": {
    "endpoint": "https://my-vault-name.vault.azure.net/",
    "retry-policy": {
      "mode": "exponential",
      "max-count": 5,
      "delay-seconds": 2,
      "max-delay-seconds": 30,
      "network-timeout-seconds": 45
    }
  }
}

Propriedades

Propriedade Obrigatório Tipo Description
endpoint Sim , se estiver usando o Key Vault cadeia A URL completa do endpoint do Key Vault
retry-policy Não objeto Substitui o comportamento de repetição ao chamar o Key Vault

Objeto de política de repetição

Campo Padrão Anotações
mode exponential Valores permitidos: fixed ou exponential
max-count 3 Deve ser maior que 0
delay-seconds 1 Deve ser maior que 0
max-delay-seconds 60 Deve ser maior que 0, teto para retirada exponencial
network-timeout-seconds 60 Deve ser maior que 0

Modos de política de repetição

Mode Comportamento
fixed Aguarda um intervalo constante delay-seconds entre as tentativas até max-count
exponential Dobra o atraso até chegar a max-delay-seconds ou max-count

Desenvolvimento local: arquivos .akv

Para desenvolvimento sem um Azure Key Vault, use um .akv arquivo para simular segredos. O formato é name=value por linha:

my-connection-secret=Server=.;Database=AppDb;User Id=app;Password=local-dev;
api-key=dev-api-key-123

Observação

Se você fornecer um arquivo local .akv para desenvolvimento, suas entradas serão usadas para satisfazer as consultas de 'nome-secreto' sem fazer uma chamada de rede para o Azure Key Vault.

Diretrizes:

  • Mantenha .akv fora do controle de versão
  • Os nomes de segredo devem corresponder aos nomes usados em @akv('name')

Adicionando configurações do Azure Key Vault com a CLI

Você pode definir as configurações do Key Vault usando a CLI:

dab configure \
  --azure-key-vault.endpoint "https://my-vault.vault.azure.net/" \
  --azure-key-vault.retry-policy.mode exponential \
  --azure-key-vault.retry-policy.max-count 5 \
  --azure-key-vault.retry-policy.delay-seconds 2 \
  --azure-key-vault.retry-policy.max-delay-seconds 30 \
  --azure-key-vault.retry-policy.network-timeout-seconds 45 \
  --config dab-config.json

Validação:

  • Campos de política de repetição sem um ponto de extremidade causam falha de validação
  • Parâmetros de repetição opcionais devem ser inteiros positivos

Usando @akv() na configuração

Substituição básica

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@akv('primary-sql-connection')"
  }
}

Misturado com @env()

{
  "data-source": {
    "database-type": "@env('DB_TYPE')",
    "connection-string": "@akv('sql-connection')"
  },
  "runtime": {
    "rest": { "enabled": true }
  }
}

Observação

Na inicialização, as substituições @env() ocorrem antes das substituições @akv().

Parâmetros de procedimento armazenado

{
  "entities": {
    "RunJob": {
      "source": {
        "object": "dbo.RunJob",
        "type": "stored-procedure",
        "parameters": {
          "apiKey": "@akv('job-runner-apikey')"
        }
      },
      "permissions": [
        { "role": "anonymous", "actions": [ "execute" ] }
      ]
    }
  }
}

Resolução de problemas

Sintoma Steps
Segredo não encontrado Verificar o nome, a existência no cofre e as permissões de identidade
Valor de repetição inválido Use um número inteiro positivo ou exclua para usar os padrões padrão
Falha na atualização de configuração Verificar os logs em busca de erros de validação
@akv() não substituído Confirme o endpoint, o nome do segredo e se a resolução do segredo está habilitada
401/403 do Key Vault Verificar a atribuição de identidade e as permissões

Configuração de exemplo completo

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@akv('primary-sql-connection')"
  },
  "azure-key-vault": {
    "endpoint": "https://my-vault.vault.azure.net/",
    "retry-policy": {
      "mode": "exponential",
      "max-count": 5,
      "delay-seconds": 2,
      "max-delay-seconds": 30,
      "network-timeout-seconds": 45
    }
  },
  "runtime": {
    "rest": { "enabled": true }
  },
  "entities": {
    "Books": {
      "source": "dbo.Books",
      "permissions": [
        { "role": "anonymous", "actions": [ "read" ] }
      ]
    }
  }
}

Exemplo de arquivo .akv:

primary-sql-connection=Server=localhost;Database=BooksDb;User Id=app;Password=password;

Importante

Não comprometa .akv arquivos que contêm segredos. |

Referência rápida

Item Resumo
Sintaxe @akv('secret-name')
Ponto de extremidade necessário Yes
Arquivo de simulação .akv com name=value linhas
Misturando com @env() Suportado.

Review

Use @akv() para resolver segredos do Azure Key Vault. Configure políticas de repetição para confiabilidade e use .akv arquivos para simular segredos no desenvolvimento. Isso mantém os valores confidenciais fora dos arquivos de configuração, ao mesmo tempo em que dá suporte a fluxos de trabalho de produção e desenvolvimento consistentes.