Az Azure Key Vault-szolgáltató használata a Titkos kulcstár CSI-illesztőprogramhoz az Azure Red Hat OpenShiften
Az Azure Key Vault titkos kulcstároló-szolgáltatójának CSI-illesztőprogramja lehetővé teszi, hogy lekérje az Azure Key Vault-példányban tárolt titkos tartalmakat, és a Titkos kulcstár CSI-illesztőprogramja segítségével csatlakoztatja őket a Kubernetes-podokhoz. Ez a cikk azt ismerteti, hogyan használhatja az Azure Key Vault Provider for Secrets Store CSI Drivert az Azure Red Hat OpenShiften.
Megjegyzés:
A cikkben bemutatott nyílt forráskód megoldás alternatívaként az Azure Arc használatával kezelheti az ARO-fürtöket az Azure Key Vault Provider for Secrets Store CSI Driver bővítményével együtt. Ezt a módszert a Microsoft teljes mértékben támogatja, és az alábbi nyílt forráskód megoldás helyett ajánlott.
Előfeltételek
A következő előfeltételek szükségesek:
- Azure Red Hat OpenShift-fürt (további információért lásd : Azure Red Hat OpenShift-fürt létrehozása.)
- Azure CLI (bejelentkezve)
- Helm 3.x parancssori felület
Set environment variables
Állítsa be a következő változókat, amelyeket az eljárás során használni fog:
export KEYVAULT_RESOURCE_GROUP=${AZR_RESOURCE_GROUP:-"openshift"}
export KEYVAULT_LOCATION=${AZR_RESOURCE_LOCATION:-"eastus"}
export KEYVAULT_NAME=secret-store-$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1)
export AZ_TENANT_ID=$(az account show -o tsv --query tenantId)
A Kubernetes Titkos kulcstár CSI-illesztőprogramjának telepítése
ARO-projekt létrehozása; ebben a projektben fogja üzembe helyezni a CSI-illesztőprogramot:
oc new-project k8s-secrets-store-csi
A SecurityContextConstraints beállításával engedélyezze a CSI-illesztőprogram futtatását (ellenkező esetben a CSI-illesztőprogram nem fog tudni podokat létrehozni):
oc adm policy add-scc-to-user privileged \ system:serviceaccount:k8s-secrets-store-csi:secrets-store-csi-driver
Adja hozzá a Titkos kulcstár CSI-illesztőprogramját a Helm-adattárakhoz:
helm repo add secrets-store-csi-driver \ https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
Frissítse a Helm-adattárakat:
helm repo update
Telepítse a Titkos kulcstár CSI-illesztőprogramot:
helm install -n k8s-secrets-store-csi csi-secrets-store \ secrets-store-csi-driver/secrets-store-csi-driver \ --version v1.3.1 \ --set "linux.providersDir=/var/run/secrets-store-csi-providers"
Ha szeretné, engedélyezheti a titkos kódok automatikus kiírását a fenti parancshoz a következő paraméterek hozzáadásával:
--set "syncSecret.enabled=true" --set "enableSecretRotation=true"
Ellenőrizze, hogy futnak-e a CSI-illesztőprogram démonkészletei:
kubectl --namespace=k8s-secrets-store-csi get pods -l "app=secrets-store-csi-driver"
A fenti parancs futtatása után a következőket kell látnia:
NAME READY STATUS RESTARTS AGE csi-secrets-store-secrets-store-csi-driver-cl7dv 3/3 Running 0 57s csi-secrets-store-secrets-store-csi-driver-gbz27 3/3 Running 0 57s
Azure Key Vault-szolgáltató üzembe helyezése titkos kulcstár CSI-illesztőprogramhoz
Adja hozzá az Azure Helm-adattárat:
helm repo add csi-secrets-store-provider-azure \ https://azure.github.io/secrets-store-csi-driver-provider-azure/charts
Frissítse a helyi Helm-adattárakat:
helm repo update
Telepítse az Azure Key Vault CSI-szolgáltatót:
helm install -n k8s-secrets-store-csi azure-csi-provider \ csi-secrets-store-provider-azure/csi-secrets-store-provider-azure \ --set linux.privileged=true --set secrets-store-csi-driver.install=false \ --set "linux.providersDir=/var/run/secrets-store-csi-providers" \ --version=v1.4.1
A SecurityContextConstraints beállításával engedélyezze a CSI-illesztőprogram futtatását:
oc adm policy add-scc-to-user privileged \ system:serviceaccount:k8s-secrets-store-csi:csi-secrets-store-provider-azure
Kulcstartó és titkos kulcs létrehozása
Hozzon létre egy névteret az alkalmazás számára.
oc new-project my-application
Hozzon létre egy Azure-kulcstartót az erőforráscsoportban, amely az ARO-t tartalmazza.
az keyvault create -n ${KEYVAULT_NAME} \ -g ${KEYVAULT_RESOURCE_GROUP} \ --location ${KEYVAULT_LOCATION}
Hozzon létre egy titkos kulcsot a kulcstartóban.
az keyvault secret set \ --vault-name ${KEYVAULT_NAME} \ --name secret1 --value "Hello"
Hozzon létre egy egyszerű szolgáltatást a kulcstartóhoz.
Megjegyzés:
Ha hibaüzenetet kap a szolgáltatásnév létrehozásakor, előfordulhat, hogy frissítenie kell az Azure CLI-t a legújabb verzióra.
export SERVICE_PRINCIPAL_CLIENT_SECRET="$(az ad sp create-for-rbac --skip-assignment --name http://$KEYVAULT_NAME --query 'password' -otsv)" export SERVICE_PRINCIPAL_CLIENT_ID="$(az ad sp list --display-name http://$KEYVAULT_NAME --query '[0].appId' -otsv)"
Állítson be egy hozzáférési szabályzatot a szolgáltatásnévhez.
az keyvault set-policy -n ${KEYVAULT_NAME} \ --secret-permissions get \ --spn ${SERVICE_PRINCIPAL_CLIENT_ID}
Hozzon létre és címkézzen fel egy titkos kulcsot a Kubernetes számára a kulcstartó eléréséhez.
kubectl create secret generic secrets-store-creds \ -n my-application \ --from-literal clientid=${SERVICE_PRINCIPAL_CLIENT_ID} \ --from-literal clientsecret=${SERVICE_PRINCIPAL_CLIENT_SECRET} kubectl -n my-application label secret \ secrets-store-creds secrets-store.csi.k8s.io/used=true
A CSI-illesztőprogramot használó alkalmazás üzembe helyezése
Hozzon létre egy olyan
SecretProviderClass
kulcsot, amely hozzáférést biztosít ehhez a titkos kódhoz:cat <<EOF | kubectl apply -f - apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: azure-kvname namespace: my-application spec: provider: azure parameters: usePodIdentity: "false" useVMManagedIdentity: "false" userAssignedIdentityID: "" keyvaultName: "${KEYVAULT_NAME}" objects: | array: - | objectName: secret1 objectType: secret objectVersion: "" tenantId: "${AZ_TENANT_ID}" EOF
Hozzon létre egy podot, amely az
SecretProviderClass
előző lépésben létrehozott podot használja:cat <<EOF | kubectl apply -f - kind: Pod apiVersion: v1 metadata: name: busybox-secrets-store-inline namespace: my-application spec: containers: - name: busybox image: k8s.gcr.io/e2e-test-images/busybox:1.29 command: - "/bin/sleep" - "10000" volumeMounts: - name: secrets-store-inline mountPath: "/mnt/secrets-store" readOnly: true volumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "azure-kvname" nodePublishSecretRef: name: secrets-store-creds EOF
Ellenőrizze, hogy a titkos kód csatlakoztatva van-e:
kubectl exec busybox-secrets-store-inline -- ls /mnt/secrets-store/
A kimenetnek a következőnek kell lennie:
secret1
A titkos kód nyomtatása:
kubectl exec busybox-secrets-store-inline \ -- cat /mnt/secrets-store/secret1
A kimenetnek a következőnek kell lennie:
Hello
Felesleges tartalmak törlése
Távolítsa el a Key Vault-szolgáltatót és a CSI-illesztőprogramot.
A Key Vault-szolgáltató eltávolítása
Helm-diagram eltávolítása:
helm uninstall -n k8s-secrets-store-csi azure-csi-provider
Az alkalmazás törlése:
oc delete project my-application
Törölje az Azure Key Vaultot:
az keyvault delete -n ${KEYVAULT_NAME}
Törölje a szolgáltatásnevet:
az ad sp delete --id ${SERVICE_PRINCIPAL_CLIENT_ID}
A Kubernetes Titkos tár CSI-illesztőprogramjának eltávolítása
Törölje a Titkos kulcstár CSI-illesztőprogramot:
helm uninstall -n k8s-secrets-store-csi csi-secrets-store oc delete project k8s-secrets-store-csi
Törölje a SecurityContextConstraints elemet:
oc adm policy remove-scc-from-user privileged \ system:serviceaccount:k8s-secrets-store-csi:secrets-store-csi-driver