Dela via


Använd @akv() för att ersätta hemligheter i Azure Key Vault i Data API Builder

Med Data API Builder (DAB) kan du hålla hemligheter, till exempel databasanslutningssträngar, borta från körningskonfigurationsfilen genom att ersätta dem vid inläsningen. Ursprungligen gjordes detta med @env() funktionen för miljövariabler. Från och med version 1.6 lägger DAB till stöd för Azure Key Vault via @akv() funktionen.

Vad @akv() gör

Du kan referera till en hemlighet som lagras i Azure Key Vault direkt i JSON-konfigurationen:

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

Vid inläsning av konfigurationen löser DAB platshållaren och ersätter den med hemlighetens värde, liknande @env('VAR_NAME'). Om hemligheten inte kan hämtas misslyckas konfigurationsinläsningen. Fel inkluderar saknade hemligheter eller auktoriseringsfel.

Konfigurationsstruktur

Lägg till avsnittet azure-key-vault på rotnivån för konfigurationen:

{
  "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
    }
  }
}

Egenskaper

Fastighet Krävs Typ Description
endpoint Ja om du använder Key Vault snöre Den fullständiga Key Vault-slutpunkts-URL:en
retry-policy Nej objekt Åsidosätter återförsöksbeteende när du anropar Key Vault

Återförsöks-princip-objekt

Fält Förinställning Noteringar
mode exponential Tillåtna värden: fixed eller exponential
max-count 3 Måste vara större än 0
delay-seconds 1 Måste vara större än 0
max-delay-seconds 60 Måste vara större än 0, gräns för exponentiell återställning
network-timeout-seconds 60 Måste vara större än 0

Återförsökspolicy-lägen

Mode Beteende
fixed Väntar ett konstant tidsintervall delay-seconds mellan försök tills max-count
exponential Dubblar fördröjningen tills den når max-delay-seconds eller max-count

Lokal utveckling: .akv-filer

För utveckling utan ett Azure Key Vault använder du en .akv fil för att simulera hemligheter. Formatet är name=value per rad:

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

Anmärkning

Om du anger en lokal .akv-fil för utveckling används dess poster för att tillgodose @akv("secret-name")-sökningar utan att göra en nätverksförfrågan till Azure Key Vault.

Riktlinjer:

  • Håll .akv borta från källkontroll
  • Hemliga namn måste matcha namnen som används i @akv('name')

Lägga till Azure Key Vault-inställningar med CLI

Du kan konfigurera Key Vault-inställningar med hjälp av 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

Validering:

  • Omprövningsprincipfält utan slutpunkt orsakar valideringsfel
  • Valfria återförsöksparametrar måste vara positiva heltal

Använda @akv() i konfigurationen

Grundläggande substitution

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

Blandat med @env()

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

Anmärkning

Vid start av systemet @env() sker substitutioner före @akv() substitutioner.

Parametrar för lagrad procedur

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

Felsökning

Symtom Steg
Hemligheten hittades inte Verifiera namn, existens i valv och identitetsbehörigheter
Ogiltigt återförsöksvärde Använd ett positivt heltal eller ta bort för att använda standardvärden
Konfigurationsuppdateringen misslyckas Kontrollera om det finns verifieringsfel i loggarna
@akv() inte ersatt Bekräfta slutpunkt, hemligt namn och att hemlig lösning är aktiverat
401/403 från Key Vault Kontrollera identitetstilldelning och behörigheter

Fullständig exempelkonfiguration

{
  "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" ] }
      ]
    }
  }
}

Exempelfil .akv :

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

Viktigt!

Lämna inte in .akv filer som innehåller säkra uppgifter. |

Snabbreferens

Objekt Sammanfattning
Syntax @akv('secret-name')
Slutpunkt krävs Yes
Simuleringsfil .akv med name=value linjer
Blanda med @env() Stöds.

Review

Använd @akv() för att lösa hemligheter från Azure Key Vault. Konfigurera återförsöksprinciper för tillförlitlighet och använd .akv filer för att simulera hemligheter under utveckling. Detta håller känsliga värden borta från konfigurationsfiler och stöder konsekventa arbetsflöden för utveckling och produktion.