Kom i gang
Under finner du video-gjennomganger av hvordan du kan sikre applikasjoner med Ztoperator på SKIP for Microsoft Entra ID, ID-Porten, Ansattporten, og Maskinporten.
🔹 Microsoft Entra ID
Følgende eksempel går gjennom hvordan man kan konfigurere en Ztoperator-AuthPolicy til å beskytte en
eksempelapplikasjon og logge inn brukere mot Kartverket sin Microsoft Entra ID. Til det så benyttes Azurerator til klientregistrering,
Skiperator til applikasjonsutrulling og Ztoperator til tilgangsstyring og innloggingsflyt.
Oppsettet for eksempelet finner du i env/atgcp1-sandbox/ztoperator-demo-entraid i tilgangsstyring-apps.
Den beskyttede applikasjonen kan nås på entraid-ztoperator.atgcp1-sandbox.kartverket.cloud.
📋 Manifester
Følgende manifester ble opprettet for å realisere eksempelet:
AzureAdApplication: ztoperator-demo-entraid/entraid-reg
apiVersion: nais.io/v1
kind: AzureAdApplication
metadata:
name: entraid-reg
spec:
claims:
groups:
- id: a6578085-e0ee-4168-bf97-1b3026f6f3bd # Kartverket@kartverket.no
replyUrls:
- url: https://entraid-ztoperator.atgcp1-sandbox.kartverket.cloud/oauth2/callback
secretName: entraid-secret
Application: ztoperator-demo-entraid/entraid-demo-app
apiVersion: skiperator.kartverket.no/v1alpha1
kind: Application
metadata:
name: entraid-demo-app
spec:
podSettings:
annotations:
sidecar.istio.io/userVolume: |
[
{
"name": "istio-oauth2",
"secret": {
"secretName": "authpolicy-entraid-envoy-secret"
}
}
]
sidecar.istio.io/userVolumeMount: |
[
{
"name": "istio-oauth2",
"mountPath": "/etc/istio/config",
"readonly": true
}
]
image: ghcr.io/kartverket/ztoperator-echo-app:v0
port: 5000
routingProvider: Standard
env:
- name: ECHO_TITLE
value: Hello from Entra ID Ztoperator Demo
ingresses:
- entraid-ztoperator.atgcp1-sandbox.kartverket.cloud
AuthPolicy: ztoperator-demo-entraid/authpolicy-entraid
apiVersion: ztoperator.kartverket.no/v1alpha1
kind: AuthPolicy
metadata:
name: authpolicy-entraid
spec:
enabled: true
selector:
matchLabels:
app: entraid-demo-app
wellKnownURI: https://login.microsoftonline.com/7f74c8a2-43ce-46b2-b0e8-b6306cba73a3/v2.0/.well-known/openid-configuration
allowedAudiences:
- valueFrom:
secretKeyRef:
name: entraid-secret
key: AZURE_APP_CLIENT_ID
ignoreAuthRules:
- paths:
- /
- /favicon.ico
autoLogin:
enabled: true
logoutPath: /logout
redirectPath: /oauth2/callback
scopes:
- api://<cluster>.<namespace>.<azure-ad-application-name>/.default
oAuthCredentials:
clientIDKey: AZURE_APP_CLIENT_ID
clientSecretKey: AZURE_APP_CLIENT_SECRET
secretRef: entraid-secret
outputClaimToHeaders:
- claim: preferred_username
header: zt-mail
- claim: name
header: zt-name
🪪 ID-Porten
Følgende eksempel går gjennom hvordan man kan konfigurere en Ztoperator-AuthPolicy til å beskytte en
eksempelapplikasjon og logge inn brukere mot ID-Porten i test. Til det så benyttes Digdir sin selvbetjeningsløsning til klientregistrering,
Skiperator til applikasjonsutrulling og Ztoperator til tilgangsstyring og innloggingsflyt.
Oppsettet for eksempelet finner du i env/atgcp1-sandbox/ztoperator-demo-idporten i tilgangsstyring-apps.
Den beskyttede applikasjonen kan nås på idporten-ztoperator.atgcp1-sandbox.kartverket.cloud.
📋 Manifester
Følgende manifester ble opprettet for å realisere eksempelet:
ExternalSecret: ztoperator-demo-idporten/idporten-secrets
apiVersion: external-secrets.io/v1
kind: SecretStore
metadata:
name: idporten-gsm
spec:
provider:
gcpsm:
projectID: tilgangsstyring-sandbox-e5ab
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: idporten-secrets
spec:
secretStoreRef:
kind: SecretStore
name: idporten-gsm
target:
name: idporten-secrets
data:
- secretKey: CLIENT_ID
remoteRef:
key: idporten-client-id
metadataPolicy: None
- secretKey: CLIENT_SECRET
remoteRef:
key: idporten-client-secret
metadataPolicy: None
refreshInterval: 1h
Application: ztoperator-demo-idporten/idporten-demo-app
apiVersion: skiperator.kartverket.no/v1alpha1
kind: Application
metadata:
name: idporten-demo-app
spec:
podSettings:
annotations:
sidecar.istio.io/userVolume: |
[
{
"name": "istio-oauth2",
"secret": {
"secretName": "authpolicy-idporten-envoy-secret"
}
}
]
sidecar.istio.io/userVolumeMount: |
[
{
"name": "istio-oauth2",
"mountPath": "/etc/istio/config",
"readonly": true
}
]
image: ghcr.io/kartverket/ztoperator-echo-app:v0
port: 5000
routingProvider: Standard
env:
- name: ECHO_TITLE
value: Hello from Ztoperator ID-Porten Demo App
ingresses:
- idporten-ztoperator.atgcp1-sandbox.kartverket.cloud
AuthPolicy: ztoperator-demo-idporten/authpolicy-idporten
apiVersion: ztoperator.kartverket.no/v1alpha1
kind: AuthPolicy
metadata:
name: authpolicy-idporten
spec:
enabled: true
selector:
matchLabels:
app: idporten-demo-app
wellKnownURI: https://test.idporten.no/.well-known/openid-configuration
allowedAudiences:
- valueFrom:
secretKeyRef:
name: idporten-secrets
key: CLIENT_ID
acceptedResources:
- https://idporten-ztoperator.atgcp1-sandbox.kartverket.cloud
ignoreAuthRules:
- paths:
- /
- /favicon.ico
autoLogin:
enabled: true
logoutPath: /logout
redirectPath: /oauth2/callback
scopes:
- openid
- profile
oAuthCredentials:
clientIDKey: CLIENT_ID
clientSecretKey: CLIENT_SECRET
secretRef: idporten-secrets
outputClaimToHeaders:
- claim: pid
header: zt-pid
👩💼 Ansattporten
Følgende eksempel går gjennom hvordan man kan konfigurere en Ztoperator-AuthPolicy til å beskytte en
eksempelapplikasjon og logge inn brukere mot Ansattporten i test. Til det så benyttes Digdir sin selvbetjeningsløsning til klientregistrering,
Skiperator til applikasjonsutrulling og Ztoperator til tilgangsstyring og innloggingsflyt.
Oppsettet for eksempelet finner du i env/atgcp1-sandbox/ztoperator-demo-ansattporten i tilgangsstyring-apps.
Den beskyttede applikasjonen kan nås på ansattporten-ztoperator.atgcp1-sandbox.kartverket.cloud.
📋 Manifester
Følgende manifester ble opprettet for å realisere eksempelet:
ExternalSecret: ztoperator-demo-ansattporten/ansattporten-secrets
apiVersion: external-secrets.io/v1
kind: SecretStore
metadata:
name: ansattporten-gsm
spec:
provider:
gcpsm:
projectID: tilgangsstyring-sandbox-e5ab
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: ansattporten-secrets
spec:
secretStoreRef:
kind: SecretStore
name: ansattporten-gsm
target:
name: ansattporten-secrets
data:
- secretKey: CLIENT_ID
remoteRef:
key: ansattporten-client-id
metadataPolicy: None
- secretKey: CLIENT_SECRET
remoteRef:
key: ansattporten-client-secret
metadataPolicy: None
refreshInterval: 1h
Application: ztoperator-demo-ansattporten/ansattporten-demo-app
apiVersion: skiperator.kartverket.no/v1alpha1
kind: Application
metadata:
name: ansattporten-demo-app
spec:
podSettings:
annotations:
sidecar.istio.io/userVolume: |
[
{
"name": "istio-oauth2",
"secret": {
"secretName": "authpolicy-ansattporten-envoy-secret"
}
}
]
sidecar.istio.io/userVolumeMount: |
[
{
"name": "istio-oauth2",
"mountPath": "/etc/istio/config",
"readonly": true
}
]
image: ghcr.io/kartverket/ztoperator-echo-app:v0
port: 5000
routingProvider: Standard
env:
- name: ECHO_TITLE
value: Hello from Ztoperator Ansattporten Demo App
ingresses:
- ansattporten-ztoperator.atgcp1-sandbox.kartverket.cloud
AuthPolicy: ztoperator-demo-ansattporten/authpolicy-ansattporten
apiVersion: ztoperator.kartverket.no/v1alpha1
kind: AuthPolicy
metadata:
name: authpolicy-ansattporten
spec:
enabled: true
selector:
matchLabels:
app: ansattporten-demo-app
wellKnownURI: https://test.ansattporten.no/.well-known/openid-configuration
allowedAudiences:
- valueFrom:
secretKeyRef:
name: ansattporten-secrets
key: CLIENT_ID
acceptedResources:
- https://ansattporten-ztoperator.atgcp1-sandbox.kartverket.cloud
ignoreAuthRules:
- paths:
- /
- /favicon.ico
autoLogin:
enabled: true
logoutPath: /logout
redirectPath: /oauth2/callback
scopes:
- openid
- profile
loginParams:
authorization_details: |
[
{
"type": "ansattporten:altinn:resource",
"resource": "urn:altinn:resource:5822:1",
"allow_multiple_organizations": false
}
]
oAuthCredentials:
clientIDKey: CLIENT_ID
clientSecretKey: CLIENT_SECRET
secretRef: ansattporten-secrets
outputClaimToHeaders:
- claim: pid
header: zt-pid
🤖 Maskinporten
Følgende eksempel viser hvordan en API-applikasjon kan beskyttes med Maskinporten i test. I motsetning til
brukerrettede identitetstilbydere brukes det ikke innlogging eller autoLogin. Konsumenten henter et access-token fra
Maskinporten og sender det i Authorization: Bearer <token> ved kall til API-et.
Eksempelet bruker Digdirator til å opprette et Maskinporten-scope, Skiperator til applikasjonsutrulling og Ztoperator
til validering av token. Merk at Maskinporten-tokens ikke inneholder noe aud-claim, og at vi dermed heller ikke kan
bruke allowedAudiences-feltet for å validere dette. baselineAuth brukes her for å begrense tilgang til API-et, slik
at kun Maskinporten-tokens med riktig scope aksepteres.
📋 Manifester
MaskinportenClient: ztoperator-demo-maskinporten/maskinporten-demo
apiVersion: nais.io/v1
kind: MaskinportenClient
metadata:
name: maskinporten-demo
spec:
clientName: Ztoperator Maskinporten Demo
secretName: maskinporten-demo-secret
scopes:
exposes:
- enabled: true
product: ztoperator
name: maskinporten-demo.read
separator: /
consumers:
- name: Eksempel-konsument-1
orgno: "123456789"
- name: Eksempel-konsument-2
orgno: "987654321"
Application: ztoperator-demo-maskinporten/maskinporten-demo-api
apiVersion: skiperator.kartverket.no/v1alpha1
kind: Application
metadata:
name: maskinporten-demo-api
spec:
image: ghcr.io/kartverket/ztoperator-echo-app:v0
port: 5000
routingProvider: Standard
env:
- name: ECHO_TITLE
value: Hello from Ztoperator Maskinporten Demo App
ingresses:
- maskinporten-ztoperator.atgcp1-dev.kartverket.cloud
AuthPolicy: ztoperator-demo-maskinporten/authpolicy-maskinporten
apiVersion: ztoperator.kartverket.no/v1alpha1
kind: AuthPolicy
metadata:
name: authpolicy-maskinporten
spec:
enabled: true
selector:
matchLabels:
app: maskinporten-demo-api
wellKnownURI: https://test.maskinporten.no/.well-known/oauth-authorization-server
baselineAuth:
claims:
- claim: scope
values:
- kartverk:ztoperator/maskinporten-demo.read