Microsoft Entra ID
Microsoft Entra ID er identitetstilbyderen Kartverket bruker internt for sine ansatte. Velger du Microsoft Entra ID som identitetstilbyder for din applikasjon, sÄ er det fordi du Þnsker Ä tilby tjenesten din for internt ansatte i Kartverket.
En klientregistrering i Microsoft Entra ID kalles for en app-registration. For Ă„ opprette en app-registration har du to muligheter:
- Bruke Kubernetes-ressursen
AzureAdApplication. Denne ressurstypen er tilgjengelig via Kubernetes-operatoren Azurerator, utviklet av NAV sitt plattformteam (NAIS). - Bruke Kubernetes-ressursen
SecurityConfig, som er en Kartverket-tilpasset abstraksjon pÄ toppen av Azurerator. Les mer omSecurityConfigi dokumentasjonen for Accesserator. Denne vil opprette enAzureAdApplication-ressurs under panseret. Dersom du uansett
En vil typisk velge Ă„ bruke SecurityConfig fremfor AzureAdApplication dersom en uansett skal bruke fĂžrstnevnte til
annen funksjonalitet, som Token Exchange, token-uthenting eller validering med Texas, OPA eller annet.
đč AzureAdApplicationâ
Azurerator introduserer Kubernetes-ressursen AzureAdApplication, som hÄndterer opprettelse og vedlikehold av
app-registrations i Microsoft Entra ID. App-registrations opprettet med Azurerator vil fÄ navn basert pÄ hvor de er
plassert i et Kubernetes-cluster, i.e. cluster:namespace:name. Etter Ă„ ha fullfĂžrt opprettelsen, vil Azurerator
opprette en Kubernetes-hemmelighet (Secret) i samme namespace med hemmeligheter som kan brukes av applikasjoner til
tilgangsstyring, som for eksempel client_id, client_secret, private_key_jwt, diverse URL-er og lignende.
Automatisk rullering av hemmeligheterâ
Azurerator rullerer hemmeligheter automatisk hver 120-ende dag. For at din applikasjon skal plukke opp de roterte hemmelighetene mÄ du legge fÞlgende annotasjon pÄ din Skiperator-applikasjon:
apiVersion: skiperator.kartverket.no/v1alpha1
kind: Application
metadata:
...
spec:
podSettings:
annotations:
reloader.stakater.com/search: "true"
...
Siden hemmeligheter opprettet av Azurerator er annotert med en tilhĂžrende reloader.stakater.com/match-annotasjon, vil
dette medfĂžre at det rulles ut nye pods for din applikasjon kort tid etter hemmeligheten oppdateres. Uten dette vil du
kunne oppleve nedetid i din applikasjon ifbm. rullering av hemmeligheter.
Du kan ogsÄ tvinge frem rullering av hemmeligheter ved Ä legge fÞlgende annotasjon pÄ AzureAdApplication-ressursen:
apiVersion: nais.io/v1
kind: AzureAdApplication
metadata:
annotations:
azure.nais.io/rotate: "true"
...
spec:
...
SÄ snart hemmeligheten er rullert vil annotasjonen fjernes automatisk. Vi anbefaler at auto-sync i ArgoCD av avskrudd mens du roterer hemmeligheter. Fjern annotasjonen sÄ snart du er ferdig med Ä rullere.
Spesifikasjonâ
spec (object, required) â Spesifikasjon til AzureAdApplication
allowAllUsers (bool, required) â Bestemmer om alle brukere i tenanten som Azurerator er konfigurert mot skal fĂ„ tilgang.
claims (object, optional) â Definerer konfigurasjon av claims som inkluderes i tokenene som returneres til Entra ID applikasjonen.
groups ([]object, optional) â En liste over Entra ID gruppe ID-er som skal inkluderes i groups-claimet i tokenene utstedt av Entra ID. Dette tildeler ogsĂ„ grupper til app-registreringen brukt for tilgangskontroll. Kun direkte medlemmer av gruppene fĂ„r tilgang.
id (string, required) â Objekt-ID-en (OID) til en Entra ID-gruppe.
replyUrls ([]object, required) â URL-er som applikasjonen godtar som svaradresser etter autentisering.
url (string, required) â En godkjent svaradresse (reply URL) for applikasjonen.
logoutUrl (string, optional) â URL-en brukere blir omdirigert til nĂ„r de logger ut av applikasjonen..
preAuthorizedApplications ([]object, optional) â Definerer andre app-registreringer som er forhĂ„ndsautorisert til Ă„ fĂ„ tilgang til denne applikasjonen. Her refereres det til tilsvarende AzureAdApplication.
application (string, required) â Navnet pĂ„ den forhĂ„ndsgodkjente applikasjonen.
namespace (string, required) â Namespacet hvor den forhĂ„ndsgodkjente applikasjonen befinner seg.
cluster (string, required) â Clusteret hvor den forhĂ„ndsgodkjente applikasjonen befinner seg.
permissions (object, optional) â Spesifiserer hvilke claims den forhĂ„ndsautoriserte applikasjonen har.
scopes ([]string, optional) â Liste med egendefinerte tilgangs-scopes tildelt til den forhĂ„ndsautoriserte appliaksjonen.
roles ([]string, optional) â Liste med egendefinerte tilgangs-roller tildelt til den forhĂ„ndsautoriserte appliaksjonen.
secretName (string, required) â Navnet pĂ„ den resulterende Secret-ressursen som vil bli opprettet.
secretKeyPrefix (string, optional) â Et valgfritt brukerdefinert prefiks som brukes pĂ„ nĂžklene i den genererte hemmeligheten, og erstatter standardprefikset (AZURE).
singlePageApplication (bool, optional) â Angir om denne Entra ID-applikasjonen skal registreres som en single-page-application for bruk i klient-side-applikasjoner uten tilgang til hemmeligheter.
Eksempelâ
FĂžlgende eksempel oppretter app-registreringen atgcp1-sandbox:tilgangsstyring-main:test-app.
Den gir kun tilgang til direkte medlemmer av gruppene med objekt-ID 4bdc77ce-2a99-406c-a07e-88a1eba82dd9 eller 1262b1c5-d2db-44ad-96e3-ed8637e6b996.
Den forhÄndsautoriserer ogsÄ app-registration med navn atgcp1-dev:other-namespace:other-app.
NÄr registrering er fullfÞrt vil Azurerator opprette Kubernetes-hemmeligheten entraid-secret i namespacet tilgangsstyring-main.
Hvis denne klientregistreringen skal brukes sammen med Ztoperator for Ä beskytte din applikasjon og eventuelt logge inn brukere, sÄ er det et par felt som mÄ konfigureres riktig.
spec.replyUrlsmÄ samsvare medspec.ingressesi din Skiperator-Applicationogspec.autoLogin.redirectPathi din Ztoperator-AuthPolicy.spec.logoutUrlmÄ matchespec.ingressesi din Skiperator-Application.spec.secretNamemÄ matchespec.oAuthCredentialsi Ztoperator-AuthPolicy.spec.singlePageApplicationmÄ vÊre satt tilfalseettersom Ztoperator ikke gjennomfÞrer innloggingsflyten i en offentlig klient.
apiVersion: nais.io/v1
kind: AzureAdApplication
metadata:
name: test-app
namespace: tilgangsstyring-main
spec:
allowAllUsers: false
claims:
groups:
- id: 4bdc77ce-2a99-406c-a07e-88a1eba82dd9
- id: 1262b1c5-d2db-44ad-96e3-ed8637e6b996
replyUrls:
- url: https://test-app.atgcp1-sandbox.kartverket-intern.cloud/oauth2/callback
logoutUrl: https://test-app.atgcp1-sandbox.kartverket-intern.cloud/
preAuthorizedApplications:
- application: other-app
namespace: other-namespace
cluster: atgcp1-dev
secretName: entraid-secret
secretKeyPrefix: CUSTOM_PREFIX
singlePageApplication: false
apiVersion: v1
kind: Secret
metadata:
name: entraid-secret
namespace: tilgangsstyring-main
data:
AZURE_APP_CERTIFICATE_KEY_ID: ++++++++
AZURE_APP_CLIENT_ID: ++++++++
AZURE_APP_CLIENT_SECRET: ++++++++
AZURE_APP_JWK: ++++++++
AZURE_APP_JWKS: ++++++++
AZURE_APP_NEXT_CERTIFICATE_KEY_ID: ++++++++
AZURE_APP_NEXT_CLIENT_SECRET: ++++++++
AZURE_APP_NEXT_JWK: ++++++++
AZURE_APP_NEXT_PASSWORD_KEY_ID: ++++++++
AZURE_APP_PASSWORD_KEY_ID: ++++++++
AZURE_APP_PRE_AUTHORIZED_APPS: ++++++++
AZURE_APP_TENANT_ID: ++++++++
AZURE_APP_WELL_KNOWN_URL: ++++++++
AZURE_OPENID_CONFIG_ISSUER: ++++++++
AZURE_OPENID_CONFIG_JWKS_URI: ++++++++
AZURE_OPENID_CONFIG_TOKEN_ENDPOINT: ++++++++
type: Opaque