Megosztás a következőn keresztül:


Titkos kódok lekérése az Azure Arc-kompatibilis Kubernetes-fürtökben a Titkos tár bővítmény használatával

A KubernetesHez készült Azure Key Vault Titkos tár bővítmény ("Titkos tár") automatikusan szinkronizálja a titkos kulcsokat az Azure Key Vaultból egy Azure Arc-kompatibilis Kubernetes-fürtbe offline hozzáférés céljából. Ez azt jelenti, hogy az Azure Key Vault használatával tárolhatja, karbantarthatja és elforgathatja a titkos kulcsokat, még akkor is, ha a Kubernetes-fürtöt félig leválasztott állapotban futtatja. A szinkronizált titkos kulcsok a fürt titkos kulcstárolójában vannak tárolva, így kubernetes-titkos kulcsként elérhetővé válnak, így a szokásos módon használhatók: adatkötetként vannak csatlakoztatva, vagy környezeti változókként jelennek meg egy pod tárolójában.

A szinkronizált titkos kulcsok kritikus fontosságú üzleti objektumok, ezért a Titkos kulcstár izolált névterek és csomópontok, szerepköralapú hozzáférés-vezérlési (RBAC-) szabályzatok és a titkos kulcsok szinkronizálójának korlátozott engedélyei révén biztosítja őket. További védelem érdekében titkosítsa a Kubernetes titkos tárolóját a fürtön.

Tipp.

A Titkos tár bővítmény olyan helyzetekben ajánlott, ahol offline hozzáférésre van szükség, vagy ha a Kubernetes titkos tárba szinkronizált titkos kulcsokra van szüksége. Ha nincs szüksége ezekre a funkciókra, használhatja az Azure Key Vault Titkos kulcstár-szolgáltató bővítményét az Arc-kompatibilis Kubernetes-fürtök titkos kulcskezeléséhez. Nem ajánlott egyszerre futtatni az Online Azure Key Vault titkos kulcstár-szolgáltató bővítményét és az offline Titkos tár bővítményt egymás mellett egy fürtben.

Ez a cikk bemutatja, hogyan telepítheti és konfigurálhatja a Titkos tárat Azure Arc-kompatibilis Kubernetes-bővítményként.

Fontos

A Titkos tár jelenleg előzetes verzióban érhető el. A bétaverziójú, előzetes verziójú vagy másként még általánosan nem elérhető Azure-szolgáltatások jogi feltételeit lásd: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Előfeltételek

  • Az Azure Archoz csatlakoztatott, Kubernetes 1.27-es vagy újabb verzióját futtató fürt, valamint az egyik támogatott régióban (USA keleti régiója, USA 2. keleti régiója, USA nyugati régiója, USA2. nyugati régiója, USA 3. nyugati régiója, Nyugat-Európa, Észak-Európa). A régiót az Arc-fürt létrehozásához használt erőforráscsoport-régió határozza meg.
  • Az útmutatóban szereplő példák egy K3s-fürtöt használnak .
  • Győződjön meg arról, hogy megfelel a fürtbővítmények általános előfeltételeinek, beleértve az k8s-extension Azure CLI-bővítmény legújabb verzióját is.
  • A tanúsítványkezelőnek támogatnia kell a TLS-t az intracluster log kommunikációhoz. Az útmutató későbbi példái a telepítést irányítják. További információ a tanúsítványkezelőről: cert-manager.io

Mielőtt hozzákezdene, állítsa be az Azure- és fürterőforrások konfigurálásához használandó környezeti változókat. Ha már rendelkezik felügyelt identitással, Azure Key Vault-nal vagy más itt felsorolt erőforrással, frissítse a környezeti változókban szereplő neveket, hogy azok tükrözzék ezeket az erőforrásokat.

