Podłącz dostawcę tożsamości platformy Azure do sterownika CSI magazynu sekretów Azure Key Vault w usłudze Azure Kubernetes Service (AKS)

Sterownik interfejsu CSI (Container Storage Interface) magazynu tajemnic w usłudze Azure Kubernetes Service (AKS) zapewnia różne metody dostępu opartego na tożsamości do usługi Azure Key Vault. W tym artykule przedstawiono metody i najlepsze praktyki dotyczące tego, kiedy używać Azure role-based access control (Azure RBAC) lub modeli zabezpieczeń OpenID Connect (OIDC) w celu uzyskania dostępu do magazynu kluczy i klastra AKS.

Możesz użyć jednej z następujących metod dostępu:

  • Łącznik usługi z tożsamością zarządzaną
  • Identyfikator obciążenia
  • Tożsamość przypisana przez użytkownika w ramach zarządzania

Dowiedz się, jak nawiązać połączenie z usługą Azure Key Vault za pomocą sterownika magazynu sekretów CSI w klastrze usługi Azure Kubernetes Service (AKS) przy użyciu Łącznika usługi. W tym artykule wykonasz następujące zadania:

  • Zarejestruj wymaganych dostawców zasobów Azure.
  • Utwórz połączenie między klastrem AKS a usługą Azure Key Vault za pomocą łącznika usługi Service Connector.
  • Stwórz SecretProviderClass CRD i Pod, który korzysta z dostawcy CSI do testowania połączenia.
  • Sprawdź, czy zasobnik może uzyskać dostęp do wpisu tajnego w magazynie kluczy.

Wymagania wstępne

Początkowa konfiguracja

  1. Jeśli używasz Service Connector po raz pierwszy, uruchom polecenie az provider register, aby zarejestrować dostawców zasobów dla Service Connector i Kubernetes Configuration.

    az provider register -n Microsoft.ServiceLinker
    
    az provider register -n Microsoft.KubernetesConfiguration
    

    Wskazówka

    Możesz sprawdzić, czy ci dostawcy zasobów zostali już zarejestrowani, uruchamiając polecenia az provider show -n "Microsoft.ServiceLinker" --query registrationState i az provider show -n "Microsoft.KubernetesConfiguration" --query registrationState.

  2. Opcjonalnie użyj polecenia interfejsu wiersza polecenia platformy Azure, aby uzyskać listę obsługiwanych usług docelowych dla klastra usługi AKS.

    az aks connection list-support-types --output table
    

Tworzenie połączenia usługi w AKS za pomocą Łącznika Usług

Połączenie usługi z usługą Azure Key Vault można utworzyć przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

  1. W portalu Azure przejdź do zasobu klastra AKS.

  2. W menu usługi w obszarze Ustawienia wybierz pozycję Service Connector>Utwórz.

  3. Na stronie Tworzenie połączenia skonfiguruj następujące ustawienia na karcie Podstawowe :

    • Namespace Kubernetes: wybierz default.
    • Typ usługi: wybierz pozycję Key Vault i zaznacz pole wyboru, aby włączyć dostawcę CSI usługi Azure Key Vault.
    • Nazwa połączenia: wprowadź nazwę połączenia.
    • Subskrypcja: wybierz subskrypcję zawierającą magazyn kluczy.
    • Magazyn kluczy (Key Vault): wybierz utworzony magazyn kluczy.
    • Typ klienta: wybierz Brak.
  4. Wybierz Recenzuj + utwórz, a następnie wybierz Utwórz, aby utworzyć połączenie.

Testowanie połączenia

