Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Tato stránka obsahuje pokyny ke správě komponent operací Azure IoT pomocí manifestů nasazení Kubernetes, které jsou ve verzi Preview. Tato funkce je poskytována s několika omezeními a neměla by se používat pro produkční úlohy.
Právní podmínky, které platí pro funkce Azure, které jsou ve verzi beta, verzi Preview nebo které zatím nejsou veřejně dostupné, najdete v Dodatečných podmínkách použití pro Microsoft Azure verze Preview.
Zásady autorizace určují, jaké akce můžou klienti provádět u zprostředkovatele, jako je připojení, publikování nebo přihlášení k odběru témat. Nakonfigurujte zprostředkovatele MQTT tak, aby používal jednu nebo více zásad autorizace s prostředkem BrokerAuthorization. Každý prostředek BrokerAuthorization obsahuje seznam pravidel, která určují objekty zabezpečení a prostředky pro zásady autorizace.
Jak se vyhodnocují pravidla
- Zásady jsou povolené pouze. Pokud žádné pravidlo explicitně neumožňuje akci u prostředku objektu zabezpečení, akce se odepře.
- Pravidlo je definováno třemi faktory: objekty zabezpečení (objekt actor), akce (připojení, publikování, přihlášení k odběru nebo operace úložiště stavu) a prostředek (témata nebo klíče).
- Objekty zabezpečení v rámci pravidla se shodují s logickým operátorem OR. Například všechny uvedené uživatelské jméno, id klienta nebo shoda atributu udělují přístup k prostředkům v pravidle.
Nahrazení tokenů a zástupné kóty
- Pro témata a klíče můžete použít nahrazení tokenů k sestavení pravidel, která se přizpůsobí na klienta:
{principal.username},{principal.clientId}a{principal.attributes.<attributeName>}. - Zástupné dokumentace tématu MQTT a
+jsou podporovány#vbrokerResources.topics. - Při použití nahrazení tokenu v tématu musí být token jediným textem v jeho segmentu cesty. Je například
clients/{principal.clientId}/#platný, aleclient-{principal.clientId}/#není. - Akce připojení by neměly obsahovat témata.
Propojení BrokerAuthorization s BrokerListener
Pokud chcete propojit prostředek BrokerListener s prostředkem BrokerAuthorization, zadejte authorizationRef pole v ports nastavení prostředku BrokerListener. Podobně jako BrokerAuthentication může být prostředek BrokerAuthorization propojený s několika porty BrokerListener. Zásady autorizace platí pro všechny porty propojeného naslouchacího procesu. V porovnání s BrokerAuthentication existuje jeden klíčový rozdíl:
Důležité
Pokud chcete, aby se konfigurace BrokerAuthorization použila na port naslouchacího procesu, musí být s tímto portem naslouchacího procesu propojen alespoň jeden prostředek BrokerAuthentication.
Další informace o BrokerListener najdete v tématu Prostředek BrokerListener.
Autorizační pravidla
Pokud chcete nakonfigurovat autorizaci, vytvořte v clusteru Kubernetes prostředek BrokerAuthorization. Následující části obsahují příklady konfigurace autorizace pro klienty, kteří používají uživatelská jména, atributy, certifikáty X.509 a tokeny účtů služby Kubernetes Service (SAT). Seznam dostupných nastavení najdete v referenčních informacích k rozhraní API pro autorizaci zprostředkovatele.
Následující příklad ukazuje, jak vytvořit prostředek BrokerAuthorization pomocí uživatelských jmen i atributů.
Na webu Azure Portal přejděte do vaší instance ioT Operations.
V části Součásti vyberte Zprostředkovatele MQTT.
Vyberte kartu Autorizace.
Vyberte existující zásady ověřování nebo vytvořte novou tak, že vyberete Vytvořit zásadu autorizace.
Tato autorizace zprostředkovatele umožňuje klientům s ID temperature-sensor klienta nebo humidity-sensorklienty organizations atributy , s hodnotami contoso a citys hodnotou seattle, aby:
- Připojte se ke zprostředkovateli.
- Publikujte zprávy do témat podle jejich ID klienta a organizace. Příklad:
-
temperature-sensormůže publikovat do/sensor/temperature-sensora/sensor/contoso. -
humidity-sensormůže publikovat do/sensor/humidity-sensora/sensor/contoso. -
some-other-usernamemůže publikovat do/sensor/contososouboru .
-
- Přihlaste se k odběru
/commands/témat vymezených v organizaci. Příklad:-
temperature-sensormůže přihlásit k odběru/commands/contoso. -
some-other-usernamemůže přihlásit k odběru/commands/contoso.
-
Použití uživatelského jména pro autorizaci
Chcete-li použít uživatelské jméno MQTT pro autorizaci, zadejte je jako pole v části principals.usernames. V závislosti na metodě ověřování nemusí být uživatelské jméno ověřeno:
- Kubernetes SAT: Uživatelské jméno by se nemělo používat k autorizaci, protože se neověřuje pro MQTTv5 s rozšířeným ověřováním.
- X.509: Uživatelské jméno odpovídá běžnému názvu certifikátu (CN) a lze ho použít pro autorizační pravidla.
- Vlastní: Uživatelské jméno by mělo být použito pouze pro autorizační pravidla, pokud vlastní ověřování ověří uživatelské jméno.
Pokud chcete zabránit problémům se zabezpečením, použijte uživatelské jméno MQTT pro autorizaci zprostředkovatele pouze tehdy, když je možné ověřit.
Návod
Pokud chcete vyžadovat, aby uživatelské jméno MQTT odpovídalo ID klienta, použijte nahrazení tokenu:
principals:
usernames:
- "{principal.clientId}"
Další omezení přístupu na základě ID klienta
principals Vzhledem k tomu, že pole je logické OR, můžete dále omezit přístup na základě ID klienta přidáním clientIds pole do brokerResources pole. Pokud chcete například klientům s identifikátory klientů, jejichž identifikátory začínají číslem jejich budovy, umožnit připojení a publikování do témat omezených na jejich budovu, použijte následující konfiguraci:
V autorizačních pravidlech zprostředkovatele pro zásady autorizace použijte následující konfiguraci:
[
{
"brokerResources": [
{
"clientIds": [
"{principal.attributes.building}*"
],
"method": "Connect",
"topics": []
},
{
"clientIds": [],
"method": "Publish",
"topics": [
"sensors/{principal.attributes.building}/{principal.clientId}/sensor"
]
}
],
"principals": {
"attributes": [
{
"building": "building22"
},
{
"building": "building23"
}
]
}
}
]
Pokud clientIds nebyla v metodě nastavena Connect , klient s libovolným ID klienta se může připojit, pokud měl building atribut nastavený na building22 nebo building23. Když toto pole přidáte clientIds , můžou se připojit jenom klienti s ID klientů, kteří začínají building22 nebo building23 se můžou připojit. Toto označení zajišťuje, že klient má správný atribut a že ID klienta odpovídá očekávanému vzoru.
Autorizace klientů, kteří používají ověřování X.509
Můžete autorizovat klienty, kteří používají certifikáty X.509 pro ověřování pro přístup k prostředkům na základě vlastností X.509, které jsou přítomné na jejich certifikátu nebo jejich vydávající certifikáty v řetězu.
Použití atributů
Pokud chcete vytvořit pravidla založená na vlastnostech z certifikátu klienta, jeho kořenové certifikační autority nebo zprostředkující certifikační autority, definujte atributy X.509 v prostředku BrokerAuthorization. Další informace naleznete v tématu Atributy certifikátu.
Běžný název subjektu klientského certifikátu jako uživatelské jméno
Pokud chcete vytvořit zásady autorizace založené pouze na cn subjektu klientského certifikátu, vytvořte pravidla založená na CN.
Pokud má klient například certifikát s předmětem CN = smart-lock, jeho uživatelské jméno je smart-lock. Odsud vytvořte zásady autorizace jako obvykle.
Autorizace klientů, kteří používají tokeny účtu služby Kubernetes
Atributy autorizace pro SAT jsou nastavené jako součást poznámek účtu služby. Pokud chcete například přidat autorizační atribut s názvem group s hodnotou authz-sat, spusťte příkaz:
kubectl annotate serviceaccount mqtt-client aio-broker-auth/group=authz-sat
Anotace atributů musí začínat aio-broker-auth/ , aby se odlišily od jiných poznámek.
Vzhledem k tomu, že aplikace má název authz-satautorizačního atributu , není nutné zadávat clientId ani username hodnotu. Odpovídající prostředek BrokerAuthorization používá tento atribut jako objekt zabezpečení, například:
V autorizačních pravidlech zprostředkovatele pro zásady autorizace použijte následující konfiguraci:
[
{
"brokerResources": [
{
"clientIds": [],
"method": "Connect",
"topics": []
},
{
"clientIds": [],
"method": "Publish",
"topics": [
"odd-numbered-orders"
]
},
{
"clientIds": [],
"method": "Subscribe",
"topics": [
"orders"
]
}
],
"principals": {
"attributes": [
{
"group": "authz-sat"
}
]
}
}
]
Další informace najdete v tématu Nastavení zásad autorizace pomocí klienta Dapr.
Úložiště stavů
Zprostředkovatel MQTT poskytuje úložiště stavu, které můžou klienti použít k uložení stavu. Úložiště stavů můžete také nakonfigurovat tak, aby bylo vysoce dostupné.
Pokud chcete nastavit autorizaci pro klienty, kteří používají úložiště stavů, zadejte oprávnění pro témata protokolu a klíče:
- Publikovat požadavky na:
statestore/v1/FA9AE35F-2F64-47CD-9BFF-08E2B32A0FE8/command/invoke. - Přihlaste se k odběru tématu odpovědi, které jste nastavili při publikování, obvykle:
clients/{principal.clientId}/services/statestore/v1/FA9AE35F-2F64-47CD-9BFF-08E2B32A0FE8/command/invoke/response/#. - Udělte přístup ke klíči podle
stateStoreResourcesnásledujících pokynů.
Klíče úložiště stavu
K úložišti stavů se přistupuje přes zprostředkovatele MQTT v tématu statestore/v1/FA9AE35F-2F64-47CD-9BFF-08E2B32A0FE8/command/invoke.
Vzhledem k tomu, že klienti mají přístup k tématu, můžete zadat klíče a úrovně přístupu v stateStoreResources části konfigurace zprostředkovatele brokerResources MQTT.
Formát stateStoreResources oddílu se skládá z úrovně přístupu, indikátoru vzoru a vzoru.
- Azure Portal
- Azure CLI
- Biceps
- Kubernetes
stateStoreResources Do pravidel pro zásady autorizace zahrňte oddíl.
"stateStoreResources": [
{
"method": "", // Values: read, write, readwrite
"keyType": "", //Values: string, pattern, binary. Default is pattern
"keys": [
// List of patterns to match
]
},
]
Pole method určuje úroveň přístupu:
- Přístup pro čtení je zadán pomocí parametru
read. Zadává se přístup k zápisu pomocíwrite. Přístup pro čtení a zápis je zadán pomocíreadwrite. - Vyžaduje se úroveň přístupu.
- Úroveň přístupu pro čtení znamená akce a
getkeynotify. - Úroveň přístupu k zápisu znamená akce
set,delavdel.
Pole keyType určuje typ párování klíčů:
-
pattern: Používá se pro porovnávání vzorů ve stylu globu. -
string: Slouží k přesné shodě, například když klíč obsahuje znaky, které by jinak odpovídaly vzoru (*,?,[0-9]). -
binary: Slouží ke shodě s binárním klíčem.
Pole keys určuje klíče, které se mají shodovat. Klíče můžete zadat jako vzory ve stylu globu, nahrazení tokenů nebo přesné řetězce.
Příklady stylu globu:
-
colors/*: Všechny klávesy pod předponou "colors/" -
number[0-9]: Libovolný klíč od "number0" do "number9" -
char?: Libovolný klíč s předponou "char" a příponou s jednou číslicí, například "charA". -
*: Úplný přístup ke všem klíčům
-
Klíče úložiště stavů také podporují nahrazení tokenů, pokud je
patterntyp klíče a složené závorky jsou pro tento účel vyhrazeny. Příklady nahrazení tokenů:clients/{principal.clientId}/*usernames/{principal.username}/*rooms/{principal.attributes.room}/*
Tady je příklad, jak můžete vytvářet prostředky úložiště stavu.
- Azure Portal
- Azure CLI
- Biceps
- Kubernetes
V autorizačních pravidlech zprostředkovatele pro zásady autorizace přidejte podobnou konfiguraci:
[
{
"brokerResources": [
{
"clientIds": [
"{principal.attributes.building}*"
],
"method": "Connect"
},
{
"method": "Publish",
"topics": [
"sensors/{principal.attributes.building}/{principal.clientId}/sensor/*"
]
},
{
"method": "Subscribe",
"topics": [
"commands/{principal.attributes.organization}"
]
}
],
"principals": {
"attributes": [
{
"building": "17",
"organization": "contoso"
}
],
"usernames": [
"temperature-sensor",
"humidity-sensor"
]
},
"stateStoreResources": [
{
"method": "Read",
"keyType": "Pattern",
"keys": [
"myreadkey",
"myotherkey?",
"mynumerickeysuffix[0-9]",
"clients/{principal.clientId}/*"
]
},
{
"method": "ReadWrite",
"keyType": "Binary",
"keys": [
"xxxxxxxxxxxxxxxxxxxx"
]
}
]
}
]
Aktualizace autorizace
Prostředky autorizace zprostředkovatele můžete aktualizovat za běhu bez restartování. Všichni klienti připojení v době aktualizace zásad jsou odpojeni. Podporuje se také změna typu zásady.
kubectl edit brokerauthorization my-authz-policies
Chování při ukládání do mezipaměti
Pokud chcete snížit režii autorizace u témat s vysokou propustností, povolte ukládání do mezipaměti v paměti pomocí authorizationPolicies.cache: Enablednástroje .
- Rozhodnutí se ukládají do mezipaměti na řazenou kolekci klientů, akcí a prostředků. Opakované operace se dostaly do mezipaměti.
- Vysoce proměnlivé prostředky (například jedinečné segmenty témat na zprávu) nižší míra dosažení mezipaměti.
- Mezipaměť roste s počtem jedinečných řazených kolekcí členů. Monitorujte paměť pro velmi vysoké četnosti změn.
Zakázání autorizace
- Na webu Azure Portal přejděte do vaší instance ioT Operations.
- V části Součásti vyberte Zprostředkovatele MQTT.
- Ze seznamu vyberte naslouchací proces zprostředkovatele, který chcete upravit.
- Na portu, na kterém chcete zakázat autorizaci, vyberte v rozevíracím seznamu Autorizace možnost Žádné .
Neoprávněné publikování v MQTT 3.1.1
Při použití MQTT 3.1.1 klient při odepření publikování obdrží PUBACK bez chyby, protože verze protokolu nepodporuje vrácení kódu chyby. MQTTv5 vrátí PUBACK s kódem důvodu 135 (Neautorizováno) při odepření publikování.
Řešení problémů
Ověření pravidel
- Zkontrolujte problémy se schématem YAML/JSON zprostředkovatele BrokerAuthorization.
- Kontrola výstupu při použití konfigurace; Server rozhraní API hlásí chyby schématu.
- Nastavte protokoly podů front-endu na
debugnebotracerestartujte pody a zkontrolujte položky označenéauthzanalyzátorem a efektivními pravidly.
Příklad protokolů, které jsou v pořádku (zkrácené):
<7>2025-02-10T16:28:31.986Z aio-broker-frontend-0 [mq@311 tid="1" module="authz"] - adding broker config ... and store config ...
<6>2025-02-10T16:28:31.986Z aio-broker-frontend-0 [mq@311 tid="1"] - starting broker authorization engine with basic rules. Cache enabled: true
<7>2025-02-10T16:28:31.987Z aio-broker-frontend-0 [mq@311 tid="1" module="authz"] - set broker authorization engine data: {"rules":[{...}]}
Operace zprostředkovatele MQTT
Příklad odepřeného publikování:
<7>2025-02-10T16:32:19.398Z aio-broker-frontend-0 [mq@311 tid="15" module="authz"] - checking authorization for {"action":"publish","clientId":"test-publisher","topic":"test"}
<7>2025-02-10T16:32:19.411Z aio-broker-frontend-0 [mq@311 tid="15" module="authz"] - publish from client 'test-publisher' was denied ... reason_code: NotAuthorized
Operace úložiště stavů
Příklad odepření:
<7>2025-02-10T16:41:31.314Z aio-broker-frontend-0 [mq@311 tid="8" module="authz"] - checking authorization for {"action":"get","clientId":"statestore-cli","key":"dGVzdA=="}
<7>2025-02-10T16:41:31.322Z aio-broker-frontend-0 [mq@311 tid="8" module="authz"] - cached new authorization result ...: Denied("no rule matched")