Condividi tramite


Gestire i segreti usando Azure Key Vault o i segreti Kubernetes nell'anteprima mq di Azure IoT

Importante

Anteprima delle operazioni di Azure IoT: abilitata da Azure Arc è attualmente disponibile in ANTEPRIMA. Non è consigliabile usare questo software di anteprima negli ambienti di produzione.

Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale.

È possibile usare Azure Key Vault per gestire i segreti per il broker MQ di Anteprima MQ di Azure IoT anziché i segreti Kubernetes. Questo articolo illustra come configurare Key Vault per il broker e usarlo per gestire i segreti.

Prerequisiti

  • Istanza di Azure Key Vault con un segreto.

  • Un'entità servizio Microsoft Entra con get autorizzazioni e list per i segreti nell'istanza di Key Vault. Per configurare l'entità servizio per le autorizzazioni di Key Vault, vedere Assegnare un criterio di accesso di Key Vault.

  • Un segreto Kubernetes con le credenziali dell'entità servizio, come questo esempio con il segreto predefinito aio-akv-sp :

    apiVersion: v1
    kind: Secret
    metadata:
      name: aio-akv-sp
      namespace: azure-iot-operations
    type: Opaque
    data:
      clientid: <base64 encoded client id>
      clientsecret: <base64 encoded client secret>
    
  • Provider di Azure Key Vault per il driver CSI dell'archivio segreti

Usare Azure Key Vault per la gestione dei segreti

Il keyVault campo è disponibile ovunque vengano usati i segreti Kubernetes (secretName). Nella tabella seguente vengono descritte le proprietà del keyVault campo.

Proprietà Richiesto Descrizione
insieme di credenziali Specifica l'insieme di credenziali delle chiavi di Azure che contiene i segreti.
vault.name Specifica il nome dell'insieme di credenziali delle chiavi di Azure. Per ottenere il nome dell'insieme di credenziali delle chiavi da portale di Azure, passare all'istanza di Key Vault e copiare il nome dalla pagina Panoramica.
vault.directoryId Specifica l'ID tenant di Microsoft Entra. Per ottenere l'ID tenant da portale di Azure, passare all'istanza di Key Vault e copiare l'ID tenant dalla pagina Panoramica.
vault.credentials.servicePrincipalLocalSecretName Specifica il nome del segreto che contiene le credenziali dell'entità servizio.
vaultSecret Sì, quando si usano i normali segreti di Key Vault Specifica il segreto in Azure Key Vault.
vaultSecret.name Specifica il nome del segreto.
vaultSecret.version No Specifica la versione del segreto.
vaultCert Sì, quando si usano i certificati di Key Vault Specifica il certificato in Azure Key Vault.
vaultCert.name Specifica il nome del segreto del certificato.
vaultCert.version No Specifica la versione del segreto del certificato.
vaultCaChainSecret Sì, quando si usa la catena di certificati Specifica la catena di certificati nell'insieme di credenziali delle chiavi di Azure.
vaultCaChainSecret.name Specifica il nome della catena di certificati.
vaultCaChainSecret.version No Specifica la versione della catena di certificati.
username No Usato solo per il connettore Kafka di Hub eventi, vedere Inviare e ricevere messaggi tra Azure IoT MQ e Hub eventi o Kafka.

Il tipo di segreto in uso determina quali dei campi seguenti è possibile usare:

  • vaultSecret: usare questo campo quando si usa un segreto normale. Ad esempio, è possibile usare questo campo per configurare una risorsa BrokerAuthentication con il usernamePassword campo .
  • vaultCert: usare questo campo quando si usa il segreto del tipo di certificato con il certificato client e la chiave. Ad esempio, è possibile usare questo campo per abilitare TLS in brokerListener.
  • vaultCaChainSecret: usare questo campo quando è necessario presentare una catena di certificati completa, con tutti i certificati intermedi o radice aggiuntivi, al server remoto. Ad esempio, è possibile usare questo campo per configurare una risorsa MqttBridge Connessione or con il remoteBrokerConnection campo . Per usare questo campo, importare certificati X.509 senza chiavi private in formato PEM come segreto regolare a più righe (non di tipo certificato) in Key Vault. Questo campo deve essere usato oltre a vaultCert che include il certificato client e la chiave privata.

Esempi

Ad esempio, per creare un BrokerListener TLS che usa Azure Key Vault per il certificato del server segreto, usare il codice YAML seguente:

apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
  name: tls-listener-manual
  namespace: azure-iot-operations
spec:
  brokerRef: broker
  authenticationEnabled: true
  authorizationEnabled: false
  port: 8883
  tls:
    keyVault:
      vault:
        name: my-key-vault
        directoryId: <AKV directory ID>
        credentials:
          servicePrincipalLocalSecretName: aio-akv-sp
      vaultCert:
        name: my-server-certificate
        # version: 939ecc2...

Questo esempio seguente illustra come usare Azure Key Vault per il usernamePassword campo in una risorsa BrokerAuthentication:

apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerAuthentication
metadata:
  name: my-authentication
  namespace: azure-iot-operations
spec:
  listenerRef: 
    - tls-listener-manual
  authenicationMethods:
    - usernamePassword:
        keyVault:
          vault:
            name: my-key-vault
            directoryId: <AKV directory ID>
            credentials:
              servicePrincipalLocalSecretName: aio-akv-sp
          vaultSecret:
            name: my-username-password-db
            # version: 939ecc2...

Questo esempio illustra come usare Azure Key Vault per le credenziali del broker remoto mqTT bridge:

apiVersion: mq.iotoperations.azure.com/v1beta1
kind: MqttBridgeConnector
metadata:
  name: my-bridge
  namespace: azure-iot-operations
spec:
  image:
    repository: mcr.microsoft.com/azureiotoperations/mqttbridge
    tag: 0.4.0-preview
    pullPolicy: IfNotPresent
  protocol: v5
  bridgeInstances: 1
  remoteBrokerConnection:
    endpoint: example.broker.endpoint:8883
    tls:
      tlsEnabled: true
      trustedCaCertificateConfigMap: my-ca-certificate
    authentication:
      x509:
        keyVault:
          vault:
            name: my-key-vault
            directoryId: <AKV directory ID>
            credentials:
              servicePrincipalLocalSecretName: aio-akv-sp
          vaultCaChainSecret:
            name: my-remote-broker-certificate
            # version: 939ecc2...