Configurare l'infrastruttura di certificati OPC UA per l'anteprima di Azure IoT OPC UA Broker
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.
Questo articolo illustra come configurare l'infrastruttura di certificati OPC UA per Azure IoT OPC UA Broker. Questa configurazione consente di determinare con quali server OPC UA considerare attendibili per stabilire in modo sicuro una sessione.
In base alla specifica OPC UA, OPC UA Broker funge da singola applicazione OPC UA quando stabilisce comunicazioni sicure con i server OPC UA. Azure IoT OPC UA Broker usa lo stesso certificato dell'istanza dell'applicazione per tutti i canali sicuri che si apre ai server OPC UA.
Per altre informazioni, vedere Infrastruttura di certificati OPC UA per Azure IoT OPC UA Broker Preview.
Prerequisiti
Istanza distribuita di Azure IoT Operations Preview. Per distribuire le operazioni IoT di Azure a scopo dimostrativo ed esplorazione, vedere Avvio rapido: Distribuire operazioni IoT di Azure in un cluster Kubernetes abilitato per Arc.
Configurare un certificato di istanza dell'applicazione autofirmato
La distribuzione predefinita di OPC UA Broker installa tutte le risorse necessarie da cert-manager per creare un certificato autofirmato conforme a OPC UA. Questo certificato viene archiviato nel aio-opc-opcuabroker-default-application-cert
segreto. Questo segreto viene mappato in tutti i pod del connettore OPC UA e funge da certificato dell'istanza dell'applicazione client OPC UA. cert-manager
gestisce il rinnovo automatico del certificato dell'istanza dell'applicazione.
Questa configurazione è in genere sufficiente per la comunicazione conforme e sicura tra i server OPC UA e OPC UA Broker in un ambiente dimostrativo o di esplorazione. Per un ambiente di produzione, usare i certificati dell'istanza dell'applicazione di livello aziendale nella distribuzione.
Configurare l'elenco di certificati attendibili
Per connettersi a un asset, è prima necessario stabilire l'autenticazione reciproca dell'applicazione. Per OPC UA Broker, completare la procedura seguente:
Ottenere il certificato dell'istanza dell'applicazione server OPC UA come file. Questi file in genere hanno un'estensione .der o crt. Questa è solo la chiave pubblica.
Suggerimento
In genere, un server OPC UA ha un'interfaccia che consente di esportare il certificato dell'istanza dell'applicazione. Questa interfaccia non è standardizzata. Per i server come KEPServerEx, è disponibile un'interfaccia utente di configurazione basata su Windows per la gestione dei certificati. Altri server possono avere un'interfaccia Web o usare cartelle del sistema operativo per archiviare i certificati. Fare riferimento al manuale dell'utente del server per informazioni su come esportare il certificato dell'istanza dell'applicazione. Dopo aver ottenuto il certificato, assicurarsi che sia codificato con DER o PEM. In genere archiviato nei file con estensione der o crt. Se il certificato non è in uno di questi formati di file, usare uno strumento come
openssl
per trasformare il certificato nel formato richiesto.Salvare il certificato dell'istanza dell'applicazione del server OPC UA in Azure Key Vault come segreto.
Per un certificato con codifica DER in un file, ad esempio ./my-server.der, eseguire il comando seguente:
# Upload my-server.der OPC UA Server's certificate as secret to Azure Key Vault az keyvault secret set \ --name "my-server-der" \ --vault-name <your-azure-key-vault-name> \ --file ./my-server.der \ --encoding hex \ --content-type application/pkix-cert
Per un certificato con codifica PEM in un file come ./my-server.crt, eseguire il comando seguente:
# Upload my-server.crt OPC UA Server's certificate as secret to Azure Key Vault az keyvault secret set \ --name "my-server-crt" \ --vault-name <your-azure-key-vault-name> \ --file ./my-server.crt \ --encoding hex \ --content-type application/x-pem-file
Configurare la
aio-opc-ua-broker-trust-list
risorsa personalizzata nel cluster. Usare un client Kubernetes,kubectl
ad esempio per configurare i segreti, ad esempiomy-server-der
omy-server-crt
, nellaSecretProviderClass
matrice di oggetti nel cluster.L'esempio seguente mostra una risorsa personalizzata completa
SecretProviderClass
che contiene il certificato del server OPC UA attendibile in un file con codifica DER:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aio-opc-ua-broker-trust-list namespace: azure-iot-operations spec: provider: azure parameters: usePodIdentity: 'false' keyvaultName: <your-azure-key-vault-name> tenantId: <your-azure-tenant-id> objects: | array: - | objectName: my-server-der objectType: secret objectAlias: my-server.der objectEncoding: hex
L'esempio seguente mostra una risorsa personalizzata completa
SecretProviderClass
che contiene il certificato del server OPC UA attendibile in un file con codifica PEM con estensione crt:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aio-opc-ua-broker-trust-list namespace: azure-iot-operations spec: provider: azure parameters: usePodIdentity: 'false' keyvaultName: <your-azure-key-vault-name> tenantId: <your-azure-tenant-id> objects: | array: - | objectName: my-server-crt objectType: secret objectAlias: my-server.crt objectEncoding: hex
Nota
Il tempo necessario per proiettare i certificati di Azure Key Vault nel cluster dipende dall'intervallo di polling configurato.
Se il server OPC UA usa un certificato emesso da un'autorità di certificazione (CA), è possibile considerare attendibile la CA aggiungendo il certificato di chiave pubblica all'elenco di certificati attendibili OPC UA Broker. L'istanza di OPC UA Broker ora considera automaticamente attendibili tutti i server che usano un certificato valido emesso dalla CA. Non è quindi necessario aggiungere in modo esplicito il certificato del server OPC UA all'elenco di certificati attendibili OPC UA Broker.
Per considerare attendibile una CA, completare i passaggi seguenti:
Ottenere la codifica della chiave pubblica del certificato CA in formato DER o PEM. Questi certificati vengono in genere archiviati nei file con estensione .der o crt. Ottenere l'elenco di revoche di certificati (CRL) della CA. Questo elenco si trova in genere in un file con estensione crl. Per informazioni dettagliate, vedere la documentazione relativa al server OPC UA.
Salvare il certificato della CA e il CRL in Azure Key Vault come segreti.
Per un certificato con codifica DER in un file come ./my-server-ca.der, eseguire i comandi seguenti:
# Upload CA certificate as secret to Azure Key Vault az keyvault secret set \ --name "my-server-ca-der" \ --vault-name <your-azure-key-vault-name> \ --file ./my-server-ca.der \ --encoding hex \ --content-type application/pkix-cert # Upload the CRL as secret to Azure Key Vault az keyvault secret set \ --name "my-server-crl" \ --vault-name <your-azure-key-vault-name> \ --file ./my-server-ca.crl \ --encoding hex \ --content-type application/pkix-crl
Per un certificato con codifica PEM in un file, ad esempio ./my-server-ca.crt, eseguire i comandi seguenti:
# Upload CA certificate as secret to Azure Key Vault az keyvault secret set \ --name "my-server-ca-crt" \ --vault-name <your-azure-key-vault-name> \ --file ./my-server-ca.crt \ --encoding hex \ --content-type application/x-pem-file # Upload the CRL as secret to Azure Key Vault az keyvault secret set \ --name "my-server-crl" \ --vault-name <your-azure-key-vault-name> \ --file ./my-server-ca.crl \ --encoding hex \ --content-type application/pkix-crl
Configurare la
aio-opc-ua-broker-trust-list
risorsa personalizzata nel cluster. Usare un client Kubernetes,kubectl
ad esempio per configurare i segreti, ad esempiomy-server-ca-der
omy-server-ca-crt
, nellaSecretProviderClass
matrice di oggetti nel cluster.L'esempio seguente mostra una risorsa personalizzata completa
SecretProviderClass
che contiene il certificato del server OPC UA attendibile in un file con codifica DER:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aio-opc-ua-broker-trust-list namespace: azure-iot-operations spec: provider: azure parameters: usePodIdentity: 'false' keyvaultName: <your-azure-key-vault-name> tenantId: <your-azure-tenant-id> objects: | array: - | objectName: my-server-ca-der objectType: secret objectAlias: my-server-ca.der objectEncoding: hex - | objectName: my-server-ca-crl objectType: secret objectAlias: my-server-ca.crl objectEncoding: hex
L'esempio seguente mostra una risorsa personalizzata completa
SecretProviderClass
che contiene il certificato del server OPC UA attendibile in un file con codifica PEM con estensione crt:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aio-opc-ua-broker-trust-list namespace: azure-iot-operations spec: provider: azure parameters: usePodIdentity: 'false' keyvaultName: <your-azure-key-vault-name> tenantId: <your-azure-tenant-id> objects: | array: - | objectName: my-server-ca-crt objectType: secret objectAlias: my-server-ca.crt objectEncoding: hex - | objectName: my-server-ca-crl objectType: secret objectAlias: my-server-ca.crl objectEncoding: hex
Nota
Il tempo necessario per proiettare i certificati di Azure Key Vault nel cluster dipende dall'intervallo di polling configurato.
Configurare l'elenco dei certificati dell'autorità emittente
Se il server OPC UA usa un certificato emesso da un'autorità di certificazione (CA), ma non si vuole considerare attendibili tutti i certificati rilasciati dalla CA, completare la procedura seguente:
Considerare attendibile il certificato dell'istanza dell'applicazione del server OPC UA seguendo i primi tre passaggi della sezione precedente.
Oltre al certificato stesso, OPC UA Broker richiede il certificato CA per convalidare correttamente la catena di autorità di certificazione del certificato del server OPC UA. Aggiungere il certificato CA e il relativo elenco di revoche di certificati (CRL) a un elenco separato denominato
aio-opc-ua-broker-issuer-list
.Salvare il certificato della CA e il CRL in Azure Key Vault come segreti.
Per un certificato con codifica DER in un file come ./my-server-ca.der, eseguire i comandi seguenti:
# Upload CA certificate as secret to Azure Key Vault az keyvault secret set \ --name "my-server-ca-der" \ --vault-name <your-azure-key-vault-name> \ --file ./my-server-ca.der \ --encoding hex \ --content-type application/pkix-cert # Upload the CRL as secret to Azure Key Vault az keyvault secret set \ --name "my-server-crl" \ --vault-name <your-azure-key-vault-name> \ --file ./my-server-ca.crl \ --encoding hex \ --content-type application/pkix-crl
Per un certificato con codifica PEM in un file, ad esempio ./my-server-ca.crt, eseguire i comandi seguenti:
# Upload CA certificate as secret to Azure Key Vault az keyvault secret set \ --name "my-server-ca-crt" \ --vault-name <your-azure-key-vault-name> \ --file ./my-server-ca.crt \ --encoding hex \ --content-type application/x-pem-file # Upload the CRL as secret to Azure Key Vault az keyvault secret set \ --name "my-server-crl" \ --vault-name <your-azure-key-vault-name> \ --file ./my-server-ca.crl \ --encoding hex \ --content-type application/pkix-crl
Configurare la
aio-opc-ua-broker-issuer-list
risorsa personalizzata nel cluster. Usare un client Kubernetes,kubectl
ad esempio per configurare i segreti, ad esempiomy-server-ca-der
omy-server-ca-crt
, nellaSecretProviderClass
matrice di oggetti nel cluster.L'esempio seguente mostra una risorsa personalizzata completa
SecretProviderClass
che contiene il certificato del server OPC UA attendibile in un file con codifica DER:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aio-opc-ua-broker-issuer-list namespace: azure-iot-operations spec: provider: azure parameters: usePodIdentity: 'false' keyvaultName: <your-azure-key-vault-name> tenantId: <your-azure-tenant-id> objects: | array: - | objectName: my-server-ca-der objectType: secret objectAlias: my-server-ca.der objectEncoding: hex - | objectName: my-server-ca-crl objectType: secret objectAlias: my-server-ca.crl objectEncoding: hex
L'esempio seguente mostra una risorsa personalizzata completa
SecretProviderClass
che contiene il certificato del server OPC UA attendibile in un file con codifica PEM con estensione crt:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aio-opc-ua-broker-issuer-list namespace: azure-iot-operations spec: provider: azure parameters: usePodIdentity: 'false' keyvaultName: <your-azure-key-vault-name> tenantId: <your-azure-tenant-id> objects: | array: - | objectName: my-server-ca-crt objectType: secret objectAlias: my-server-ca.crt objectEncoding: hex - | objectName: my-server-ca-crl objectType: secret objectAlias: my-server-ca.crl objectEncoding: hex
Nota
Il tempo necessario per proiettare i certificati di Azure Key Vault nel cluster dipende dall'intervallo di polling configurato.
Configurare il server OPC UA
Per completare la configurazione dell'attendibilità reciproca dell'autenticazione dell'applicazione, è necessario configurare il server OPC UA in modo che consideri attendibile il certificato dell'istanza dell'applicazione OPC UA Broker:
Per estrarre il certificato di OPC UA Broker in un
opcuabroker.crt
file, eseguire il comando seguente:kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d > opcuabroker.crt
In PowerShell è possibile completare la stessa attività con il comando seguente:
kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | %{ [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_)) } > opcuabroker.crt
Molti server OPC UA supportano solo i certificati nel formato DER. Se necessario, usare il comando seguente per convertire il certificato opcuabroker.crt in opcuabroker.der:
openssl x509 -outform der -in opcuabroker.crt -out opcuabroker.der
Consultare la documentazione del server OPC UA per informazioni su come aggiungere il
opcuabroker.crt
file di certificato oopcuabroker.der
all'elenco di certificati attendibili del server.
Configurare un certificato dell'istanza dell'applicazione di livello aziendale
Per gli ambienti di produzione, è possibile configurare OPC UA Broker per l'uso di un certificato di istanza dell'applicazione di livello aziendale. In genere, un'autorità di certificazione (CA) dell'organizzazione rilascia questo certificato ed è necessario il certificato della CA per la configurazione. Spesso è presente una gerarchia di CA ed è necessario aggiungere la catena completa di convalida delle ca alla configurazione.
L'esempio seguente fa riferimento agli elementi seguenti:
Articolo | Descrizione |
---|---|
opcuabroker-certificate.der | File contenente la chiave pubblica del certificato dell'istanza dell'applicazione di livello aziendale. |
opcuabroker-certificate.pem | File contenente la chiave privata del certificato dell'istanza dell'applicazione di livello aziendale. |
subjectName |
Stringa del nome soggetto incorporata nel certificato dell'istanza dell'applicazione. |
applicationUri |
URI dell'istanza dell'applicazione incorporato nell'istanza dell'applicazione. |
enterprise-grade-ca-1.der | File contenente la chiave pubblica del certificato CA di livello aziendale. |
enterprise-grade-ca-1.crl | Il file dell'elenco di revoche di certificati (CRL) della CA. |
Come negli esempi precedenti, si usa Azure Key Vault per archiviare i certificati e i CRL. Si configurano quindi le SecretProviderClass
risorse personalizzate nel cluster connesso per proiettare i certificati e i CRL nei pod OPC UA Broker. Per configurare il certificato dell'istanza dell'applicazione di livello aziendale, completare la procedura seguente:
Salvare i certificati e il CRL in Azure Key Vault come segreti usando i comandi seguenti:
# Upload OPC UA Broker public key certificate as secret to Azure Key Vault az keyvault secret set \ --name "opcuabroker-certificate-der" \ --vault-name <your-azure-key-vault-name> \ --file ./opcuabroker-certificate.der \ --encoding hex \ --content-type application/pkix-cert # Upload OPC UA Broker private key certificate as secret to Azure Key Vault az keyvault secret set \ --name "opcuabroker-certificate-pem" \ --vault-name <your-azure-key-vault-name> \ --file ./opcuabroker-certificate.pem \ --encoding hex \ --content-type application/x-pem-file # Upload CA public key certificate as secret to Azure Key Vault az keyvault secret set \ --name "enterprise-grade-ca-1-der" \ --vault-name <your-azure-key-vault-name> \ --file ./enterprise-grade-ca-1.der \ --encoding hex \ --content-type application/pkix-cert # Upload CA certificate revocation list as secret to Azure Key Vault az keyvault secret set \ --name "enterprise-grade-ca-1-crl" \ --vault-name <your-azure-key-vault-name> \ --file ./enterprise-grade-ca-1.crl \ --encoding hex \ --content-type application/pkix-crl
Configurare la
aio-opc-ua-broker-client-certificate
risorsa personalizzata nel cluster. Usare un client Kubernetes,kubectl
ad esempio per configurare i segretiopcuabroker-certificate-der
eopcuabroker-certificate-pem
nellaSecretProviderClass
matrice di oggetti nel cluster.L'esempio seguente mostra una risorsa personalizzata completa
SecretProviderClass
dopo aver aggiunto le configurazioni dei segreti:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aio-opc-ua-broker-client-certificate namespace: azure-iot-operations spec: provider: azure parameters: usePodIdentity: 'false' keyvaultName: <your-azure-key-vault-name> tenantId: <your-azure-tenant-id> objects: | array: - | objectName: opcuabroker-certificate-der objectType: secret objectAlias: opcuabroker-certificate.der objectEncoding: hex - | objectName: opcuabroker-certificate-pem objectType: secret objectAlias: opcuabroker-certificate.pem objectEncoding: hex
Se si usa la CA per rilasciare certificati per i server OPC UA, configurare
aio-opc-ua-broker-issuer-list
la risorsa personalizzata nel cluster. Usare un client Kubernetes,kubectl
ad esempio per configurare i segretienterprise-grade-ca-1-der
eenterprise-grade-ca-1-crl
nellaSecretProviderClass
matrice di oggetti nel cluster.L'esempio seguente mostra una risorsa personalizzata completa
SecretProviderClass
dopo aver aggiunto le configurazioni dei segreti:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aio-opc-ua-broker-issuer-list namespace: azure-iot-operations spec: provider: azure parameters: usePodIdentity: 'false' keyvaultName: <your-azure-key-vault-name> tenantId: <your-azure-tenant-id> objects: | array: - | objectName: enterprise-grade-ca-1-der objectType: secret objectAlias: enterprise-grade-ca-1.der objectEncoding: hex - | objectName: enterprise-grade-ca-1-crl objectType: secret objectAlias: enterprise-grade-ca-1.crl objectEncoding: hex
Aggiornare la distribuzione di OPC UA Broker per usare la nuova
SecretProviderClass
origine per i certificati dell'istanza dell'applicazione usando il comando seguente:az k8s-extension update \ --version 0.3.0-preview \ --name opc-ua-broker \ --release-train preview \ --cluster-name <cluster-name> \ --resource-group <azure-resource-group> \ --cluster-type connectedClusters \ --auto-upgrade-minor-version false \ --config securityPki.applicationCert=aio-opc-ua-broker-client-certificate \ --config securityPki.subjectName=<subjectName> \ --config securityPki.applicationUri=<applicationUri>
Ora che OPC UA Broker usa il certificato aziendale, non dimenticare di aggiungere la chiave pubblica del nuovo certificato agli elenchi di certificati attendibili di tutti i server OPC UA a cui deve connettersi.