Proteggere la comunicazione in anteprima di Azure IoT MQ con BrokerListener
Importante
Anteprima delle operazioni di Azure IoT: abilitata da Azure Arc è attualmente disponibile in ANTEPRIMA. Non è consigliabile usare questo software di anteprima negli ambienti di produzione.
Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale.
Per personalizzare l'accesso alla rete e la sicurezza, usare la risorsa BrokerListener . Un listener corrisponde a un endpoint di rete che espone il broker alla rete. È possibile avere una o più risorse BrokerListener per ogni risorsa broker e quindi più porte con controllo di accesso diverso ognuna.
Ogni listener può avere regole di autenticazione e autorizzazione proprie che definiscono chi può connettersi al listener e quali azioni possono eseguire sul broker. È possibile usare le risorse BrokerAuthentication e BrokerAuthorization per specificare i criteri di controllo di accesso per ogni listener. Questa flessibilità consente di ottimizzare le autorizzazioni e i ruoli dei client MQTT, in base alle esigenze e ai casi d'uso.
La risorsa BrokerListener include questi campi:
Nome campo | Obbligatorio | Descrizione |
---|---|---|
brokerRef |
Sì | Nome della risorsa broker a cui appartiene il listener. Questo campo è obbligatorio e deve corrispondere a una risorsa broker esistente nello stesso spazio dei nomi. |
port |
Sì | Numero di porta su cui il listener è in ascolto. Questo campo è obbligatorio e deve essere un numero di porta TCP valido. |
serviceType |
No | Tipo del servizio Kubernetes creato per questo listener. Questo sottocampo è facoltativo e il valore predefinito è clusterIp . Deve essere loadBalancer , clusterIp o nodePort . |
serviceName |
No | Nome del servizio Kubernetes creato per questo listener. Kubernetes crea record DNS per questo serviceName che i client devono usare per connettersi all'anteprima MQ di Azure IoT. Questo sottocampo è facoltativo e il valore predefinito è aio-mq-dmqtt-frontend . Importante: se sono presenti più listener con lo stesso serviceType e serviceName , i listener condividono lo stesso servizio Kubernetes. Per altre informazioni, vedere Nome del servizio e tipo di servizio. |
authenticationEnabled |
No | Flag booleano che indica se questo listener richiede l'autenticazione dai client. Se impostato su true , questo listener usa tutte le risorse BrokerAuthentication associate a tale listener per verificare ed autenticare i client. Se impostato su false , questo listener consente a qualsiasi client di connettersi senza autenticazione. Questo campo è facoltativo e il valore predefinito è false . Per altre informazioni sull'autenticazione, vedere Configurare l'autenticazione mq di Azure IoT Preview. |
authorizationEnabled |
No | Flag booleano che indica se questo listener richiede l'autorizzazione dai client. Se impostato su true , questo listener usa tutte le risorse brokerAuthorization associate per verificare e autorizzare i client. Se impostato su false , questo listener consente a qualsiasi client di connettersi senza autorizzazione. Questo campo è facoltativo e il valore predefinito è false . Per altre informazioni sull'autorizzazione, vedere Configurare l'autorizzazione mq di Azure IoT Preview. |
tls |
No | Impostazioni TLS per il listener. Il campo è facoltativo e può essere omesso per disabilitare TLS per il listener. Per configurare TLS, impostarlo uno di questi tipi: * Se impostato su automatic , questo listener usa cert-manager per ottenere e rinnovare un certificato per il listener. Per usare questo tipo, specificare un issuerRef campo per fare riferimento all'emittente cert-manager. * Se impostato su manual , il listener usa un certificato fornito manualmente per il listener. Per usare questo tipo, specificare un secretName campo che fa riferimento a un segreto Kubernetes contenente il certificato e la chiave privata. * Se impostato su keyVault , il listener usa un certificato di Azure Key Vault. Per usare questo tipo, specificare un keyVault campo che faccia riferimento all'istanza e al segreto di Azure Key Vault. |
protocol |
No | Protocollo utilizzato dal listener. Questo campo è facoltativo e il valore predefinito è mqtt . Deve essere mqtt o websockets . |
BrokerListener predefinito
Quando si distribuisce Azure IoT Operations Preview, la distribuzione crea anche una risorsa BrokerListener denominata listener
nello spazio dei azure-iot-operations
nomi . Questo listener è collegato alla risorsa Broker predefinita denominata broker
creata anche durante la distribuzione. Il listener predefinito espone il broker sulla porta 8883 con l'autenticazione TLS e SAT abilitata. Il certificato TLS viene gestito automaticamente da cert-manager. L'autorizzazione è disabilitata per impostazione predefinita.
Per esaminare il listener, eseguire:
kubectl get brokerlistener listener -n azure-iot-operations -o yaml
L'output dovrebbe essere simile al seguente, con la maggior parte dei metadati rimossi per brevità:
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
Per altre informazioni sulla risorsa BrokerAuthentication predefinita collegata a questo listener, vedere Default BrokerAuthentication resource (Risorsa BrokerAuthentication predefinita).
Creare nuovi BrokerListeners
Questo esempio mostra come creare due nuove risorse BrokerListener per una risorsa broker denominata my-broker. Ogni risorsa BrokerListener definisce una porta e un'impostazione TLS per un listener che accetta connessioni MQTT dai client.
- La prima risorsa BrokerListener , denominata my-test-listener, definisce un listener sulla porta 1883 senza TLS e l'autenticazione disattivata. I client possono connettersi al broker senza crittografia o autenticazione.
- La seconda risorsa BrokerListener , denominata my-secure-listener, definisce un listener sulla porta 8883 con TLS e l'autenticazione abilitata. Solo i client autenticati possono connettersi al broker con la crittografia TLS. Il
tls
campo è impostato suautomatic
, il che significa che il listener usa cert-manager per ottenere e rinnovare il certificato server.
Per creare queste risorse BrokerListener , applicare questo manifesto YAML al 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
Nome del servizio e tipo di servizio
Se sono presenti più risorse BrokerListener con lo stesso serviceType
e serviceName
, le risorse condividono lo stesso servizio Kubernetes. Ciò significa che il servizio espone tutte le porte di tutti i listener. Ad esempio, se si dispone di due listener con lo stesso serviceType
e serviceName
, uno sulla porta 1883 e l'altro sulla porta 8883, il servizio espone entrambe le porte. I client possono connettersi al broker su una delle due porte.
Esistono due regole importanti da seguire quando si condivide il nome del servizio:
I listener con lo stesso
serviceType
devono condividere lo stessoserviceName
oggetto .I listener con diversi
serviceType
devono avere un valore diversoserviceName
.
In particolare, il servizio per il listener predefinito sulla porta 8883 è clusterIp
e denominato aio-mq-dmqtt-frontend
. La tabella seguente riepiloga cosa accade quando si crea un nuovo listener su una porta diversa:
Nuovo listener serviceType |
Nuovo listener serviceName |
Risultato |
---|---|---|
clusterIp |
aio-mq-dmqtt-frontend |
Il nuovo listener crea correttamente e il servizio espone entrambe le porte. |
clusterIp |
my-service |
Il nuovo listener non riesce a creare perché il tipo di servizio è in conflitto con il listener predefinito. |
loadBalancer oppure nodePort |
aio-mq-dmqtt-frontend |
Il nuovo listener non riesce a creare perché il nome del servizio è in conflitto con il listener predefinito. |
loadBalancer oppure nodePort |
my-service |
Il nuovo listener crea correttamente e viene creato un nuovo servizio. |