Partilhar via


Gerenciar segredos usando o Azure Key Vault ou segredos do Kubernetes no Azure IoT MQ Preview

Importante

Azure IoT Operations Preview – habilitado pelo Azure Arc está atualmente em visualização. Não deve utilizar este software de pré-visualização em ambientes de produção.

Veja Termos de Utilização Complementares da Pré-visualizações do Microsoft Azure para obter os termos legais que se aplicam às funcionalidades do Azure que estão na versão beta, na pré-visualização ou que ainda não foram lançadas para disponibilidade geral.

Você pode usar o Azure Key Vault para gerenciar segredos para seu agente MQTT distribuído do Azure IoT MQ Preview em vez de segredos do Kubernetes. Este artigo mostra como configurar o Key Vault para seu corretor e usá-lo para gerenciar segredos.

Pré-requisitos

  • Uma instância do Azure Key Vault com um segredo.

  • Uma entidade de serviço do Microsoft Entra com get e list permissões para segredos na instância do Cofre de Chaves. Para configurar a entidade de serviço para permissões do Cofre da Chave, consulte Atribuir uma política de acesso ao Cofre da Chave.

  • Um segredo do Kubernetes com as credenciais da entidade de serviço, como este exemplo com o segredo padrão 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>
    
  • O Azure Key Vault Provider for Secrets Store CSI Driver

Usar o Azure Key Vault para gerenciamento de segredos

O keyVault campo está disponível sempre que os segredos do Kubernetes (secretName) são usados. A tabela a keyVault seguir descreve as propriedades do campo.

Property Necessário Description
cofre Sim Especifica o Cofre da Chave do Azure que contém os segredos.
vault.name Sim Especifica o nome do Cofre da Chave do Azure. Para obter o nome do Cofre da Chave do portal do Azure, navegue até a instância do Cofre da Chave e copie o nome da página Visão geral.
vault.directoryId Sim Especifica a ID do locatário do Microsoft Entra. Para obter a ID do locatário do portal do Azure, navegue até a instância do Cofre da Chave e copie a ID do locatário na página Visão geral.
vault.credentials.servicePrincipalLocalSecretName Sim Especifica o nome do segredo que contém as credenciais da entidade de serviço.
vaultSecret [en] Sim, ao usar segredos regulares do Cofre da Chave Especifica o segredo no Cofre da Chave do Azure.
vaultSecret.name Sim Especifica o nome do segredo.
vaultSecret.version Não Especifica a versão do segredo.
vaultCert Sim, ao usar certificados do Cofre da Chave Especifica o certificado no Cofre da Chave do Azure.
vaultCert.name Sim Especifica o nome do segredo do certificado.
vaultCert.versão Não Especifica a versão do segredo do certificado.
cofreCaChainSecret Sim, ao usar a cadeia de certificados Especifica a cadeia de certificados no Cofre da Chave do Azure.
vaultCaChainSecret.name Sim Especifica o nome da cadeia de certificados.
vaultCaChainSecret.version Não Especifica a versão da cadeia de certificados.
nome de utilizador Não Usado apenas para o conector Kafka dos Hubs de Eventos, consulte Enviar e receber mensagens entre o Azure IoT MQ e Hubs de Eventos ou Kafka.

O tipo de segredo que você está usando determina qual dos seguintes campos você pode usar:

  • vaultSecret: Use este campo quando estiver usando um segredo normal. Por exemplo, você pode usar este campo para configurar um recurso BrokerAuthentication com o usernamePassword campo.
  • vaultCert: Use este campo quando estiver usando o segredo do tipo de certificado com certificado e chave do cliente. Por exemplo, você pode usar esse campo para habilitar o TLS em um BrokerListener.
  • vaultCaChainSecret: Use este campo quando precisar apresentar uma cadeia de certificados completa, com todos os certificados intermediários ou raiz extras, ao servidor remoto. Por exemplo, você pode usar esse campo para configurar um recurso MqttBridgeConnector com o remoteBrokerConnection campo. Para usar esse campo, importe certificados X.509 sem chaves privadas no formato PEM como um segredo regular de várias linhas (não do tipo certificado) para o Cofre de Chaves. Este campo deve ser usado além de que tem o certificado do vaultCert cliente e chave privada.

Exemplos

Por exemplo, para criar um TLS BrokerListener que usa o Azure Key Vault para secretar o certificado do servidor, use o seguinte YAML:

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...

Este próximo exemplo mostra como usar o Azure Key Vault para o usernamePassword campo em um recurso 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...

Este exemplo mostra como usar o Azure Key Vault para credenciais de agente remoto de ponte MQTT:

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...