az login
export RESOURCE_GROUP="oidc-issuer"
export LOCATION="westus2"
export AZURE_STORAGE_ACCOUNT="oidcissuer$(openssl rand -hex 4)"
export AZURE_STORAGE_CONTAINER="oidc-test"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
export AZURE_TENANT_ID="$(az account show -s $SUBSCRIPTION --query tenantId --output tsv)"
export CURRENT_USER="$(az ad signed-in-user show --query userPrincipalName --output tsv)"
export KEYVAULT_NAME="azwi-kv-$(openssl rand -hex 4)"
export KEYVAULT_SECRET_NAME="my-secret"
export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
az account set --subscription "${SUBSCRIPTION}"
export SERVICE_ACCOUNT_ISSUER="https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/${AZURE_STORAGE_CONTAINER}"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"
export KUBERNETES_NAMESPACE="default"
export SERVICE_ACCOUNT_NAME="workload-identity-sa"

Identitás konfigurálása titkos kulcsokhoz való hozzáféréshez

Egy adott Azure Key Vault-titkos kód eléréséhez és szinkronizálásához a titkos kulcstárnak hozzá kell férnie egy azure-beli felügyelt identitáshoz, amely megfelelő Azure-engedélyekkel rendelkezik a titkos kód eléréséhez. A felügyelt identitást összevonással kell összekapcsolni egy Kubernetes-szolgáltatásfióktal. A Kubernetes-szolgáltatásfiók az, amelyet a Kubernetes-podokban vagy más számítási feladatokban használ a Kubernetes titkos kulcstár titkos kulcsainak eléréséhez. A Titkos tár bővítmény a társított összevont Azure-beli felügyelt identitással lekéri a titkos kulcsokat az Azure Key Vaultból a Kubernetes titkos tárba. A következő szakaszok bemutatják, hogyan lehet ezt beállítani.

Az OIDC nyilvános információinak gazdagépe a fürt szolgáltatásfiók-kiállítójáról

Az összevont identitás használatához jelenleg felhőbeli tárolót kell beállítania, hogy OIDC formátumú információkat tároljon a fürt szolgáltatásfiók-kiállítójának nyilvános kulcsairól. Ebben a szakaszban egy biztonságos, nyilvános Open ID Connect (OIDC) kiállító URL-címet állít be az Azure Blob Storage használatával, majd feltölt egy minimális felderítési dokumentumot a tárfiókba. A háttérben lásd az OIDC-konfigurációt az önkiszolgáló fürtökhöz.

  1. Azure-tárfiók létrehozása.

    az group create --name "${RESOURCE_GROUP}" --location "${LOCATION}"
    az storage account create --resource-group "${RESOURCE_GROUP}" --name "${AZURE_STORAGE_ACCOUNT}" --allow-blob-public-access true
    az storage container create --name "${AZURE_STORAGE_CONTAINER}" --public-access blob
    

    Feljegyzés

    Az "az storage account create" meghiúsulhat, ha az Azure-példány nem engedélyezte a "Microsoft.Storage" szolgáltatást. Ha hibát észlelt, regisztrálja a Microsoft.Storage erőforrás-szolgáltatót az előfizetésében.

  2. Hozzon létre egy felderítési dokumentumot. Töltse fel a tárfiókot, majd ellenőrizze, hogy nyilvánosan elérhető-e.

    cat <<EOF > openid-configuration.json
    {
      "issuer": "https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_STORAGE_CONTAINER}/",
      "jwks_uri": "https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_STORAGE_CONTAINER}/openid/v1/jwks",
      "response_types_supported": [
        "id_token"
      ],
      "subject_types_supported": [
        "public"
      ],
      "id_token_signing_alg_values_supported": [
        "RS256"
      ]
    }
    EOF
    
    az storage blob upload --container-name "${AZURE_STORAGE_CONTAINER}" --file openid-configuration.json --name .well-known/openid-configuration
    curl -s "https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_STORAGE_CONTAINER}/.well-known/openid-configuration"
    
  3. Szerezze be a fürt szolgáltatásfiókjának kiállítójának nyilvános kulcsát a titkos kulcsából. Ezt a parancsot valószínűleg felügyelőként kell futtatnia. Az alábbi példa a k3-ra mutat. A fürt más helyen tárolhatja a szolgáltatásfiók kiállítójának titkos kulcsát.

    sudo openssl rsa -in /var/lib/rancher/k3s/server/tls/service.key -pubout -out sa.pub
    
  4. Töltse le a legújabb azwi parancssori eszközt, amellyel JWKS-dokumentumot hozhat létre a nyilvános kulcsból, és törölheti azt:

    tar -xzf <path to downloaded azwi tar.gz>
    
  5. Hozza létre a JWKS-dokumentumot. Töltse fel a tárfiókba, majd ellenőrizze, hogy nyilvánosan elérhető-e.

    ./azwi jwks --public-keys sa.pub --output-file jwks.json
    az storage blob upload --container-name "${AZURE_STORAGE_CONTAINER}" --file jwks.json --name openid/v1/jwks
    curl -s "https://${AZURE_STORAGE_ACCOUNT}.blob.core.windows.net/${AZURE_STORAGE_CONTAINER}/openid/v1/jwks"
    

