Konfigurowanie autoryzacji usługi Azure IoT MQ (wersja zapoznawcza)
Ważne
Usługa Azure IoT Operations Preview — włączona przez usługę Azure Arc jest obecnie dostępna w wersji zapoznawczej. Nie należy używać tego oprogramowania w wersji zapoznawczej w środowiskach produkcyjnych.
Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.
Zasady autoryzacji określają, jakie akcje mogą wykonywać klienci na brokerze, takie jak łączenie, publikowanie lub subskrybowanie tematów. Skonfiguruj usługę Azure IoT MQ w wersji zapoznawczej, aby używać jednej lub wielu zasad autoryzacji z zasobem BrokerAuthorization .
Dla każdego odbiornika można ustawić jedną wartość BrokerAuthorization . Każdy zasób BrokerAuthorization zawiera listę reguł określających podmioty zabezpieczeń i zasoby zasad autoryzacji.
Ważne
Aby konfiguracja BrokerAuthorization miała zastosowanie do odbiornika, co najmniej jeden brokerAuthentication musi być również połączony z tym odbiornikiem.
Konfigurowanie brokerAuthorization dla odbiorników
Specyfikacja zasobu BrokerAuthorization ma następujące pola:
Nazwa pola | Wymagania | opis |
---|---|---|
listenerRef | Tak | Nazwy zasobów BrokerListener, które mają zastosowanie te zasady autoryzacji. To pole jest wymagane i musi być zgodne z istniejącym zasobem BrokerListener w tej samej przestrzeni nazw. |
authorizationPolicies | Tak | To pole definiuje ustawienia zasad autoryzacji, takie jak enableCache i reguły. |
enableCache | Nie. | Czy włączyć buforowanie dla zasad autoryzacji. Jeśli ustawiono wartość true , broker buforuje wyniki autoryzacji dla każdego klienta i kombinacji tematu w celu zwiększenia wydajności i zmniejszenia opóźnienia. Jeśli ustawiono false wartość , broker ocenia zasady autoryzacji dla każdego klienta i żądania tematu, aby zapewnić spójność i dokładność. To pole jest opcjonalne i domyślnie ma wartość false . |
rules | Nie. | Lista reguł określających podmioty zabezpieczeń i zasoby zasad autoryzacji. Każda reguła ma następujące pola podrzędne: podmioty zabezpieczeń i brokerResources. |
Podmiotów | Tak | To pole podrzędne definiuje tożsamości reprezentujące klientów, takie jak nazwy użytkowników, identyfikatory klienta i atrybuty. |
Nazwy użytkownika | Nie. | Lista nazw użytkowników, które są zgodne z klientami. W nazwach użytkowników uwzględniana jest wielkość liter i musi być zgodna z nazwami użytkownika udostępnianymi przez klientów podczas uwierzytelniania. |
clientids | Nie. | Lista identyfikatorów klientów, które są zgodne z klientami. Identyfikatory klientów są uwzględniane w wielkości liter i muszą być zgodne z identyfikatorami klienta dostarczonymi przez klientów podczas nawiązywania połączenia. |
atrybuty | Nie. | Lista par klucz-wartość, które pasują do atrybutów klientów. Atrybuty są uwzględniane w wielkości liter i muszą być zgodne z atrybutami udostępnianymi przez klientów podczas uwierzytelniania. |
brokerResources | Tak | To pole podrzędne definiuje obiekty reprezentujące akcje lub tematy, takie jak metoda i tematy. |
metoda | Tak | Typ akcji, którą klienci mogą wykonać na brokerze. To pole podrzędne jest wymagane i może być jedną z następujących wartości: Połączenie: Ta wartość wskazuje, że klienci mogą łączyć się z brokerem. Publikuj: ta wartość wskazuje, że klienci mogą publikować komunikaty w tematach na brokerze. Subskrybuj: ta wartość wskazuje, że klienci mogą subskrybować tematy w brokerze. |
Tematy | Nie. | Lista tematów lub wzorców tematów pasujących do tematów, do których klienci mogą publikować lub subskrybować. To pole podrzędne jest wymagane, jeśli metoda to Subskrybuj lub Publikuj. |
W poniższym przykładzie pokazano, jak utworzyć zasób BrokerAuthorization , który definiuje zasady autoryzacji dla odbiornika o nazwie my-listener.
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerAuthorization
metadata:
name: "my-authz-policies"
namespace: azure-iot-operations
spec:
listenerRef:
- "my-listener" # change to match your listener name as needed
authorizationPolicies:
enableCache: true
rules:
- principals:
usernames:
- temperature-sensor
- humidity-sensor
attributes:
- city: "seattle"
organization: "contoso"
brokerResources:
- method: Connect
- method: Publish
topics:
- "/telemetry/{principal.username}"
- "/telemetry/{principal.attributes.organization}"
- method: Subscribe
topics:
- "/commands/{principal.attributes.organization}"
Ta autoryzacja brokera umożliwia klientom z nazwami temperature-sensor
użytkowników lub humidity-sensor
, lub klientami z atrybutami organization
z wartością contoso
i city
wartością seattle
, do:
- Połączenie do brokera.
- Publikowanie komunikatów w tematach telemetrii o określonym zakresie przy użyciu ich nazw użytkowników i organizacji. Na przykład: .
temperature-sensor
program może publikować w plikach/telemetry/temperature-sensor
i/telemetry/contoso
.humidity-sensor
program może publikować w plikach/telemetry/humidity-sensor
i/telemetry/contoso
.some-other-username
program może publikować w programie/telemetry/contoso
.
- Subskrybowanie tematów poleceń objętych zakresem ich organizacji. Na przykład: .
temperature-sensor
program może subskrybować usługę/commands/contoso
.some-other-username
program może subskrybować usługę/commands/contoso
.
Aby utworzyć ten zasób BrokerAuthorization, zastosuj manifest YAML do klastra Kubernetes.
Autoryzowanie klientów korzystających z uwierzytelniania X.509
Klienci korzystający z certyfikatów X.509 do uwierzytelniania mogą mieć autoryzację dostępu do zasobów na podstawie właściwości X.509 znajdujących się w ich certyfikacie lub certyfikatów wystawiających łańcuch.
Z właściwościami łańcucha certyfikatów przy użyciu atrybutów
Aby utworzyć reguły na podstawie właściwości na podstawie certyfikatu klienta, jego głównego urzędu certyfikacji lub pośredniego urzędu certyfikacji, wymagany jest plik TOML mapowania certyfikatu na atrybuty. Na przykład:
[root]
subject = "CN = Contoso Root CA Cert, OU = Engineering, C = US"
[root.attributes]
organization = "contoso"
[intermediate]
subject = "CN = Contoso Intermediate CA"
[intermediate.attributes]
city = "seattle"
foo = "bar"
[smart-fan]
subject = "CN = smart-fan"
[smart-fan.attributes]
building = "17"
W tym przykładzie każdy klient z certyfikatem wystawionym przez główny urząd certyfikacji CN = Contoso Root CA Cert, OU = Engineering, C = US
lub pośredni urząd certyfikacji CN = Contoso Intermediate CA
otrzymuje wymienione atrybuty. Ponadto inteligentny wentylator otrzymuje atrybuty specyficzne dla niego.
Dopasowanie atrybutów zawsze rozpoczyna się od certyfikatu klienta liścia, a następnie przechodzi wzdłuż łańcucha. Przypisanie atrybutu zostaje zatrzymane po pierwszym dopasowaniu. W poprzednim przykładzie, nawet jeśli smart-fan
ma certyfikat CN = Contoso Intermediate CA
pośredni , nie pobiera skojarzonych atrybutów.
Aby zastosować mapowanie, utwórz plik TOML mapowania certyfikatu na atrybut jako wpis tajny Kubernetes i odwołaj się do niego w authenticationMethods.x509.attributes
zasobie BrokerAuthentication.
Następnie reguły autoryzacji można stosować do klientów przy użyciu certyfikatów X.509 z tymi atrybutami.
W przypadku nazwy pospolitej podmiotu certyfikatu klienta jako nazwy użytkownika
Aby utworzyć zasady autoryzacji na podstawie nazwy pospolitej podmiotu certyfikatu klienta (CN), utwórz reguły na podstawie nazwy CN.
Jeśli na przykład klient ma certyfikat z podmiotem CN = smart-lock
, jego nazwa użytkownika to smart-lock
. Z tego miejsca utwórz zasady autoryzacji w zwykły sposób.
Autoryzowanie klientów korzystających z tokenów konta usługi Kubernetes Service
Atrybuty autoryzacji dla sieci SAN są ustawiane jako część adnotacji konta usługi. Aby na przykład dodać atrybut autoryzacji o nazwie group
z wartością authz-sat
, uruchom polecenie:
kubectl annotate serviceaccount mqtt-client aio-mq-broker-auth/group=authz-sat
Adnotacje atrybutów muszą zaczynać się od aio-mq-broker-auth/
, aby odróżnić je od innych adnotacji.
Ponieważ aplikacja ma atrybut autoryzacji o nazwie authz-sat
, nie ma potrzeby podawania elementu clientId
lub username
. Odpowiedni zasób BrokerAuthorization używa tego atrybutu jako podmiotu zabezpieczeń, na przykład:
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerAuthorization
metadata:
name: "my-authz-policies"
namespace: azure-iot-operations
spec:
listenerRef:
- "az-mqtt-non-tls-listener"
authorizationPolicies:
enableCache: false
rules:
- principals:
attributes:
- group: "authz-sat"
brokerResources:
- method: Connect
- method: Publish
topics:
- "odd-numbered-orders"
- method: Subscribe
topics:
- "orders"
Aby dowiedzieć się więcej na przykładzie, zobacz Konfigurowanie zasad autoryzacji za pomocą klienta dapr.
Rozproszony magazyn stanów
Broker usługi Azure IoT MQ udostępnia rozproszony magazyn stanów (DSS), którego klienci mogą używać do przechowywania stanu. Usługę DSS można również skonfigurować pod kątem wysokiej dostępności.
Aby skonfigurować autoryzację dla klientów korzystających z usługi DSS, podaj następujące uprawnienia:
- Uprawnienie do publikowania w temacie magazynu
$services/statestore/_any_/command/invoke/request
wartości klucza systemu - Uprawnienie do subskrybowania tematu odpowiedzi (ustawionego podczas początkowego publikowania jako parametru)
<response_topic>/#
Aktualizowanie autoryzacji
Zasoby autoryzacji brokera można aktualizować w czasie wykonywania bez ponownego uruchamiania. Wszyscy klienci połączeni w momencie aktualizacji zasad są rozłączone. Zmiana typu zasad jest również obsługiwana.
kubectl edit brokerauthorization my-authz-policies
Wyłączanie autoryzacji
Aby wyłączyć autoryzację, ustaw wartość authorizationEnabled: false
w zasobie BrokerListener. Gdy zasady mają zezwalać wszystkim klientom, wszyscy uwierzytelnieni klienci mogą uzyskiwać dostęp do wszystkich operacji.
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: BrokerListener
metadata:
name: "my-listener"
namespace: azure-iot-operations
spec:
brokerRef: "my-broker"
authenticationEnabled: false
authorizationEnabled: false
port: 1883
Nieautoryzowane publikowanie w MQTT 3.1.1
W przypadku protokołu MQTT 3.1.1 po odmowie publikowania klient otrzymuje puBACK bez błędu, ponieważ wersja protokołu nie obsługuje zwracania kodu błędu. MQTTv5 zwraca puBACK z kodem przyczyny 135 (nieautoryzowanym) podczas odmowy publikowania.