Skip to content

Azure configuratie

Geert van Zoest edited this page Mar 31, 2026 · 2 revisions

Azure configuratie

Deze pagina beschrijft hoe je een Azure Service Principal aanmaakt met de minimale rechten die azure-ddns nodig heeft.

Vereisten

  • Een Azure account met een actief subscription
  • Azure CLI (az) geïnstalleerd op je werkstation (niet nodig op de Pi)
  • Een bestaande DNS zone in Azure DNS

Tip: De Azure CLI is alleen nodig voor de eenmalige setup. Op de Raspberry Pi zelf hoeft az niet geïnstalleerd te worden — azure-ddns gebruikt directe REST API calls.

Stap 1: Inloggen

az login

Stap 2: App Registration aanmaken

az ad app create --display-name "azure-ddns"

Noteer de appId uit de output — dit wordt je AZURE_CLIENT_ID.

Stap 3: Service Principal aanmaken

az ad sp create --id <appId>

Stap 4: Client Secret aanmaken

az ad app credential reset --id <appId> --years 1

Noteer uit de output:

  • password → dit wordt je AZURE_CLIENT_SECRET
  • tenant → dit wordt je AZURE_TENANT_ID

Let op: Het secret wordt maar één keer getoond. Sla het veilig op (bijv. in een password manager). Na een jaar moet je een nieuw secret genereren met hetzelfde commando.

Stap 5: RBAC-rol toekennen (least privilege)

az role assignment create \
  --assignee <appId> \
  --role "DNS Zone Contributor" \
  --scope "/subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.Network/dnsZones/<zone>"

Belangrijk: De scope is bewust zo smal mogelijk:

  • Niet op subscription-niveau
  • Niet op resource group-niveau
  • Alleen op de specifieke DNS zone

Dit geeft azure-ddns precies wat het nodig heeft (GET + PUT op A-records) en niets meer.

Stap 6: Gegevens verzamelen

Na de setup heb je deze 7 waarden nodig:

Variabele Waar te vinden Voorbeeld
AZURE_TENANT_ID Stap 4 output (tenant) aaaabbbb-0000-cccc-1111-dddd2222eeee
AZURE_CLIENT_ID Stap 2 output (appId) 11112222-bbbb-3333-cccc-4444dddd5555
AZURE_CLIENT_SECRET Stap 4 output (password) A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u
AZURE_SUBSCRIPTION_ID Azure Portal → Subscriptions 00000000-0000-0000-0000-000000000000
AZURE_RESOURCE_GROUP Azure Portal → DNS zone → Overview rg-dns
DNS_ZONE_NAME De DNS zone naam (zonder trailing dot) example.com
DNS_RECORD_NAME Het A-record (relatieve naam) home (resulteert in home.example.com)

Stap 7: Testen

Test de configuratie op de Pi (of lokaal):

export AZURE_TENANT_ID="<jouw-tenant-id>"
export AZURE_CLIENT_ID="<jouw-client-id>"
export AZURE_CLIENT_SECRET="<jouw-secret>"
export AZURE_SUBSCRIPTION_ID="<jouw-subscription-id>"
export AZURE_RESOURCE_GROUP="<jouw-resource-group>"
export DNS_ZONE_NAME="<jouw-zone>"
export DNS_RECORD_NAME="<jouw-record>"

./azure-ddns --force

Verwachte output:

[2026-03-31 10:00:00] INFO: DNS record bijgewerkt: home.example.com -> 1.2.3.4

Secret vernieuwen

Het client secret verloopt na de ingestelde periode (standaard 1 jaar). Vernieuw het met:

az ad app credential reset --id <appId> --years 1

Update daarna AZURE_CLIENT_SECRET in je crontab of environment bestand op de Pi.

Veelvoorkomende fouten

Fout Oorzaak Oplossing
HTTP 401 bij token request Onjuiste client ID of secret Controleer AZURE_CLIENT_ID en AZURE_CLIENT_SECRET
HTTP 403 bij DNS operatie Onvoldoende RBAC rechten Controleer de role assignment scope
HTTP 404 bij DNS GET Verkeerde zone of record naam Controleer DNS_ZONE_NAME en DNS_RECORD_NAME

Ga nu door naar Operationeel beheer om de cron job in te stellen.