Sécuriser la communication Azure IoT MQ (préversion) à l’aide de BrokerListener
Important
Opérations Azure IoT (préversion) – activé parc Azure Arc est actuellement en PRÉVERSION. Vous ne devez pas utiliser ce logiciel en préversion dans des environnements de production.
Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.
Pour personnaliser l’accès réseau et la sécurité, utilisez la ressource BrokerListener. Un écouteur correspond à un point de terminaison réseau qui expose le répartiteur au réseau. Vous pouvez avoir une ou plusieurs ressources BrokerListener pour chaque ressource Broker, et donc plusieurs ports avec des contrôles d’accès différents.
Chaque écouteur peut avoir ses propres règles d’authentification et d’autorisation qui définissent qui peut se connecter à l’écouteur et quelles actions ils peuvent effectuer sur le répartiteur. Vous pouvez utiliser les ressources BrokerAuthentication et BrokerAuthorization pour spécifier les stratégies de contrôle d’accès pour chaque écouteur. Cette flexibilité vous permet d’affiner les autorisations et les rôles de vos clients MQTT, en fonction de leurs besoins et de leurs cas d’usage.
La ressource BrokerListener comporte les champs suivants :
Nom du champ | Requis | Description |
---|---|---|
brokerRef |
Oui | Nom de la ressource Broker à laquelle appartient cet écouteur. Ce champ est obligatoire et doit correspondre à une ressource Broker existante dans le même espace de noms. |
port |
Oui | Numéro de port sur lequel cet écouteur écoute. Ce champ est obligatoire et doit être un numéro de port TCP valide. |
serviceType |
Non | Type du service Kubernetes créé pour cet écouteur. Ce sous-champ est facultatif et est défini par défaut sur clusterIp . Doit être loadBalancer , clusterIp ou nodePort . |
serviceName |
Non | Nom du service Kubernetes créé pour cet écouteur. Kubernetes crée des enregistrements DNS pour ce serviceName que les clients doivent utiliser pour se connecter à Azure IoT MQ (préversion). Ce sous-champ est facultatif et est défini par défaut sur aio-mq-dmqtt-frontend . Important : si vous avez plusieurs écouteurs avec le même serviceType et serviceName , les écouteurs partagent le même service Kubernetes. Pour plus d’informations, consultez Nom du service et type de service. |
authenticationEnabled |
Non | Indicateur booléen qui indique si cet écouteur requiert l’authentification des clients. S’il est défini sur true , cet écouteur utilise toutes les ressources BrokerAuthentication associées pour vérifier et authentifier les clients. S’il est défini sur false , cet écouteur permet à n’importe quel client de se connecter sans authentification. Ce champ est facultatif et est défini par défaut sur false . Pour en savoir plus sur l’authentification, consultez Configurer l’authentification Azure IoT MQ (préversion). |
authorizationEnabled |
Non | Indicateur booléen qui indique si cet écouteur requiert une autorisation de la part des clients. S’il est défini sur true , cet écouteur utilise toutes les ressources BrokerAuthorization associées pour vérifier et autoriser les clients. S’il est défini sur false , cet écouteur permet à n’importe quel client de se connecter sans autorisation. Ce champ est facultatif et est défini par défaut sur false . Pour en savoir plus sur l’autorisation, consultez Configurer l’autorisation Azure IoT MQ (préversion). |
tls |
Non | Paramètres TLS de l’écouteur. Le champ est facultatif et peut être omis pour désactiver TLS pour l’écouteur. Pour configurer TLS, définissez-le comme l’un des types suivants : * S’il est défini sur automatic , cet écouteur utilise le gestionnaire de certificats pour obtenir et renouveler un certificat pour l’écouteur. Pour utiliser ce type, spécifiez un champ issuerRef pour référencer l’émetteur du gestionnaire de certificats. * S’il est défini sur manual , l’écouteur utilise un certificat fourni manuellement pour l’écouteur. Pour utiliser ce type, spécifiez un champ secretName qui référence un secret Kubernetes contenant le certificat et la clé privée. * S’il est défini sur keyVault , l’écouteur utilise un certificat provenant d’Azure Key Vault. Pour utiliser ce type, spécifiez un champ keyVault qui référence l’instance et le secret Azure Key Vault. |
protocol |
Non | Le protocole utilisé par cet écouteur. Ce champ est facultatif et est défini par défaut sur mqtt . Doit être mqtt ou websockets . |
BrokerListener par défaut
Lorsque vous déployez Opérations Azure IoT (préversion), le déploiement crée également une ressource BrokerListener nommée listener
dans l’espace de noms azure-iot-operations
. Cet écouteur est lié à la ressource Broker par défaut nommée broker
également créée pendant le déploiement. L’écouteur par défaut expose le répartiteur sur le port 8883 avec TLS et l’authentification SAT activée. Le certificat TLS est automatiquement managé par le gestionnaire de certificats. L’autorisation est désactivée par défaut.
Pour inspecter l’écouteur, exécutez :
kubectl get brokerlistener listener -n azure-iot-operations -o yaml
La sortie doit ressembler à ceci, avec la majorité des métadonnées supprimées par souci de concision :
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
name: listener
namespace: azure-iot-operations
spec:
brokerRef: broker
authenticationEnabled: true
authorizationEnabled: false
port: 8883
serviceName: aio-mq-dmqtt-frontend
serviceType: clusterIp
tls:
automatic:
issuerRef:
group: cert-manager.io
kind: Issuer
name: mq-dmqtt-frontend
Pour en savoir plus sur la ressource BrokerAuthentication par défaut liée à cet écouteur, consultez Ressource BrokerAuthentication par défaut.
Créer des BrokerListeners
Cet exemple montre comment créer deux ressources BrokerListener pour une ressource Broker nommée my-broker. Chaque ressource BrokerListener définit un port et un paramètre TLS pour un écouteur qui accepte les connexions MQTT des clients.
- La première ressource BrokerListener, nommée my-test-listener, définit un écouteur sur le port 1883 sans TLS et avec l’authentification désactivée. Les clients peuvent se connecter au répartiteur sans chiffrement ni authentification.
- La deuxième ressource BrokerListener, nommée my-secure-listener, définit un écouteur sur le port 8883 avec TLS et l’authentification activée. Seuls les clients authentifiés peuvent se connecter au répartiteur avec le chiffrement TLS. Le champ
tls
est défini surautomatic
, ce qui signifie que l’écouteur utilise le gestionnaire de certificats pour obtenir et renouveler son certificat de serveur.
Pour créer ces ressources BrokerListener, appliquez ce manifeste YAML à votre cluster Kubernetes :
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
name: my-test-listener
namespace: azure-iot-operations
spec:
authenticationEnabled: false
authorizationEnabled: false
brokerRef: broker
port: 1883
---
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
name: my-secure-listener
namespace: azure-iot-operations
spec:
authenticationEnabled: true
authorizationEnabled: false
brokerRef: broker
port: 8883
tls:
automatic:
issuerRef:
name: e2e-cert-issuer
kind: Issuer
group: cert-manager.io
Nom du service et type de service
Si vous avez plusieurs ressources BrokerListener avec le même serviceType
et serviceName
, elles partagent le même service Kubernetes. Cela signifie que le service expose tous les ports de tous les écouteurs. Par exemple, si vous avez deux écouteurs avec le même serviceType
et serviceName
, un sur le port 1883 et l’autre sur le port 8883, le service expose les deux ports. Les clients peuvent se connecter au répartiteur sur l’un ou l’autre des ports.
Il existe deux règles importantes à suivre lorsque vous partagez le nom du service :
Les écouteurs avec le même
serviceType
doivent avoir le mêmeserviceName
.Les écouteurs avec différents
serviceType
doivent avoir différentsserviceName
.
Notamment, le service de l’écouteur par défaut sur le port 8883 est clusterIp
et nommé aio-mq-dmqtt-frontend
. Le tableau suivant résume ce qui se produit lorsque vous créez un écouteur sur un autre port :
Nouvel écouteur serviceType |
Nouvel écouteur serviceName |
Result |
---|---|---|
clusterIp |
aio-mq-dmqtt-frontend |
Le nouvel écouteur est correctement créé et le service expose les deux ports. |
clusterIp |
my-service |
La création du nouvel écouteur échoue, car le type de service est en conflit avec l’écouteur par défaut. |
loadBalancer ou nodePort |
aio-mq-dmqtt-frontend |
La création du nouvel écouteur échoue, car le nom du service est en conflit avec l’écouteur par défaut. |
loadBalancer ou nodePort |
my-service |
Le nouvel écouteur est correctement créé et un nouveau service est créé. |
Contenu connexe
Commentaires
https://aka.ms/ContentUserFeedback.
Prochainement : Tout au long de l'année 2024, nous supprimerons progressivement les GitHub Issues en tant que mécanisme de retour d'information pour le contenu et nous les remplacerons par un nouveau système de retour d'information. Pour plus d’informations, voir:Soumettre et afficher des commentaires pour