Klonowanie przykładowego repozytorium i wdrażanie plików manifestu

  1. Sklonuj przykładowe repozytorium przy użyciu git clone polecenia .

    git clone https://github.com/Azure-Samples/serviceconnector-aks-samples.git
    
  2. Zmień katalogi na przykład dostawcy CSI usługi Azure Key Vault.

    cd serviceconnector-aks-samples/azure-keyvault-csi-provider
    
  3. W pliku secret_provider_class.yaml zastąp następujące symbole zastępcze informacjami o Azure Key Vault:

    • Zastąp <AZURE_KEYVAULT_NAME> nazwą połączonego i utworzonego magazynu kluczy.
    • Zastąp element <AZURE_KEYVAULT_TENANTID> identyfikatorem dzierżawcy magazynu kluczy.
    • Zastąp <AZURE_KEYVAULT_CLIENTID> identyfikatorem klienta tożsamości dodatku azureKeyvaultSecretsProvider.
    • Zastąp <KEYVAULT_SECRET_NAME> tajemnicą magazynu kluczy, którą utworzyłeś. Na przykład ExampleSecret.
  4. Wdróż CRD SecretProviderClass przy użyciu polecenia kubectl apply.

    kubectl apply -f secret_provider_class.yaml
    
  5. Wdróż plik manifestu Pod przy użyciu polecenia kubectl apply.

    Polecenie tworzy pod o nazwie sc-demo-keyvault-csi w domyślnej przestrzeni nazw klastra AKS.

    kubectl apply -f pod.yaml
    

Weryfikowanie połączenia

  1. Sprawdź, czy zasobnik został pomyślnie utworzony przy użyciu polecenia kubectl get.

    kubectl get pod/sc-demo-keyvault-csi
    

    Po uruchomieniu zasobnika jest dostępna instalowana zawartość na ścieżce woluminu określonej w wdrożeniu YAML.

  2. Pokaż sekrety przechowywane w magazynie sekrety za pomocą polecenia kubectl exec.

    kubectl exec sc-demo-keyvault-csi -- ls /mnt/secrets-store/
    
  3. Wyświetl tajemnicę przy użyciu polecenia kubectl exec.

    To przykładowe polecenie wyświetla wpis tajny testowy o nazwie ExampleSecret.

    kubectl exec sc-demo-keyvault-csi -- cat /mnt/secrets-store/ExampleSecret
    

Wymagania wstępne dotyczące sterownika CSI z tożsamością obciążenia roboczego

Uzyskiwanie dostępu przy użyciu obciążeniowego ID Microsoft Entra

Tożsamość obciążeń Microsoft Entra to tożsamość, której aplikacja lub usługa używa do uwierzytelniania się wobec innych usług platformy Azure, takich jak obciążenia robocze w oprogramowaniu. Sterownik Secrets Store CSI integruje się z natywnymi funkcjami platformy Kubernetes, aby federować się z zewnętrznymi dostawcami tożsamości.

W tym modelu zabezpieczeń klaster usługi AKS działa jako wystawca tokenu. Gdy sterownik Secrets Store CSI Driver montuje wolumin, żąda tokenu konta usługi w Kubernetes, a dostawca Azure Key Vault wymienia ten token na token Microsoft Entra. Aplikacja odczytuje zamontowane pliki i nie wymaga biblioteki klienckiej Azure Identity ani biblioteki Microsoft Authentication Library (MSAL) w tym przepływie instalowania woluminu. Jeśli aplikacja niezależnie żąda Microsoft Entra tokenów w celu wywoływania chronionych interfejsów API, użyj Azure Identity lub MSAL w aplikacji.

Uwaga

  • Ta metoda uwierzytelniania zastępuje tożsamość zarządzaną przez pod firmy Microsoft (wersja próbna). Tożsamość typu open source Microsoft Entra zarządzana przez pod (wersja przedpremierowa) w usłudze Azure Kubernetes Service została uznana za przestarzałą od 24 października 2022 r.
  • Obsługa identyfikatora obciążenia Microsoft Entra obejmuje zarówno klastry systemu Windows, jak i Linux.

