CyberArk Conjur: complete gids voor Kubernetes-integratie met authn-k8s
Praktische vervolgstap op ons conceptartikel: Conjur Open Source draaien, een policy schrijven, en de authn-k8s-authenticator koppelen zodat pods zich authenticeren via hun ServiceAccount.
Vervolg op ons conceptartikel over CyberArk Conjur, en aanvullend op onze volledige SECRET-SEN-cursus: deze gids installeert Conjur Open Source en configureert de authn-k8s-authenticator, zodat een pod zich authenticeert puur op basis van zijn Kubernetes-identiteit.
Stap 1: Conjur Open Source installeren (Helm)
helm repo add cyberark https://cyberark.github.io/helm-charts
helm repo update
helm install conjur-oss cyberark/conjur-oss
--namespace conjur
--create-namespace
--set dataKey="$(openssl rand -base64 32)"
--set account.name="voorbeeld-account"
Stap 2: de authn-k8s-authenticator inschakelen
Configureer welke authenticatiemethode is toegestaan via een policy op het rootniveau:
- !policy
id: conjur/authn-k8s/productie-cluster
body:
- !webservice
- !group apps
- !permit
role: !group apps
privilege: [ authenticate ]
resource: !webservice
conjur policy load --branch root authenticators-policy.yaml
Stap 3: een host-identiteit definiëren voor een applicatie
- !host
id: productie-app/myapp
annotations:
authn-k8s/namespace: productie-app
authn-k8s/service-account: myapp-serviceaccount
- !grant
role: !group conjur/authn-k8s/productie-cluster/apps
member: !host productie-app/myapp
- !variable productie-app/database-wachtwoord
- !permit
role: !host productie-app/myapp
privileges: [ read, execute ]
resource: !variable productie-app/database-wachtwoord
conjur policy load --branch root app-policy.yaml
conjur variable set -i productie-app/database-wachtwoord -v 'SuperGeheim123'
Stap 4: de pod koppelen (init-container-patroon)
De meest gebruikte aanpak injecteert een init-container die het geheim ophaalt en beschikbaar maakt voor de hoofdcontainer via een gedeeld volume:
spec:
serviceAccountName: myapp-serviceaccount
initContainers:
- name: conjur-authenticator
image: cyberark/conjur-kubernetes-authenticator
env:
- name: CONJUR_AUTHN_URL
value: https://conjur.voorbeeld.nl/authn-k8s/productie-cluster
- name: CONJUR_ACCOUNT
value: voorbeeld-account
volumeMounts:
- name: podinfo
mountPath: /var/run/secrets/kubernetes.io/serviceaccount
Verifiëren dat authenticatie werkt
curl -H "Authorization: Token token="\""
https://conjur.voorbeeld.nl/secrets/voorbeeld-account/variable/productie-app%2Fdatabase-wachtwoord
Praktijktip: Krijg je een 403 ondanks een geslaagde authenticatie? Controleer eerst of het "execute"-privilege daadwerkelijk aan de host is toegekend in de policy — een geslaagde authenticatie garandeert nog geen autorisatie, dat zijn twee losse stappen.
Wanneer Conjur kiezen boven ESO of Sealed Secrets?
| Situatie | Aanbevolen tool |
|---|---|
| Al werkend met CyberArk PAM Vault | Conjur, via de Vault Conjur Synchronizer |
| Enterprise/gereguleerde omgeving met fijnmazig policy-beheer | Conjur |
| Al een centrale secrets manager (Vault/AWS/Azure), simpele sync gewenst | External Secrets Operator |
| Klein team, GitOps-workflow, geen externe afhankelijkheid gewenst | Sealed Secrets |
Veelgestelde vragen
Kan Conjur Open Source en Conjur Enterprise door elkaar gebruikt worden?
Nee, dit zijn aparte, zelfstandige installaties. Migreren van Open Source naar Enterprise is mogelijk maar vereist een expliciet migratietraject, geen automatische upgrade.
Is de dataKey uit stap 1 hetzelfde als een wachtwoord?
Nee — de dataKey is de sleutel waarmee Conjur zelf zijn database versleutelt. Bewaar deze net zo zorgvuldig als een privésleutel; zonder deze sleutel is de Conjur-database onleesbaar.