Configurer l’autorisation de l’agent MQTT
Important
Opérations Azure IoT Préversion avec Azure Arc est actuellement en préversion. Vous ne devez pas utiliser ce logiciel en préversion dans des environnements de production.
Lorsqu’une version en disponibilité générale sera publiée, vous devrez déployer une nouvelle installation d’Opérations Azure IoT. Vous ne pourrez pas mettre à niveau une installation en préversion.
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.
Les stratégies d’autorisation déterminent les actions que les clients peuvent effectuer sur le répartiteur, telles que la connexion, la publication ou l’abonnement aux rubriques. Configurer l’agent MQTT pour qu’il utilise une ou plusieurs stratégies d’autorisation à l’aide de la ressource BrokerAuthorization. Chaque ressource BrokerAuthorization contient une liste de règles qui spécifient les principaux et les ressources des stratégies d’autorisation.
Lier BrokerAuthorization à BrokerListener
Pour lier un BrokerListener à une ressource BrokerAuthorization, spécifiez le champ authenticationRef
dans le paramètre ports
de la ressource BrokerListener. Similaire à BrokerAuthentication, la ressource BrokerAuthorization peut être liée à plusieurs ports BrokerListener. Les stratégies d’autorisation s’appliquent à tous les ports d’écouteur liés. Toutefois, il existe une différence clé par rapport à BrokerAuthentication :
Important
Pour que la configuration BrokerAuthorization s’applique à un port d’écouteur, au moins une ressource BrokerAuthentication doit également être associée à ce port d’écouteur.
Pour en savoir plus sur BrokerListener, consultez la ressource BrokerListener.
Règles d’autorisation
Pour configurer l’autorisation, créez une ressource BrokerAuthorization dans votre cluster Kubernetes. Les sections suivantes fournissent des exemples de configuration d’autorisation pour les clients qui utilisent des noms d’utilisateur, des attributs, des certificats X.509 et des jetons de compte Kubernetes Service (SAP). Pour obtenir la liste des paramètres disponibles, consultez la référence de l’API d’autorisation Broker.
L’exemple suivant montre comment créer une ressource BrokerAuthorization à l’aide de noms d’utilisateur et d’attributs :
Dans le portail Azure, accédez à votre instance Opérations IoT.
Sous Ressources Opérations Azure IoT, sélectionnez Agent MQTT.
Sélectionnez l’onglet Autorisation.
Choisissez une stratégie d’authentification existante ou créez-en une en sélectionnant Créer une stratégie d’autorisation.
Cette autorisation de répartiteur permet aux clients avec les noms d’utilisateurs temperature-sensor
ou humidity-sensor
ou ayant les attributs organization
avec la valeur contoso
et les attributs city
avec la valeur seattle
, de :
- se connecter au répartiteur ;
- publier des messages dans des rubriques de télémétrie délimitées par leurs noms d’utilisateurs et leur organisation. Par exemple :
temperature-sensor
peut publier sur/telemetry/temperature-sensor
et/telemetry/contoso
.humidity-sensor
peut publier sur/telemetry/humidity-sensor
et/telemetry/contoso
.some-other-username
peut publier sur/telemetry/contoso
.
- Abonnez-vous aux rubriques de commandes délimitées par leur organisation. Par exemple :
temperature-sensor
peut s’abonner à/commands/contoso
.some-other-username
peut s’abonner à/commands/contoso
.
Limiter davantage l’accès en fonction de l’ID client
Étant donné que le champ principals
est une or logique, vous pouvez restreindre davantage l’accès en fonction de l’ID client en ajoutant le champ clientIds
au champ brokerResources
. Par exemple, pour autoriser les clients avec des ID clients qui commencent par son numéro de construction pour connecter et publier des données de télémétrie dans des rubriques délimitées par leur génération, utilisez la configuration suivante :
Dans les détails de l’autorisation Broker pour votre stratégie d’autorisation, utilisez la configuration suivante :
[
{
"brokerResources": [
{
"clientIds": [
"{principal.attributes.building}*"
],
"method": "Connect",
"topics": []
},
{
"clientIds": [],
"method": "Publish",
"topics": [
"sensors/{principal.attributes.building}/{principal.clientId}/telemetry"
]
}
],
"principals": {
"attributes": [
{
"building": "building22"
},
{
"building": "building23"
}
]
}
}
]
Ici, si le clientIds
n’était pas défini sous la méthode Connect
, un client avec n’importe quel ID client pouvait se connecter tant qu’il avait l’attribut building
défini sur building22
ou building23
. En ajoutant le champ clientIds
, seuls les clients disposant d’ID client qui commencent par building22
ou building23
peuvent se connecter. Cela garantit non seulement que le client a l’attribut correct, mais également que l’ID client correspond au modèle attendu.
Autoriser les clients qui utilisent l’authentification X.509
Les clients qui utilisent des certificats X.509 pour l’authentification peuvent être autorisés à accéder aux ressources basées sur les propriétés X.509 présentes sur leur certificat ou sur leurs certificats émetteurs dans la chaîne.
Utilisation d’attributs
Pour créer des règles basées sur les propriétés du certificat d’un client, de son autorité de certification racine ou intermédiaire, définissez les attributs X.509 dans la ressource BrokerAuthorization. Pour plus d’informations, consultez Attributs de certificat.
Avec le nom commun d’objet de certificat client comme nom d’utilisateur
Pour créer des stratégies d’autorisation basées uniquement sur le nom commun d’objet de certificat client, créez des règles basées sur le nom commun (CN).
Par exemple, si un client a un certificat avec l’objet CN = smart-lock
, son nom d’utilisateur est smart-lock
. À ce stade, créez des stratégies d’autorisation comme normale.
Autoriser les clients qui utilisent des jetons de comptes de service Kubernetes
Les attributs d’autorisation pour les SAT sont définis dans le cadre des annotations de comptes de service. Par exemple, pour ajouter un attribut d’autorisation nommé group
avec la valeur authz-sat
, exécutez la commande :
kubectl annotate serviceaccount mqtt-client aio-broker-auth/group=authz-sat
Les annotations d’attributs doivent commencer par aio-broker-auth/
afin de se distinguer des autres annotations.
Comme l’application a un attribut d’autorisation appelé authz-sat
, il n’est pas nécessaire de fournir clientId
ni username
. La ressource BrokerAuthorization correspondante utilise cet attribut comme principal, par exemple :
Dans les détails de l’autorisation Broker pour votre stratégie d’autorisation, utilisez la configuration suivante :
[
{
"brokerResources": [
{
"clientIds": [],
"method": "Connect",
"topics": []
},
{
"clientIds": [],
"method": "Publish",
"topics": [
"odd-numbered-orders"
]
},
{
"clientIds": [],
"method": "Subscribe",
"topics": [
"orders"
]
}
],
"principals": {
"attributes": [
{
"group": "authz-sat"
}
]
}
}
]
Pour en savoir plus avec un exemple, consultez Configurer la stratégie d’autorisation avec le client Dapr.
Magasin d’états distribué
L’agent MQTT fournit un magasin d’état distribué (DSS) que les clients peuvent utiliser pour stocker l’état. Le magasin d’états distribué peut également être configurée pour une haute disponibilité.
Pour configurer l’autorisation pour les clients qui utilisent le magasin d’états distribué, fournissez les autorisations suivantes :
- Autorisation de publier sur la rubrique
$services/statestore/_any_/command/invoke/request
du magasin de valeurs de clé système - Autorisation de s’abonner à la rubrique de réponse (définie lors de la publication initiale en tant que paramètre)
<response_topic>/#
Pour plus d’informations sur l’autorisation DSS, consultez les clés de la mémoire d’état.
Mettre à jour une autorisation
Les ressources d’autorisation du répartiteur peuvent être mises à jour lors du runtime sans redémarrage. Tous les clients connectés au moment de la mise à jour de la stratégie sont déconnectés. La modification du type de stratégie est également prise en charge.
kubectl edit brokerauthorization my-authz-policies
Désactiver l’autorisation
- Dans le portail Azure, accédez à votre instance Opérations IoT.
- Sous Ressources Opérations Azure IoT, sélectionnez Agent MQTT.
- Sélectionnez l’écouteur d’agent que vous souhaitez modifier dans la liste.
- Sur le port que vous souhaitez désactiver l’autorisation, sélectionnez Aucun dans la liste déroulante d’autorisation.
Publication non autorisée dans MQTT 3.1.1
Avec MQTT 3.1.1, lorsqu’une publication est refusée, le client reçoit PUBACK sans erreur, car la version du protocole ne prend pas en charge le renvoi du code d’erreur. MQTTv5 retourne PUBACK avec le code de raison 135 (non autorisé) lorsque la publication est refusée.