Konfigurowanie tożsamości obciążenia

  1. Ustaw subskrypcję przy użyciu az account set polecenia .

    export SUBSCRIPTION_ID=<subscription id>
    export RESOURCE_GROUP=<resource group name>
    export UAMI=<name for user assigned identity>
    export KEYVAULT_NAME=<existing keyvault name>
    export CLUSTER_NAME=<aks cluster name>
    
    az account set --subscription $SUBSCRIPTION_ID
    
  2. Utwórz tożsamość zarządzaną przy użyciu az identity create polecenia .

    Uwaga

    W tym kroku założono, że masz istniejący klaster usługi AKS z włączoną tożsamością obciążenia. Jeśli tożsamość obciążenia nie jest włączona, zobacz Włączanie tożsamości obciążenia w istniejącym klastrze usługi AKS , aby ją włączyć.

    az identity create --name $UAMI --resource-group $RESOURCE_GROUP
    
    export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group $RESOURCE_GROUP --name $UAMI --query 'clientId' -o tsv)"
    export KEYVAULT_TENANT_ID="$(az keyvault show --name $KEYVAULT_NAME --query properties.tenantId -o tsv)"
    
  3. Utwórz przypisanie roli, które przyznaje tożsamości zadania uprawnienia dostępu do tajnych danych w magazynie kluczy, kluczy dostępu i certyfikatów przy użyciu polecenia az role assignment create.

    Ważne

    • Jeśli skonfigurujesz magazyn kluczy przy użyciu --enable-rbac-authorization i używasz typu key lub cert, przypisz rolę Key Vault Certificate User, aby nadać uprawnienia.
    • Jeśli magazyn kluczy jest ustawiony z --enable-rbac-authorization i używasz secret, przypisz rolę Key Vault Secrets User.
    • Jeśli magazyn kluczy nie jest ustawiony za pomocą --enable-rbac-authorization, możesz użyć polecenia az keyvault set-policy z parametrem --key-permissions get, --certificate-permissions get lub --secret-permissions get, aby utworzyć zasady magazynu kluczy i przyznać dostęp do kluczy, certyfikatów lub wpisów tajnych. Na przykład:
    az keyvault set-policy --name $KEYVAULT_NAME --key-permissions get --secret-permissions get --object-id <identity-object-id>
    
    export KEYVAULT_SCOPE=$(az keyvault show --name $KEYVAULT_NAME --query id -o tsv)
    
    # Example commands for a key vault with Azure RBAC enabled using `key` and `secret` types
    az role assignment create --role "Key Vault Certificate User" --assignee $USER_ASSIGNED_CLIENT_ID --scope $KEYVAULT_SCOPE
    az role assignment create --role "Key Vault Secrets User" --assignee $USER_ASSIGNED_CLIENT_ID --scope $KEYVAULT_SCOPE
    
  4. Pobierz adres URL wystawcy OIDC klastra AKS przy użyciu polecenia az aks show.

    Uwaga

    W tym kroku założono, że masz istniejący klaster usługi AKS z włączonym adresem URL wystawcy OIDC. Jeśli adres URL wystawcy OIDC nie jest włączony, zobacz Aktualizowanie klastra usługi AKS za pomocą wystawcy OIDC w celu jego włączenia.

    export AKS_OIDC_ISSUER="$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "oidcIssuerProfile.issuerUrl" -o tsv)"
    echo $AKS_OIDC_ISSUER
    
  5. Utwórz konto usługi Kubernetes dla obciążenia. Zaktualizuj wartości pól SERVICE_ACCOUNT_NAME i SERVICE_ACCOUNT_NAMESPACE, podając nazwę konta usługi Kubernetes i jego przestrzeń nazw.

    export SERVICE_ACCOUNT_NAME="workload-identity-sa"  # sample name; can be changed
    export SERVICE_ACCOUNT_NAMESPACE="default" # can be changed to namespace of your workload
    
    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        azure.workload.identity/client-id: ${USER_ASSIGNED_CLIENT_ID}
      name: ${SERVICE_ACCOUNT_NAME}
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
    EOF
    
  6. Utwórz dane uwierzytelniające tożsamości federacyjnej między tożsamością zarządzaną, wystawcą konta usługi i podmiotem przy użyciu polecenia az identity federated-credential create.

    export FEDERATED_IDENTITY_NAME="aksfederatedidentity" # can be changed as needed
    
    az identity federated-credential create --name $FEDERATED_IDENTITY_NAME --identity-name $UAMI --resource-group $RESOURCE_GROUP --issuer ${AKS_OIDC_ISSUER} --subject system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
    
  7. SecretProviderClass Wdróż element przy użyciu kubectl apply polecenia i następującego skryptu YAML.

    Poniższe parametry konfigurują dostęp oparty na tożsamości obciążenia:

    • usePodIdentity: ustaw wartość na "false" w przypadku korzystania z tożsamości obciążenia.
    • clientID: Ustaw na ${USER_ASSIGNED_CLIENT_ID}, identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika używanej na potrzeby tożsamości obciążenia.
    • cloudName:Fakultatywny. Pozostaw wartość pustą, aby użyć środowiska domyślnego AzurePublicCloud .
    • objectType: Ustaw na typ obiektu Key Vault do zamontowania. Prawidłowe wartości to secret, key i cert.
    • tenantId: Ustaw na identyfikator dzierżawy zawierającej magazyn kluczy.
    cat <<EOF | kubectl apply -f -
    # This is a SecretProviderClass example using workload identity to access your key vault
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: azure-kvname-wi # needs to be unique per namespace
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
    spec:
      provider: azure
      parameters:
        usePodIdentity: "false"
        clientID: "${USER_ASSIGNED_CLIENT_ID}" # Setting this to use workload identity
        keyvaultName: ${KEYVAULT_NAME}       # Set to the name of your key vault
        cloudName: ""                         # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud
        objects:  |
          array:
            - |
              objectName: secret1             # Set to the name of your secret
              objectType: secret              # object types: secret, key, or cert
              objectVersion: ""               # [OPTIONAL] object versions, default to latest if empty
            - |
              objectName: key1                # Set to the name of your key
              objectType: key
              objectVersion: ""
        tenantId: "${KEYVAULT_TENANT_ID}"     # The tenant ID of the key vault
    EOF
    

    Uwaga

    Jeśli używasz objectAlias zamiast objectName, zaktualizuj skrypt YAML, aby go uwzględnić.

    Uwaga

    Aby SecretProviderClass działało prawidłowo, przed odwoływaniem się do tych elementów w sekcji objects, upewnij się, że Azure Key Vault jest wypełniony tajemnicami, kluczami lub certyfikatami.

  8. Wdróż przykładowy zasobnik przy użyciu kubectl apply polecenia i następującego skryptu YAML.

    cat <<EOF | kubectl apply -f -
    # This is a sample pod definition for using SecretProviderClass and workload identity to access your key vault
    kind: Pod
    apiVersion: v1
    metadata:
      name: busybox-secrets-store-inline-wi
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
      labels:
        azure.workload.identity/use: "true"
    spec:
      serviceAccountName: ${SERVICE_ACCOUNT_NAME}
      containers:
        - name: busybox
          image: registry.k8s.io/e2e-test-images/busybox:1.29-4
          command:
            - "/bin/sleep"
            - "10000"
          volumeMounts:
          - name: secrets-store01-inline
            mountPath: "/mnt/secrets-store"
            readOnly: true
      volumes:
        - name: secrets-store01-inline
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: "azure-kvname-wi"
    EOF
    