A fürt szolgáltatásfiók-jogkivonat-kiállítójának konfigurálása a üzemeltetett URL-címmel

A fürtöt úgy is konfigurálnia kell, hogy szolgáltatásfiók-jogkivonatokat adjon ki az előző szakaszban létrehozott tárfiókra mutató kiállítói URL-cím (service-account-issuer) mezővel. Az összevonási konfigurációval kapcsolatos további háttérért tekintse meg az OIDC-kiállító fürtkonfigurációját.

A hozzáférés-vezérlő konfigurálásával igény szerint konfigurálhatja OwnerReferencesPermissionEnforcement a titkos tár saját engedélyeinek korlátait a vezérlősíkon futó kiemelt erőforrásként. Ez a belépési vezérlő korlátozza, hogy a Titkos tár mennyiben módosíthatja a fürt többi objektumát.

A Kubernetes-fürtnek a Kubernetes 1.27-es vagy újabb verzióját kell futtatnia.

  1. Konfigurálja a kube-apiservert a kiállító URL-címmezőjével és az engedélyek érvényesítésével. Az alábbi példa egy k3s-fürtre mutat. Előfordulhat, hogy a fürt eltérő módon módosítja az API-kiszolgáló argumentumait: --kube-apiserver-arg="--service-account-issuer=${SERVICE_ACCOUNT_ISSUER}" and --kube-apiserver-arg="--enable-admission-plugins=OwnerReferencesPermissionEnforcement".

    • Kérje le a szolgáltatásfiók kiállítójának URL-címét.

      echo $SERVICE_ACCOUNT_ISSUER
      
    • Nyissa meg a K3s-kiszolgáló konfigurációs fájlját.

      sudo nano /etc/systemd/system/k3s.service
      
    • Szerkessze a kiszolgáló konfigurációját az alábbi példához hasonlóan, és cserélje le <a SERVICE_ACCOUNT_ISSUER> a kimenetre echo $SERVICE_ACCOUNT_ISSUER.

      ExecStart=/usr/local/bin/k3s \
        server --write-kubeconfig-mode=644 \
           --kube-apiserver-arg="--service-account-issuer=<SERVICE_ACCOUNT_ISSUER>" \
           --kube-apiserver-arg="--enable-admission-plugins=OwnerReferencesPermissionEnforcement"
      
  2. Indítsa újra a kube-apiservert.

    sudo systemctl daemon-reload
    sudo systemctl restart k3s
    

Azure Key Vault létrehozása;

Hozzon létre egy Azure Key Vaultot , és adjon hozzá egy titkos kulcsot. Ha már rendelkezik Azure Key Vaultdal és titkos kóddal, kihagyhatja ezt a szakaszt.

  1. Azure Key Vault létrehozása:

    az keyvault create --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --name "${KEYVAULT_NAME}" --enable-rbac-authorization
    
  2. Adjon magának "Titkos kódokért felelős tisztviselő" engedélyeket a tárolóhoz, hogy titkos kulcsokat hozzon létre:

    az role assignment create --role "Key Vault Secrets Officer" --assignee ${CURRENT_USER} --scope /subscriptions/${SUBSCRIPTION}/resourcegroups/${RESOURCE_GROUP}/providers/Microsoft.KeyVault/vaults/${KEYVAULT_NAME}
    
  3. Hozzon létre egy titkos kulcsot, és frissítse, hogy két verzióval rendelkezzen:

    az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello!'
    az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello2'
    

