Abilitare le impostazioni sicure nelle operazioni IoT di Azure

Le impostazioni sicure per Operazioni di Azure IoT includono la configurazione della gestione dei segreti e un'identità gestita assegnata dall'utente per le connessioni cloud, ad esempio un server OPC UA o gli endpoint del flusso di dati.

Questo articolo fornisce istruzioni per abilitare le impostazioni sicure se non è stato fatto durante la distribuzione iniziale.

Prerequisiti

  • Un'istanza di Operazioni di Azure IoT distribuita con le impostazioni di test.

  • interfaccia della riga di comando di Azure versione 2.62.0 o successiva installata nel computer di sviluppo. Usare az --version per controllare la versione e az upgrade per aggiornarla, se necessario. Per altre informazioni, vedere Come installare il interfaccia della riga di comando di Azure.

  • Versione più recente dell'estensione connectedk8s per interfaccia della riga di comando di Azure. Usare il comando seguente per aggiungere l'estensione o aggiornarla alla versione più recente:

    az extension add --upgrade --name connectedk8s
    
  • Estensione delle operazioni di Azure IoT per interfaccia della riga di comando di Azure. Usare il comando seguente per aggiungere l'estensione o aggiornarla alla versione più recente:

    az extension add --upgrade --name azure-iot-ops
    

Abilitare il cluster per le impostazioni sicure

Per abilitare la sincronizzazione dei segreti per l'istanza di Operazioni di Azure IoT, è necessario abilitare le funzionalità OIDC e workload identity federation nel cluster. Questa configurazione è necessaria per l'estensione Azure Key Vault secret store per sincronizzare i segreti da un Azure Key Vault e archiviarli nella rete perimetrale come segreti Kubernetes.

Per i cluster di Servizio Azure Kubernetes (AKS), le funzionalità dell'emittente OIDC e dell'identità del carico di lavoro possono essere abilitate solo al momento della creazione del cluster. Per i cluster in .NET Aspire, lo script automatizzato abilita queste funzionalità per impostazione predefinita. Per i cluster del servizio Azure Kubernetes in locale di Azure, seguire la procedura per distribuire e configurare l'identità del carico di lavoro in un cluster del servizio Azure Kubernetes abilitato dal cluster Azure Arc per creare un nuovo cluster, se non ne è disponibile uno con le funzionalità necessarie.

Per i cluster k3s in Kubernetes, è possibile aggiornare un cluster esistente. Per abilitare e configurare queste funzionalità, seguire questa procedura:

  1. Aggiornare il cluster per abilitare l'identità dell'autorità emittente OIDC e del carico di lavoro.

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

    Se sono state abilitate le funzionalità di identità dell'autorità emittente OIDC e dell'identità del carico di lavoro al momento della creazione del cluster, non è necessario eseguire di nuovo il comando precedente. Usare il comando seguente per controllare lo stato delle funzionalità dell'identità dell'autorità emittente OIDC e del carico di lavoro per il cluster:

    az connectedk8s show -g <RESOURCE_GROUP> -n <CLUSTER_NAME> --query "{ClusterName:name, OIDCIssuerEnabled:oidcIssuerProfile.enabled, WorkloadIdentityEnabled:securityProfile.workloadIdentity.enabled}"
    
  2. Ottenere l'URL dell'emittente del cluster.

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

    Prendere nota dell'output di questo comando da usare nei passaggi successivi.

  3. Creare il file di configurazione k3s nel computer in cui è stato distribuito il cluster Kubernetes:

    sudo nano /etc/rancher/k3s/config.yaml
    
  4. Aggiungere il contenuto seguente al config.yaml file, sostituendo il <SERVICE_ACCOUNT_ISSUER> segnaposto con l'URL dell'autorità di certificazione del cluster annotato in precedenza:

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

    Salvare il file e uscire dall'editor nano.

  5. Riavviare il servizio k3s:

    sudo systemctl restart k3s
    

Configurare la gestione dei segreti

La gestione dei segreti per Operazioni di Azure IoT utilizza l'estensione "Secret Store" per sincronizzare i segreti da un Azure Key Vault e memorizzarli all'edge come segreti di Kubernetes. L'estensione Secret Store richiede un'identità gestita assegnata dall'utente con accesso all'Azure Key Vault, dove sono archiviati i segreti. Per altre informazioni, vedere Che cosa sono le identità gestite per le risorse di Azure?

Per configurare la gestione dei segreti:

  1. Creare un Azure Key Vault usato per archiviare i segreti e concedere le autorizzazioni dell'account utente per gestire i segreti assegnando il ruolo Key Vault Secrets Officer.

  2. Creare un'identità gestita assegnata dall'utente per l'estensione 'Secret Store' da usare per l'accesso al Key Vault.

  3. Usare il comando az iot ops secretsync enable per configurare l'istanza di Operazioni di Azure IoT per la sincronizzazione dei segreti. Questo comando:

    • Crea una credenziale di identità federata usando l'identità gestita assegnata dall'utente.
    • Aggiunge un'assegnazione di ruolo all'identità gestita assegnata dall'utente per l'accesso ad Azure Key Vault.
    • Aggiunge una classe minima di provider di segreti associata all'istanza di Operazioni di 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
    

Ora che la configurazione della sincronizzazione dei segreti è stata completata, è possibile fare riferimento a Gestire i segreti per la distribuzione Operazioni di Azure IoT per informazioni su come usare i segreti con Operazioni di Azure IoT.

Configurare un'identità gestita assegnata dall'utente per le connessioni cloud

Alcuni componenti Operazioni di Azure IoT, ad esempio gli endpoint del flusso di dati, usano un'identità gestita assegnata dall'utente per le connessioni cloud. È consigliabile usare un'identità separata da quella usata per configurare la gestione dei segreti.

  1. Creare un'identità gestita assegnata dall'utente usata per le connessioni cloud.

    Note

    Sarà necessario concedere l'autorizzazione di identità a qualsiasi risorsa cloud per cui si userà l'identità gestita.

  2. Usare il comando az iot ops identity assign per assegnare l'identità all'istanza di Operazioni di Azure IoT. Questo comando crea anche una credenziale di identità federata usando l'emittente OIDC del cluster connesso indicato e l'account del servizio Operazioni di Azure IoT.

    Importante

    La versione predefinita di questo comando assegna un'identità per i flussi di dati. Se si prevede di usare grafici del flusso di dati, includere il --usage parametro con il valore 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. Riavviare i pod del registro schemi per applicare la nuova identità.

    kubectl delete pods adr-schema-registry-0 adr-schema-registry-1 -n azure-iot-operations
    

È ora possibile usare questa identità gestita negli endpoint del flusso di dati per le connessioni cloud.

Bloccare l'accesso dei pod al servizio metadati dell'istanza di Azure

Quando si distribuisce Operazioni di Azure IoT con configurazioni sicure su AKS, Microsoft consiglia di bloccare l'accesso dei pod all'endpoint del servizio di metadati delle istanze di Azure. Per informazioni su come abilitare questa funzionalità, vedere Block pod access to the Azure Instance Metadata Service (IMDS) endpoint.