Weryfikowanie wpisów tajnych w usłudze Key Vault za pomocą tożsamości obciążenia

Po uruchomieniu zasobnika zamontowana zawartość jest dostępna pod /mnt/secrets-store. Użyj następujących poleceń, aby zweryfikować swoje sekrety i wypisać testowy sekret.

  1. Pokaż sekrety przechowywane w repozytorium sekretów przy użyciu następującego polecenia.

    kubectl exec --namespace $SERVICE_ACCOUNT_NAMESPACE busybox-secrets-store-inline-wi -- ls /mnt/secrets-store/
    
  2. Wyświetl sekret w przechowalni przy użyciu następującego polecenia. Przykładowe polecenie wyświetla tajny kod testowy secret1.

    kubectl exec --namespace $SERVICE_ACCOUNT_NAMESPACE busybox-secrets-store-inline-wi -- cat /mnt/secrets-store/secret1
    

Wymagania wstępne dotyczące sterownika CSI z tożsamością zarządzaną

Dostęp za pomocą tożsamości zarządzanej

Ta metoda używa tożsamości zarządzanej przypisanej przez użytkownika, którą usługa AKS automatycznie tworzy po włączeniu dostawcy Azure Key Vault dla Secrets Store CSI Driver. Tożsamość ma nazwę azurekeyvaultsecretsprovider-xxxxx, jest przechowywana w grupie zasobów węzła i jest przypisywana do zestawu skalowania maszyn wirtualnych.