Felhasználó által hozzárendelt felügyelt identitás létrehozása

Ezután hozzon létre egy felhasználó által hozzárendelt felügyelt identitást, és adjon neki engedélyeket az Azure Key Vault eléréséhez. Ha már rendelkezik a Key Vault-olvasóval és a Key Vault titkos kulcsainak felhasználói engedélyeivel rendelkező felügyelt identitással az Azure Key Vaulthoz, kihagyhatja ezt a szakaszt. További információ: Felhasználó által hozzárendelt felügyelt identitások létrehozása és Azure RBAC-titkos kód, kulcs és tanúsítványengedélyek használata a Key Vaulttal.

  1. Hozza létre a felhasználó által hozzárendelt felügyelt identitást:

    az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
    
  2. Adja meg az identitás Key Vault-olvasójának és a Key Vault titkos kulcsainak felhasználói engedélyeit. Előfordulhat, hogy várnia kell egy kis időt az identitáslétrehozás replikációjára, mielőtt ezek a parancsok sikeresek lesznek:

    export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -otsv)"
    az role assignment create --role "Key Vault Reader" --assignee "${USER_ASSIGNED_CLIENT_ID}" --scope /subscriptions/${SUBSCRIPTION}/resourcegroups/${RESOURCE_GROUP}/providers/Microsoft.KeyVault/vaults/${KEYVAULT_NAME}
    az role assignment create --role "Key Vault Secrets User" --assignee "${USER_ASSIGNED_CLIENT_ID}" --scope /subscriptions/${SUBSCRIPTION}/resourcegroups/${RESOURCE_GROUP}/providers/Microsoft.KeyVault/vaults/${KEYVAULT_NAME}
    

Összevont identitás hitelesítő adatainak létrehozása

