Share via


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

  1. ARO-projekt létrehozása; ebben a projektben fogja üzembe helyezni a CSI-illesztőprogramot:

    oc new-project k8s-secrets-store-csi
    
  2. 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
    
  3. 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
    
  4. Frissítse a Helm-adattárakat:

    helm repo update
    
  5. 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"

  6. 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

  1. 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
    
  2. Frissítse a helyi Helm-adattárakat:

    helm repo update
    
  3. 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
    
  4. 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

  1. Hozzon létre egy névteret az alkalmazás számára.

    oc new-project my-application
    
  2. 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}
    
  3. Hozzon létre egy titkos kulcsot a kulcstartóban.

    az keyvault secret set \
       --vault-name ${KEYVAULT_NAME} \
       --name secret1 --value "Hello"
    
  4. 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)"
    
  5. Á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}
    
  6. 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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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

  1. Helm-diagram eltávolítása:

    helm uninstall -n k8s-secrets-store-csi azure-csi-provider
    
  2. Az alkalmazás törlése:

    oc delete project my-application
    
  3. Törölje az Azure Key Vaultot:

    az keyvault delete -n ${KEYVAULT_NAME}
    
  4. 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

  1. 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
    
  2. Törölje a SecurityContextConstraints elemet:

    oc adm policy remove-scc-from-user privileged \
      system:serviceaccount:k8s-secrets-store-csi:secrets-store-csi-driver