Tożsamość zarządzana Microsoft Entra umożliwia zasobowi platformy Azure lub obciążeniu uwierzytelnianie się w usługach obsługujących uwierzytelnianie Microsoft Entra bez przechowywania poświadczeń w kodzie. Nadaj tej tożsamości odpowiednie uprawnienia do płaszczyzny danych usługi Key Vault za pomocą kontroli dostępu opartej na rolach platformy Azure lub zasad dostępu, a następnie użyj jej w poniższych krokach.

Wybierz kartę odpowiadającą temu, jak utworzono klaster AKS i magazyn kluczy w artykule Używanie dostawcy Azure Key Vault dla sterownika CSI magazynu wpisów tajnych w klastrze Azure Kubernetes Service (AKS). Jeśli wdrożyłeś przetestowany przykład Terraforma, tożsamości dodatku została już przypisana rola Key Vault Secrets User, więc pomiń krok ręcznego przypisania roli.

Konfigurowanie tożsamości zarządzanej

  1. Uzyskaj dostęp do magazynu kluczy przy użyciu az aks show polecenia i przypisanej przez użytkownika tożsamości zarządzanej utworzonej przez dodatek. Należy również pobrać dane tożsamości clientId, które są używane w kolejnych krokach przy tworzeniu obiektu SecretProviderClass.

    export RESOURCE_GROUP=<resource-group>
    export CLUSTER_NAME=<cluster-name>
    export KEYVAULT_NAME=<key-vault-name>
    
    export IDENTITY_OBJECT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query addonProfiles.azureKeyvaultSecretsProvider.identity.objectId -o tsv)
    export USER_ASSIGNED_CLIENT_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId -o tsv)
    

    Alternatywnie możesz utworzyć nową tożsamość zarządzaną i przypisać ją do zestawu skalowania maszyn wirtualnych lub do każdego wystąpienia maszyny wirtualnej w zestawie dostępności.

    export USER_ASSIGNED_IDENTITY_NAME=<identity-name>
    
    az identity create --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME
    
    export IDENTITY_RESOURCE_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME --query id -o tsv)
    export IDENTITY_OBJECT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME --query principalId -o tsv)
    export USER_ASSIGNED_CLIENT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ASSIGNED_IDENTITY_NAME --query clientId -o tsv)
    

    W przypadku klastra opartego na zestawie skalowania maszyn wirtualnych przypisz tożsamość do zestawu skalowania maszyn wirtualnych.

    az vmss identity assign --resource-group <node-resource-group> --name <agent-pool-vmss> --identities $IDENTITY_RESOURCE_ID
    

    W przypadku klastra opartego na zestawie dostępności przypisz tożsamość do każdego wystąpienia maszyny wirtualnej w zestawie dostępności.

    az vm identity assign --resource-group <node-resource-group> --name <agent-pool-vm> --identities $IDENTITY_RESOURCE_ID
    
  2. Utwórz przypisanie roli, które przyznaje tożsamości uprawnienie dostępu do tajemnic magazynu kluczy, kluczy dostępu i certyfikatów przy użyciu polecenia az role assignment create.

    Ważne

    • Jeśli skonfigurujesz magazyn kluczy przy użyciu --enable-rbac-authorization i używasz typu key lub cert, przypisz rolę Key Vault Certificate User.
    • Jeśli magazyn kluczy jest ustawiony z --enable-rbac-authorization i używasz secret, przypisz rolę Key Vault Secrets User.
    • Jeśli magazyn kluczy nie jest ustawiony za pomocą --enable-rbac-authorization, możesz użyć polecenia az keyvault set-policy z parametrem --key-permissions get, --certificate-permissions get lub --secret-permissions get, aby utworzyć zasady magazynu kluczy i przyznać dostęp do kluczy, certyfikatów lub wpisów tajnych. Na przykład:
    az keyvault set-policy --name $KEYVAULT_NAME --key-permissions get --secret-permissions get --object-id $IDENTITY_OBJECT_ID
    
    export KEYVAULT_SCOPE=$(az keyvault show --name $KEYVAULT_NAME --query id -o tsv)
    
    # Example commands for a key vault with Azure RBAC enabled using `key` and `secret` types
    az role assignment create --role "Key Vault Certificate User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type ServicePrincipal --scope $KEYVAULT_SCOPE
    az role assignment create --role "Key Vault Secrets User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type ServicePrincipal --scope $KEYVAULT_SCOPE
    
  3. Utwórz SecretProviderClass, używając identyfikatora klienta usługi tożsamości. Pamiętaj, aby użyć własnych wartości dla obiektów do pobrania z magazynu kluczy.

    Następujące parametry konfigurują dostęp przy użyciu tożsamości zarządzanej przypisanej przez użytkownika:

    • usePodIdentity: ustaw wartość na "false" w przypadku korzystania z tożsamości zarządzanej.
    • useVMManagedIdentity: Ustaw na "true", aby włączyć tryb tożsamości zarządzanej.
    • userAssignedIdentityID: Ustaw na identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika.
    • tenantId: Ustaw na identyfikator dzierżawy zawierającej magazyn kluczy.
    export KEYVAULT_TENANT_ID=$(az keyvault show --name $KEYVAULT_NAME --query properties.tenantId -o tsv)
    
    cat <<EOF > secretproviderclass.yaml
    # This is a SecretProviderClass example using user-assigned identity to access your key vault
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: azure-kvname-user-msi
    spec:
      provider: azure
      parameters:
        usePodIdentity: "false"
        useVMManagedIdentity: "true"          # Set to true for using managed identity
        userAssignedIdentityID: ${USER_ASSIGNED_CLIENT_ID} # Set the client ID of the user-assigned managed identity to use
        keyvaultName: ${KEYVAULT_NAME}         # Set to the name of your key vault
        cloudName: ""                         # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud
        objects:  |
          array:
            - |
              objectName: secret1
              objectType: secret              # object types: secret, key, or cert
              objectVersion: ""               # [OPTIONAL] object versions, default to latest if empty
            - |
              objectName: key1
              objectType: key
              objectVersion: ""
        tenantId: ${KEYVAULT_TENANT_ID}       # The tenant ID of the key vault
    EOF
    

    Uwaga

    Jeśli używasz objectAlias zamiast objectName, pamiętaj o zaktualizowaniu skryptu YAML.

    Uwaga

    Aby SecretProviderClass działało prawidłowo, przed odwoływaniem się do tych elementów w sekcji objects, upewnij się, że Azure Key Vault jest wypełniony tajemnicami, kluczami lub certyfikatami.

  4. Zastosuj SecretProviderClass do swojego klastra przy użyciu polecenia kubectl apply.

    kubectl apply -f secretproviderclass.yaml
    
  5. Utwórz manifest zasobnika o nazwie pod.yaml przy użyciu następującego polecenia.

    cat <<EOF > pod.yaml
    # This is a sample pod definition for using SecretProviderClass and the user-assigned identity to access your key vault
    kind: Pod
    apiVersion: v1
    metadata:
      name: busybox-secrets-store-inline-user-msi
    spec:
      containers:
        - name: busybox
          image: registry.k8s.io/e2e-test-images/busybox:1.29-4
          command:
            - "/bin/sleep"
            - "10000"
          volumeMounts:
          - name: secrets-store01-inline
            mountPath: "/mnt/secrets-store"
            readOnly: true
      volumes:
        - name: secrets-store01-inline
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: "azure-kvname-user-msi"
    EOF
    
  6. Nałóż pod na klaster przy użyciu polecenia kubectl apply.

    kubectl apply -f pod.yaml
    