Hozzon létre egy Kubernetes-szolgáltatásfiókot a titkos kulcsokhoz hozzáférést igénylő számítási feladathoz. Ezután hozzon létre egy összevont identitás-hitelesítő adatot a felügyelt identitás, az OIDC szolgáltatásfiók kiállítója és a Kubernetes-szolgáltatásfiók közötti kapcsolat létrehozásához.

  1. Hozzon létre egy Kubernetes-szolgáltatásfiókot, amely a felügyelt identitáshoz lesz összevonva. Jegyzetekkel láthatja el a felhasználó által hozzárendelt felügyelt identitás részleteit.

    kubectl create ns ${KUBERNETES_NAMESPACE}
    
    cat <<EOF | kubectl apply -f -
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: ${SERVICE_ACCOUNT_NAME}
        namespace: ${KUBERNETES_NAMESPACE}
    EOF
    
  2. Összevont identitás hitelesítő adatainak létrehozása:

    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name ${USER_ASSIGNED_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --issuer ${SERVICE_ACCOUNT_ISSUER} --subject system:serviceaccount:${KUBERNETES_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
    

A titkos kódtár telepítése és használata

A Titkos tár Azure Arc-bővítményként érhető el. Az Azure Arc-kompatibilis Kubernetes-fürtök az Azure Arc-kompatibilis Kubernetes-bővítményekkel bővíthetők. A bővítmények lehetővé teszik az Azure-képességeket a csatlakoztatott fürtön, és Azure Resource Manager-alapú felületet biztosítanak a bővítmények telepítéséhez és életciklus-felügyeletéhez.

A Titkos tár Azure Arc-bővítményként van telepítve

A cert-manager és a trust-manager telepítése

A naplók fürtszolgáltatások közötti biztonságos kommunikációához a cert-manager és a trust-manager szükséges, és az Arc-bővítmény előtt kell telepíteni.

  1. Telepítse a tanúsítványkezelőt.

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.3/cert-manager.yaml
    
  2. Telepítse a trust-managert.

    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --wait
    

A Secret Store Azure Arc bővítmény telepítése

A bővítmény telepítése előtt győződjön meg arról, hogy a Kubernetes-fürt csatlakozik az Azure Archoz .

  1. Állítson be két környezeti változót az erőforráscsoporthoz és a csatlakoztatott fürt nevéhez. Ha követte a korábban hivatkozott rövid útmutatót, ezek az "AzureArcTest" és az "AzureArcTest1".

    export ARC_RESOURCE_GROUP="AzureArcTest"
    export ARC_CLUSTER_NAME="AzureArcTest1"
    
  2. Telepítse a Titkos tár bővítményt az Arc-kompatibilis fürtre az alábbi paranccsal:

    az k8s-extension create \
      --cluster-name ${ARC_CLUSTER_NAME} \
      --cluster-type connectedClusters \
      --extension-type microsoft.azure.secretstore \
      --resource-group ${ARC_RESOURCE_GROUP} \
      --release-train preview \
      --name ssarcextension \
      --scope cluster 
    

    Igény szerint módosíthatja az alapértelmezett rotációs lekérdezési időközt a következő hozzáadásával --configuration-settings rotationPollIntervalInSeconds=<time_in_seconds>:

    Paraméter neve Leírás Alapértelmezett érték
    rotationPollIntervalInSeconds Megadja, hogy a titkos tár milyen gyorsan ellenőrzi vagy frissíti a titkos kulcs kezelését. 3600 (1 óra)

A titkos kódtár konfigurálása

Konfigurálja a telepített bővítményt az Azure Key Vault adataival, valamint az egyéni Kubernetes-erőforrások példányainak meghatározásával a fürtre szinkronizálandó titkos kulcsokkal. Kétféle egyéni erőforrást hozhat létre:

  • Egy SecretProviderClass objektum, amely meghatározza a Key Vaulthoz való kapcsolatot.
  • Minden SecretSync szinkronizálandó titkos kód objektuma.

SecretProviderClass Erőforrás létrehozása

Az SecretProviderClass erőforrás az Azure Key Vaulthoz való kapcsolódást, a tároló eléréséhez használt identitást, a szinkronizálni kívánt titkos kulcsokat és az egyes titkos kódok helyileg megőrizni kívánt verzióinak számát határozza meg.

Külön kell lennie SecretProviderClass minden szinkronizálni kívánt Azure Key Vaulthoz, az Azure Key Vaulthoz való hozzáféréshez használt összes identitáshoz és minden cél Kubernetes-névtérhez.

A példa követésével hozzon létre egy vagy több SecretProviderClass YAML-fájlt a Key Vaulthoz és a titkos kulcsokhoz megfelelő értékekkel.

cat <<EOF > spc.yaml
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: secret-provider-class-name                      # Name of the class; must be unique per Kubernetes namespace
  namespace: ${KUBERNETES_NAMESPACE}                    # Kubernetes namespace to make the secrets accessible in
spec:
  provider: azure
  parameters:
    clientID: "${USER_ASSIGNED_CLIENT_ID}"               # Managed Identity Client ID for accessing the Azure Key Vault with.
    keyvaultName: ${KEYVAULT_NAME}                       # The name of the Azure Key Vault to synchronize secrets from.
    objects: |
      array:
        - |
          objectName: ${KEYVAULT_SECRET_NAME}            # The name of the secret to sychronize.
          objectType: secret
          objectVersionHistory: 2                       # [optional] The number of versions to synchronize, starting from latest.
    tenantID: "${AZURE_TENANT_ID}"                       # The tenant ID of the Key Vault 
EOF

SecretSync Objektum létrehozása

Minden szinkronizált titkos kódhoz objektum is szükséges SecretSync a fürtspecifikus információk definiálásához. Itt megadhatja például a fürt titkos kódjának nevét és a fürtben tárolt titkos kód minden verziójának nevét.

Hozzon létre egy SecretSync objektum YAML-fájlt minden titkos kódhoz a sablont követve. A Kubernetes-névtérnek meg kell egyeznie az egyező SecretProviderClassnévtérrel.

cat <<EOF > ss.yaml
apiVersion: secret-sync.x-k8s.io/v1alpha1
kind: SecretSync
metadata:
  name: secret-sync-name                                  # Name of the object; must be unique per Kubernetes namespace
  namespace: ${KUBERNETES_NAMESPACE}                      # Kubernetes namespace
spec:
  serviceAccountName: ${SERVICE_ACCOUNT_NAME}             # The Kubernetes service account to be given permissions to access the secret.
  secretProviderClassName: secret-provider-class-name     # The name of the matching SecretProviderClass with the configuration to access the AKV storing this secret
  secretObject:
    type: Opaque
    data:
    - sourcePath: ${KEYVAULT_SECRET_NAME}/0                # Name of the secret in Azure Key Vault with an optional version number (defaults to latest)
      targetKey: ${KEYVAULT_SECRET_NAME}-data-key0         # Target name of the secret in the Kubernetes Secret Store (must be unique)
    - sourcePath: ${KEYVAULT_SECRET_NAME}/1                # [optional] Next version of the AKV secret. Note that versions of the secret must match the configured objectVersionHistory in the secrets provider class 
      targetKey: ${KEYVAULT_SECRET_NAME}-data-key1         # [optional] Next target name of the secret in the K8s Secret Store
EOF

A konfigurációs hitelesítésszolgáltatók alkalmazása

Alkalmazza a konfigurációs egyéni erőforrásokat a kubectl apply következő paranccsal:

kubectl apply -f ./spc.yaml
kubectl apply -f ./ss.yaml

A Titkos tár automatikusan megkeresi a titkos kulcsokat, és elkezdi szinkronizálni őket a fürtbe.

Konfigurációs beállítások megtekintése

A két egyéni erőforrástípus további konfigurációs beállításainak megtekintéséhez használja a kubectl describe parancsot a fürt CRD-jeinek vizsgálatához:

# Get the name of any applied CRD(s)
kubectl get crds -o custom-columns=NAME:.metadata.name

# View the full configuration options and field parameters for a given CRD
kubectl describe crd secretproviderclass
kubectl describe crd secretsync

Titkos kódok fürtre való szinkronizálásának megfigyelése

A konfiguráció alkalmazása után a titkos kulcsok automatikusan szinkronizálódnak a fürtre a Titkos tár telepítésekor megadott ütemben.

Szinkronizált titkos kódok megtekintése

Tekintse meg a fürthöz szinkronizált titkos kulcsokat az alábbi parancs futtatásával:

# View a list of all secrets in the namespace
kubectl get secrets -n ${KUBERNETES_NAMESPACE}

# View details of all secrets in the namespace
kubectl get secrets -n ${KUBERNETES_NAMESPACE} -o yaml

Legutóbbi szinkronizálási állapot megtekintése

Az adott titkos kód legutóbbi szinkronizálási állapotának megtekintéséhez használja az kubectl describe SecretSync objektum parancsát. A kimenet tartalmazza a titkos kódok létrehozási időbélyegét, a titkos kód verzióit és az egyes szinkronizálási események részletes állapotüzenetét. Ez a kimenet használható a kapcsolati vagy konfigurációs hibák diagnosztizálására, valamint a titkos kód értékének változásának megfigyelésére.

kubectl describe secretsync secret-sync-name -n ${KUBERNETES_NAMESPACE}

Titkos kódok értékeinek megtekintése

A Kubernetes titkos tárában tárolt szinkronizált titkos kódok értékeinek megtekintéséhez használja a következő parancsot:

kubectl get secret secret-sync-name -n ${KUBERNETES_NAMESPACE} -o jsonpath="{.data.${KEYVAULT_SECRET_NAME}-data-key0}" | base64 -d
kubectl get secret secret-sync-name -n ${KUBERNETES_NAMESPACE} -o jsonpath="{.data.${KEYVAULT_SECRET_NAME}-data-key1}" | base64 -d

Hibaelhárítás

A Titkos kulcstár egy Kubernetes-üzemelő példány, amely egy podot tartalmaz két tárolóval: a vezérlőt, amely a titkos kulcsok fürtben való tárolását kezeli, valamint a szolgáltatót, amely kezeli az Azure Key Vaulthoz való hozzáférést és a titkos kulcsok lekérését. Minden szinkronizált titkos kód rendelkezik egy SecretSync objektummal, amely a titkos kód Azure Key Vaultból a fürt titkos kódtárba való szinkronizálásának állapotát tartalmazza.

A probléma elhárításához először tekintse meg az SecretSync objektum állapotát a Legutóbbi szinkronizálás állapotának megtekintése című cikkben leírtak szerint. Az alábbi táblázat a gyakori állapottípusokat, azok jelentését és a hibák elhárításának lehetséges hibaelhárítási lépéseit sorolja fel.

SecretSync állapottípus Részletek További javítás/vizsgálat lépései
CreateSucceeded A titkos kód létrehozása sikeresen megtörtént. n.a.
CreateFailedProviderError A titkos kódok létrehozása a szolgáltatóval kapcsolatos probléma (az Azure Key Vaulthoz való csatlakozás) miatt meghiúsult. Ez a hiba oka lehet az internetkapcsolat, a titkos kulcsok identitásszinkronizálásához szükséges engedélyek hiánya, a SecretProviderClasstitkos kulcsok helytelen konfigurálása vagy más problémák. További vizsgálathoz tekintse meg a szolgáltató naplóit az alábbi parancsokkal:
kubectl get pods -n azure-secret-store
kubectl logs <secret-sync-controller-pod-name> -n azure-secret-store --container='provider-azure-installer'
CreateFailedInvalidLabel A titkos kulcs létrehozása meghiúsult, mert a titkos kód már létezik a titkos kulcsok kezeléséhez használt kubernetes-címke nélkül. Távolítsa el a meglévő címkét és titkos kulcsot, és engedélyezze a titkos tár számára a titkos kód újbóli létrehozását: kubectl delete secret <secret-name>
Ha azt szeretné, hogy a titkos tár gyorsabban hozza létre újra a titkos kulcsot, mint a beállított rotációs lekérdezési időköz, törölje az SecretSync objektumot (kubectl delete secretsync <secret-name>) és alkalmazza újra a titkos szinkronizálási osztályt (kubectl apply -f <path_to_secret_sync>).
CreateFailedInvalidAnnotation A titkos kulcs létrehozása meghiúsult, mert a titkos kód már létezik a titkos kulcsok kezeléséhez használt megfelelő Kubernetes-széljegyzet nélkül. Távolítsa el a meglévő jegyzetet és titkos kulcsot, és engedélyezze a titkos tár számára a titkos kód újbóli létrehozását: kubectl delete secret <secret-name>
Ha azt szeretné, hogy a titkos tár gyorsabban hozza létre újra a titkos kulcsot, mint a beállított rotációs lekérdezési időköz, törölje az SecretSync objektumot (kubectl delete secretsync <secret-name>) és alkalmazza újra a titkos szinkronizálási osztályt (kubectl apply -f <path_to_secret_sync>).
UpdateNoValueChangeSucceeded A Titkos tár a konfigurált lekérdezési időköz végén ellenőrizte az Azure Key Vault frissítéseit, de nem történt szinkronizálási módosítás. n.a.
UpdateValueChangeOrForceUpdateSucceeded A Titkos tár ellenőrizte az Azure Key Vault frissítéseit, és sikeresen frissítette az értéket. n.a.
UpdateFailedInvalidLabel A titkos kód frissítése nem sikerült, mert a titkos kulcsok kezelésére használt titkos kód címkéje módosult. Távolítsa el a meglévő címkét és titkos kulcsot, és engedélyezze a titkos tár számára a titkos kód újbóli létrehozását: kubectl delete secret <secret-name>
Ha azt szeretné, hogy a titkos tár gyorsabban hozza létre újra a titkos kulcsot, mint a beállított rotációs lekérdezési időköz, törölje az SecretSync objektumot (kubectl delete secretsync <secret-name>) és alkalmazza újra a titkos szinkronizálási osztályt (kubectl apply -f <path_to_secret_sync>).
UpdateFailedInvalidAnnotation A titkos kód frissítése nem sikerült, mert módosult a titkos kulcsok kezelésére használt titkos kód megjegyzése. Távolítsa el a meglévő jegyzetet és titkos kulcsot, és engedélyezze a titkos tár számára a titkos kód újbóli létrehozását: kubectl delete secret <secret-name>
Ha azt szeretné, hogy a titkos tár gyorsabban hozza létre újra a titkos kulcsot, mint a beállított rotációs lekérdezési időköz, törölje az SecretSync objektumot (kubectl delete secretsync <secret-name>) és alkalmazza újra a titkos szinkronizálási osztályt (kubectl apply -f <path_to_secret_sync>).
UpdateFailedProviderError A titkos kód frissítése a szolgáltatóval kapcsolatos probléma (az Azure Key Vaulthoz való csatlakozás) miatt meghiúsult. Ez a hiba oka lehet az internetkapcsolat, a titkos kulcsok identitásszinkronizálásához szükséges engedélyek hiánya, a SecretProviderClasskonfigurációja vagy más problémák. További vizsgálathoz tekintse meg a szolgáltató naplóit az alábbi parancsokkal:
kubectl get pods -n azure-secret-store
kubectl logs <secret-sync-controller-pod-name> -n azure-secret-store --container='provider-azure-installer'
UserInputValidationFailed A titkos kód frissítése nem sikerült, mert a titkos kód szinkronizálási osztálya helytelenül lett konfigurálva (például érvénytelen titkos kódtípus). Tekintse át a titkos szinkronizálási osztály definícióját, és javítsa ki a hibákat. Ezután törölje az SecretSync objektumot (kubectl delete secretsync <secret-name>), törölje a titkos szinkronizálási osztályt (kubectl delete -f <path_to_secret_sync>), és alkalmazza újra a titkos szinkronizálási osztályt (kubectl apply -f <path_to_secret_sync>).
ControllerSpcError A titkos kód frissítése meghiúsult, mert a titkos tár nem tudta lekérni a szolgáltatói osztályt, vagy a szolgáltatói osztály helytelenül van konfigurálva. Tekintse át a szolgáltatói osztályt, és javítsa ki a hibákat. Ezután törölje az SecretSync objektumot (kubectl delete secretsync <secret-name>), törölje a szolgáltatói osztályt (kubectl delete -f <path_to_provider>), és alkalmazza újra a szolgáltatóosztályt (kubectl apply -f <path_to_provider>).
ControllerInternalError A titkos kód frissítése a titkos tár belső hibája miatt meghiúsult. További információkért tekintse meg a titkos tár naplóit vagy az eseményeket:
kubectl get pods -n azure-secret-store
kubectl logs <secret-sync-controller-pod-name> -n azure-secret-store --container='manager'
SecretPatchFailedUnknownError A titkos kód frissítése a Kubernetes titkos értékének javítása során meghiúsult. Ez a hiba akkor fordulhat elő, ha a titkos kulcsot a titkos táron kívüli személy módosította, vagy ha a titkos tár frissítése során problémák léptek fel. Próbálja meg törölni a titkos kulcsot és SecretSync az objektumot, majd hagyja, hogy a titkos tár újra létrehozza a titkos kulcsot a titkos szinkronizálási CR ismételt alkalmazásával:
kubectl delete secret <secret-name>
kubectl delete secretsync <secret-name>
kubectl apply -f <path_to_secret_sync>

A titkos tár eltávolítása

A titkos kulcstár eltávolításához és a titkos kódok szinkronizálásának leállításához távolítsa el a az k8s-extension delete következő paranccsal:

az k8s-extension delete --name ssarcextension --cluster-name $ARC_CLUSTER_NAME  --resource-group $RESOURCE_GROUP  --cluster-type connectedClusters    

A bővítmény eltávolítása nem távolítja el a titkos kulcsokat, SecretSync objektumokat vagy CRD-ket a fürtből. Ezeket az objektumokat közvetlenül a programból kubectlkell eltávolítani.

A SecretSync CRD törlése eltávolítja az összes SecretSync objektumot, és alapértelmezés szerint eltávolítja az összes saját titkos kulcsot, de a titkos kódok megmaradhatnak, ha:

A fenti esetekben a titkos kulcsokat közvetlenül a használatával kubectlkell törölni.

Következő lépések