Włączanie bezpiecznych ustawień w operacjach usługi Azure IoT

Ustawienia bezpieczeństwa dla Operacje Azure IoT obejmują konfigurację zarządzania tajnymi informacjami i zarządzaną tożsamość przypisaną użytkownikowi dla połączeń w chmurze; na przykład serwer OPC UA lub punkty końcowe przepływu danych.

Ten artykuł zawiera instrukcje dotyczące włączania ustawień zabezpieczeń, jeśli nie zrobiłeś tego podczas początkowego wdrożenia.

Wymagania wstępne

  • Na komputerze deweloperskim zainstalowano Azure CLI. Sprawdź dostępne rozszerzenia Azure CLI dla minimalnej wymaganej wersji do korzystania z rozszerzenia azure-iot-ops. Użyj az --version do sprawdzenia swojej wersji i az upgrade do aktualizacji, jeśli to konieczne. Aby uzyskać więcej informacji, zobacz Install the Azure CLI .

  • Rozszerzenie Operacje Azure IoT dla Azure CLI. Użyj następującego polecenia, aby dodać rozszerzenie lub zaktualizować je do najnowszej wersji:

    az extension add --upgrade --name azure-iot-ops
    
  • Najnowsza wersja rozszerzenia connectedk8s dla Azure CLI. Użyj następującego polecenia, aby dodać rozszerzenie lub zaktualizować je do najnowszej wersji:

    az extension add --upgrade --name connectedk8s
    

Azure CLI przykładów w tym artykule używa zmiennych środowiskowych, dzięki czemu można ustawić każdą wartość raz, a następnie skopiować i wkleić polecenia as-is. Jeśli korzystasz ze środowiska Operacje Azure IoT Codespaces z quickstartu, te zmienne są już ustawione i możesz pominąć ten krok. W przeciwnym razie ustaw następujące zmienne środowiskowe w swojej poskoczce przed uruchomieniem poleceń.

Poniższe skrypty określają najczęściej używane zmienne środowiskowe:

Zmienna środowiskowa Description
SUBSCRIPTION_ID ID subskrypcji zawierającej Twoją instancję Operacje Azure IoT.
RESOURCE_GROUP Nazwa grupy zasobów zawierającej Twoją instancję Operacje Azure IoT.
AIO_INSTANCE_NAME Nazwa Twojej instancji Operacje Azure IoT. Aby wypisać swoje instancje, uruchom az iot ops list -o table.
CLUSTER_NAME Nazwa klastra Kubernetes z włączonym Azure Arc, który hostuje Twoją instancję.
LOCATION Region Azure do wykorzystania dla nowych zasobów, na przykład eastus.
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>

Wystarczy ustawić zmienne, których używa ten artykuł. W tym artykule może być użytych dodatkowych zmiennych środowiskowych do wyboru nazw zasobów. Artykuł wyjaśnia, jak ustawić je tam, gdzie są wprowadzane.

Włącz klaster dla bezpiecznych ustawień

Aby włączyć synchronizację sekretów dla wystąpienia Operacje Azure IoT, należy włączyć funkcje wystawcy OIDC i federacji tożsamości obciążeń w klastrze. Ta konfiguracja jest wymagana dla rozszerzenia Azure Key Vault Secret Store do synchronizacji tajemnic z Azure Key Vault i przechowywania ich na krawędzi jako tajemnic Kubernetes.

Dla klastrów Azure Kubernetes Service (AKS) możesz włączyć funkcje tożsamości emitenta i obciążenia OIDC podczas tworzenia klastra lub na istniejącym klastrze. Więcej informacji można znaleźć w artykule Wdrażaj i konfiguruj Tożsamość obciążeń Microsoft Entra na klastrze AKS. W przypadku klastrów w usłudze AKS Edge Essentials zautomatyzowany skrypt domyślnie włącza te funkcje. W przypadku klastrów usługi AKS w Azure lokalnie wykonaj kroki, aby wdrożyć i skonfigurować tożsamość obciążenia w klastrze AKS włączonym przez Azure Arc w celu utworzenia nowego klastra, jeśli nie masz już takiego z wymaganymi funkcjami.