Weryfikowanie wpisów tajnych w usłudze Key Vault przy użyciu tożsamości zarządzanej

Po uruchomieniu zasobnika zamontowana zawartość jest dostępna pod /mnt/secrets-store. Użyj następujących poleceń, aby zweryfikować swoje sekrety i wypisać testowy sekret.

  1. Pokaż sekrety przechowywane w repozytorium sekretów przy użyciu następującego polecenia.

    kubectl exec busybox-secrets-store-inline-user-msi -- ls /mnt/secrets-store/
    
  2. Wyświetl sekret w przechowalni przy użyciu następującego polecenia. Przykładowe polecenie wyświetla tajny kod testowy secret1.

    kubectl exec busybox-secrets-store-inline-user-msi -- cat /mnt/secrets-store/secret1
    

Uzyskiwanie certyfikatów i kluczy

Projekt usługi Azure Key Vault umożliwia ostre rozróżnienie między kluczami, wpisami tajnymi i certyfikatami. Cechy certyfikatów usługi Key Vault zostały zaprojektowane tak, aby korzystać z funkcjonalności kluczy i tajemnic. Kiedy tworzysz certyfikat w magazynie kluczy, tworzony jest adresowalny klucz i tajemnica o tej samej nazwie. Ten klucz umożliwia operacje uwierzytelniania, a sekret pozwala na pobranie wartości certyfikatu jako sekretu.