W przypadku klastrów k3s na platformie Kubernetes można zaktualizować istniejący klaster. Aby włączyć i skonfigurować te funkcje, wykonaj następujące czynności:

  1. Zaktualizuj klaster, aby włączyć wydawcę OIDC i tożsamość zadania.

    az connectedk8s update -n $CLUSTER_NAME -g $RESOURCE_GROUP --enable-oidc-issuer --enable-workload-identity
    

    Jeśli podczas tworzenia klastra włączono funkcje wystawcy OIDC i tożsamości obciążenia, nie trzeba ponownie uruchamiać poprzedniego polecenia. Użyj następującego polecenia, aby sprawdzić stan funkcji systemu wystawcy OIDC oraz tożsamości obciążenia dla klastra:

    az connectedk8s show -g $RESOURCE_GROUP -n $CLUSTER_NAME --query "{ClusterName:name, OIDCIssuerEnabled:oidcIssuerProfile.enabled, WorkloadIdentityEnabled:securityProfile.workloadIdentity.enabled}"
    
  2. Pobierz adres URL wystawcy klastra.

    az connectedk8s show -g $RESOURCE_GROUP -n $CLUSTER_NAME --query oidcIssuerProfile.issuerUrl --output tsv
    

    Zanotuj dane wyjściowe z tego polecenia, które mają być używane w następnych krokach.

  3. Utwórz plik konfiguracji k3s na maszynie, na której wdrożono klaster Kubernetes:

    sudo nano /etc/rancher/k3s/config.yaml
    
  4. Dodaj do pliku config.yaml następującą zawartość, zastępując <SERVICE_ACCOUNT_ISSUER> symbol zastępczy adresem URL wystawcy klastra, który zanotowałeś wcześniej.

    kube-apiserver-arg:
    - service-account-issuer=<SERVICE_ACCOUNT_ISSUER>
    - service-account-max-token-expiration=24h
    

    Zapisz plik i zamknij edytor nano.

  5. Uruchom ponownie usługę k3s:

    sudo systemctl restart k3s
    

Konfigurowanie zarządzania tajnymi danymi

Zarządzanie sekretami dla Operacje Azure IoT wykorzystuje rozszerzenie Secret Store do synchronizowania sekretów z Azure Key Vault i przechowywania ich na urządzeniach brzegowych jako sekretów platformy Kubernetes. Rozszerzenie Secret Store wymaga przypisanej przez użytkownika tożsamości zarządzanej z dostępem do Azure Key Vault, w którym przechowywane są tajemnice. Aby dowiedzieć się więcej, zobacz Czym są tożsamości zarządzane dla zasobów Azure?

Aby skonfigurować zarządzanie sekretami:

  1. Stwórz Azure Key Vault do przechowywania sekretów i nadaj swojemu kontu użytkownika uprawnienia do zarządzania sekretami, przypisując rolęKey Vault Secrets Officer. Upewnij się, że Twój sejf kluczy korzysta z modelu dostępu opartego na rolach Azure jako modelu uprawnień. Aby sprawdzić to ustawienie w portalu Azure, wybierz sejf kluczy, a następnie wybierz Ustawienia>Dostęp do konfiguracji.

  2. Utwórz tożsamość zarządzaną przypisaną przez użytkownika dla rozszerzenia magazynu tajemnic do uzyskania dostępu do magazynu kluczy.

  3. Użyj polecenia az iot ops secretsync enable, aby skonfigurować instancję Operacje Azure IoT do synchronizacji tajnych danych. To polecenie:

    • Tworzy poświadczenia tożsamości federacyjnej, wykorzystując zarządzaną tożsamość przypisaną przez użytkownika.
    • Dodaje przypisanie roli do tożsamości zarządzanej przez użytkownika w celu uzyskania dostępu do Azure Key Vault.
    • Dodaje minimalną klasę dostawcy tajnych danych skojarzoną z instancją Operacje Azure IoT.
    # Variable block
    AIO_INSTANCE_NAME="<AIO_INSTANCE_NAME>"
    RESOURCE_GROUP="<RESOURCE_GROUP>"
    USER_ASSIGNED_MI_NAME="<USER_ASSIGNED_MI_NAME>"
    KEYVAULT_NAME="<KEYVAULT_NAME>"
    
    #Get the resource ID of the user-assigned managed identity
    USER_ASSIGNED_MI_RESOURCE_ID=$(az identity show --name $USER_ASSIGNED_MI_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
    
    #Get the resource ID of the key vault
    KEYVAULT_RESOURCE_ID=$(az keyvault show --name $KEYVAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
    
    #Enable secret synchronization
    az iot ops secretsync enable --instance $AIO_INSTANCE_NAME \
                                 --resource-group $RESOURCE_GROUP \
                                 --mi-user-assigned $USER_ASSIGNED_MI_RESOURCE_ID \
                                 --kv-resource-id $KEYVAULT_RESOURCE_ID
    

Po zakończeniu konfigurowania synchronizacji wpisów tajnych możesz zapoznać się z tematem Zarządzanie wpisami tajnymi dla wdrożenia operacji usługi Azure IoT , aby dowiedzieć się, jak używać wpisów tajnych w operacjach usługi Azure IoT.

Konfigurowanie tożsamości zarządzanej przypisanej przez użytkownika dla połączeń w chmurze

Niektóre składniki Operacje Azure IoT, takie jak punkty końcowe przepływu danych, używają zarządzanej tożsamości przypisanej przez użytkownika na potrzeby połączeń z chmurą. Zalecamy użycie oddzielnej tożsamości od tej użytej do skonfigurowania zarządzania danymi poufnymi.

  1. Utwórz tożsamość zarządzaną przypisaną przez użytkownika , która jest używana na potrzeby połączeń w chmurze.

    Note

    Musisz przyznać tożsamości uprawnienia do zasobu w chmurze, z którego zamierzasz korzystać z tożsamością zarządzaną.

  2. Użyj polecenia az iot ops identity assign aby przypisać tożsamość do wystąpienia Operacje Azure IoT. To polecenie tworzy również poświadczenia tożsamości federacyjnej, wykorzystując wystawcę OIDC dla wskazanego połączonego klastra oraz konto usługi Operacje Azure IoT.

    Important

    Domyślna wersja tego polecenia przypisuje tożsamość przepływów danych. Jeśli planujesz używać wykresów przepływu danych, uwzględnij --usage parametr z wartością wasm-graph.

    # Variable block
    AIO_INSTANCE_NAME="<AIO_INSTANCE_NAME>"
    RESOURCE_GROUP="<RESOURCE_GROUP>"
    USER_ASSIGNED_MI_NAME="<USER_ASSIGNED_MI_NAME FOR CLOUD CONNECTIONS>"
    
    #Get the resource ID of the user-assigned managed identity
    USER_ASSIGNED_MI_RESOURCE_ID=$(az identity show --name $USER_ASSIGNED_MI_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
    
    #Assign the identity to the Azure IoT Operations instance
    az iot ops identity assign --name $AIO_INSTANCE_NAME \
                               --resource-group $RESOURCE_GROUP \
                               --mi-user-assigned $USER_ASSIGNED_MI_RESOURCE_ID
    
  3. Uruchom ponownie zasobniki rejestru schematów, aby zastosować nową tożsamość.

    kubectl rollout restart statefulset adr-schema-registry -n azure-iot-operations
    

Teraz możesz użyć tej tożsamości zarządzanej w punktach końcowych przepływu danych na potrzeby połączeń w chmurze.

Blokuj dostęp podu do usługi Azure Instance Metadata Service

Podczas wdrażania Operacje Azure IoT z bezpiecznymi ustawieniami w klastrze AKS, Microsoft zaleca zablokowanie dostępu podów do punktu końcowego usługi Azure Instance Metadata Service. Aby dowiedzieć się, jak włączyć tę funkcję, zobacz Blokuj dostęp poda do punktu końcowego usługi Azure Instance Metadata Service (IMDS).