Certyfikat magazynu kluczy zawiera również metadane publicznego certyfikatu x509. Skarbiec kluczy przechowuje zarówno składniki publiczne, jak i prywatne certyfikatu w tajemnicy. Każdy składnik można uzyskać, określając objectType w SecretProviderClass. W poniższej tabeli przedstawiono wartości objectType, które można określić w SecretProviderClass, aby pobrać różne elementy certyfikatu magazynu kluczy, oraz to, co zwraca każda z tych wartości:

objectType Wartość Wartość zwracana Zwraca cały łańcuch certyfikatów
key Klucz publiczny w formacie PEM (Privacy Enhanced Mail). Nie dotyczy
cert Certyfikat w formacie PEM. Nie.
secret Klucz prywatny i certyfikat w formacie PEM. Tak

Wyłączanie dodatku w istniejących klastrach

Uwaga

Przed wyłączeniem dodatku upewnij się, że nieSecretProviderClass jest używany. Próba wyłączenia dodatku, gdy SecretProviderClass element istnieje, powoduje wystąpienie błędu.

Wyłącz provider Azure Key Vault dla funkcji sterownika Secrets Store CSI w istniejącym klastrze, używając polecenia az aks disable-addons z wtyczką azure-keyvault-secrets-provider.

az aks disable-addons --addons azure-keyvault-secrets-provider --resource-group myResourceGroup --name myAKSCluster

Uwaga

Po wyłączeniu dodatku istniejące obciążenia nie powinny napotkać problemów ani nie zauważyć żadnych aktualizacji w zamontowanych tajemnicach. Jeśli pod zostanie uruchomiony ponownie lub nowy pod zostanie utworzony w ramach zdarzenia skalowania w górę, pod nie może zostać uruchomiony, ponieważ sterownik już nie jest uruchomiony.

Następne kroki

W tym artykule przedstawiono sposób tworzenia i udostępniania tożsamości w celu uzyskania dostępu do usługi Azure Key Vault. Łącznik usługi pomaga uprościć konfigurację połączenia dla obciążeń AKS i usług zaplecza platformy Azure. Bezpiecznie obsługuje konfiguracje uwierzytelniania i sieci oraz postępuje zgodnie z najlepszymi rozwiązaniami dotyczącymi nawiązywania połączenia z usługami platformy Azure. Aby uzyskać więcej informacji, zobacz Use the Azure Key Vault provider for Secrets Store CSI Driver in an AKS cluster and the Service Connector introduction (Używanie dostawcy usługi Azure Key Vault dla sterownika CSI magazynu wpisów tajnych w klastrze AKS) i wprowadzenie do łącznika usługi Service Connector.

Jeśli chcesz skonfigurować dodatkowe opcje lub rozwiązać problemy, zobacz Opcje konfiguracji i zasoby do rozwiązywania problemów dla dostawcy Azure Key Vault z Secrets Store CSI Driver w AKS.