Konfigurieren der OPC UA-Zertifikatinfrastruktur für Azure IoT OPC UA Broker Preview
Wichtig
Die von Azure Arc aktivierte Azure IoT Operations Preview befindet sich derzeit in der VORSCHAU. Sie sollten diese Vorschausoftware nicht in Produktionsumgebungen verwenden.
Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.
In diesem Artikel erfahren Sie, wie Sie die OPC UA-Zertifikatinfrastruktur für Azure IoT OPC UA Broker konfigurieren. Mit dieser Konfiguration können Sie festlegen, welchen OPC UA-Servern Sie vertrauen, um eine sichere Sitzung einzurichten.
Auf der Grundlage der OPC UA-Spezifikation fungiert OPC UA Broker als einzelne OPC UA-Anwendung, wenn eine sichere Kommunikation mit OPC UA-Servern hergestellt wird. Azure IoT OPC UA Broker verwendet dasselbe Anwendungsinstanzzertifikat für alle sicheren Kanäle, die zu den OPC UA-Servern geöffnet werden.
Weitere Informationen finden Sie unter OPC UA-Zertifikatinfrastruktur für Azure IoT OPC UA Broker Preview.
Voraussetzungen
Eine bereitgestellte Instanz von Azure IoT Einsatz Preview. Wenn Sie Azure IoT Einsatz zu Demonstrations- und Erkundungszwecken bereitstellen möchten, lesen Sie Schnellstart: Bereitstellen von Azure IoT Einsatz in einem Arc-fähigen Kubernetes-Cluster.
Konfigurieren eines selbstsignierten Anwendungsinstanzzertifikats
Die Standardbereitstellung von OPC UA Broker installiert alle Ressourcen, die von cert-manager benötigt werden, um ein selbstsigniertes OPC UA-kompatibles Zertifikat zu erstellen. Dieses Zertifikat wird im Geheimnis aio-opc-opcuabroker-default-application-cert
gespeichert. Dieses Geheimnis wird allen OPC UA-Connector-Pods zugeordnet und fungiert als Anwendungsinstanzzertifikat des OPC UA-Clients. cert-manager
behandelt die automatische Verlängerung dieses Anwendungsinstanzzertifikats.
Diese Konfiguration reicht in der Regel für die kompatible und sichere Kommunikation zwischen Ihren OPC UA-Servern und OPC UA Broker in einer Demonstrations- oder Erkundungsumgebung aus. Für eine Produktionsumgebung sollten Sie Anwendungsinstanzzertifikate auf Unternehmensniveau in Ihrer Bereitstellung verwenden.
Konfigurieren der Liste vertrauenswürdiger Zertifikate
Um eine Verbindung mit einem Objekt herzustellen, müssen Sie zuerst die gegenseitige Vertrauensstellung der Anwendungsauthentifizierung einrichten. Führen Sie für OPC UA Broker die folgenden Schritte aus:
Rufen Sie das Instanzzertifikat der OPC UA-Serveranwendung als Datei ab. Diese Dateien haben in der Regel die Erweiterung „.der“ oder „.crt“. Dies ist nur der öffentliche Schlüssel.
Tipp
In der Regel verfügen OPC UA-Server über eine Schnittstelle, über die Sie ihr Anwendungsinstanzzertifikat exportieren können. Diese Schnittstelle ist nicht standardisiert. Für Server wie KEPServerEx steht eine Windows-basierte Konfigurationsbenutzeroberfläche für die Zertifikatverwaltung zur Verfügung. Andere Server verfügen möglicherweise über eine Webschnittstelle oder verwenden Betriebssystemordner zum Speichern der Zertifikate. Weitere Informationen zum Exportieren des Anwendungsinstanzzertifikats finden Sie im Benutzerhandbuch Ihres Servers. Nachdem Sie das Zertifikat erhalten haben, stellen Sie sicher, dass es DER- oder PEM-codiert ist. Es wird in der Regel in Dateien mit der Erweiterung „.der“ oder „.crt“ gespeichert. Wenn das Zertifikat keins dieser Formate hat, verwenden Sie ein Tool wie
openssl
, um das Zertifikat in das erforderliche Dateiformat zu transformieren.Speichern Sie das Anwendungsinstanzzertifikat des OPC UA-Servers als Geheimnis in Azure Key Vault.
Führen Sie für ein DER-codiertes Zertifikat in einer Datei wie ./my-server.der den folgenden Befehl aus:
# 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
Führen Sie für ein PEM-codiertes Zertifikat in einer Datei wie ./my-server.crt den folgenden Befehl aus:
# 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
Konfigurieren Sie die benutzerdefinierte Ressource
aio-opc-ua-broker-trust-list
im Cluster. Verwenden Sie einen Kubernetes-Client wiekubectl
, um die Geheimnisse (etwamy-server-der
odermy-server-crt
) imSecretProviderClass
-Objektarray im Cluster zu konfigurieren.Das folgende Beispiel zeigt eine vollständige benutzerdefinierte
SecretProviderClass
-Ressource mit dem vertrauenswürdigen OPC UA-Serverzertifikat in einer DER-codierten Datei: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
Das folgende Beispiel zeigt eine vollständige benutzerdefinierte
SecretProviderClass
-Ressource mit dem vertrauenswürdigen OPC UA-Serverzertifikat in einer PEM-codierten Datei mit der Erweiterung „.cer“: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
Hinweis
Die Zeit, die zum Projizieren von Azure Key Vault-Zertifikaten in den Cluster benötigt wird, hängt vom konfigurierten Abrufintervall ab.
Wenn Ihr OPC UA-Server ein von einer Zertifizierungsstelle ausgestelltes Zertifikat verwendet, können Sie der Zertifizierungsstelle vertrauen, indem Sie das Zertifikat mit öffentlichem Schlüssel zur Liste vertrauenswürdiger Zertifikate von OPC UA Broker hinzufügen. Ihre OPC UA Broker-Instanz vertraut nun automatisch allen Servern, die ein gültiges Zertifikat verwenden, das von der Zertifizierungsstelle ausgestellt wurde. Daher müssen Sie das Zertifikat des OPC UA-Servers nicht explizit zur Liste vertrauenswürdiger Zertifikate von OPC UA Broker hinzufügen.
Um einer Zertifizierungsstelle zu vertrauen, müssen Sie die folgenden Schritte ausführen:
Rufen Sie den öffentlichen Schlüssel des Zertifizierungsstellenzertifikats im DER- oder PEM-Format ab. Diese Zertifikate werden in der Regel in Dateien mit der Erweiterung „.der“ oder „.crt“ gespeichert. Rufen Sie die Zertifikatssperrliste (Certificate Revocation List, CRL) der Zertifizierungsstelle ab. Diese Liste ist in der Regel in einer Datei mit der Erweiterung „.crl“ enthalten. Ausführliche Informationen finden Sie in der Dokumentation des OPC UA-Servers.
Speichern Sie das Zertifizierungsstellenzertifikat und die CRL als Geheimnisse in Azure Key Vault.
Führen Sie für ein DER-codiertes Zertifikat in einer Datei wie ./my-server-ca.der den folgenden Befehl aus:
# 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
Führen Sie für ein PEM-codiertes Zertifikat in einer Datei wie ./my-server-ca.crt den folgenden Befehl aus:
# 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
Konfigurieren Sie die benutzerdefinierte Ressource
aio-opc-ua-broker-trust-list
im Cluster. Verwenden Sie einen Kubernetes-Client wiekubectl
, um die Geheimnisse (etwamy-server-ca-der
odermy-server-ca-crt
) imSecretProviderClass
-Objektarray im Cluster zu konfigurieren.Das folgende Beispiel zeigt eine vollständige benutzerdefinierte
SecretProviderClass
-Ressource mit dem vertrauenswürdigen OPC UA-Serverzertifikat in einer DER-codierten Datei: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
Das folgende Beispiel zeigt eine vollständige benutzerdefinierte
SecretProviderClass
-Ressource mit dem vertrauenswürdigen OPC UA-Serverzertifikat in einer PEM-codierten Datei mit der Erweiterung „.cer“: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
Hinweis
Die Zeit, die zum Projizieren von Azure Key Vault-Zertifikaten in den Cluster benötigt wird, hängt vom konfigurierten Abrufintervall ab.
Konfigurieren der Ausstellerzertifikatliste
Wenn Ihr OPC UA-Server ein von einer Zertifizierungsstelle ausgestelltes Zertifikat verwendet, Sie jedoch nicht alle von der Zertifizierungsstelle ausgestellten Zertifikate als vertrauenswürdig festlegen möchte, führen Sie die folgenden Schritte aus:
Vertrauen Sie dem Anwendungsinstanzzertifikat des OPC UA-Servers, indem Sie die ersten drei Schritte im vorherigen Abschnitt ausführen.
Neben dem Zertifikat selbst benötigt OPC UA Broker das Zertifizierungsstellenzertifikat, um die Ausstellerkette des OPC UA-Serverzertifikats ordnungsgemäß zu überprüfen. Fügen Sie das Zertifizierungsstellenzertifikat und seine Zertifikatsperrliste zu einer separaten Liste namens
aio-opc-ua-broker-issuer-list
hinzu.Speichern Sie das Zertifizierungsstellenzertifikat und die CRL als Geheimnisse in Azure Key Vault.
Führen Sie für ein DER-codiertes Zertifikat in einer Datei wie ./my-server-ca.der den folgenden Befehl aus:
# 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
Führen Sie für ein PEM-codiertes Zertifikat in einer Datei wie ./my-server-ca.crt den folgenden Befehl aus:
# 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
Konfigurieren Sie die benutzerdefinierte Ressource
aio-opc-ua-broker-issuer-list
im Cluster. Verwenden Sie einen Kubernetes-Client wiekubectl
, um die Geheimnisse (etwamy-server-ca-der
odermy-server-ca-crt
) imSecretProviderClass
-Objektarray im Cluster zu konfigurieren.Das folgende Beispiel zeigt eine vollständige benutzerdefinierte
SecretProviderClass
-Ressource mit dem vertrauenswürdigen OPC UA-Serverzertifikat in einer DER-codierten Datei: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
Das folgende Beispiel zeigt eine vollständige benutzerdefinierte
SecretProviderClass
-Ressource mit dem vertrauenswürdigen OPC UA-Serverzertifikat in einer PEM-codierten Datei mit der Erweiterung „.cer“: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
Hinweis
Die Zeit, die zum Projizieren von Azure Key Vault-Zertifikaten in den Cluster benötigt wird, hängt vom konfigurierten Abrufintervall ab.
Konfigurieren des OPC UA-Servers
Um die Konfiguration der gegenseitigen Vertrauensstellung der Anwendungsauthentifizierung abzuschließen, müssen Sie Ihren OPC UA-Server so konfigurieren, dass er das Anwendungsinstanzzertifikat von OPC UA Brokers als vertrauenswürdig einstuft:
Führen Sie zum Extrahieren des OPC UA Broker-Zertifikats in eine Datei vom Typ
opcuabroker.crt
den folgenden Befehl aus:kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d > opcuabroker.crt
In PowerShell können Sie dieselbe Aufgabe mit dem folgenden Befehl ausführen:
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
Viele OPC UA-Server unterstützen zertifikate nur im DER-Format. Verwenden Sie bei Bedarf den folgenden Befehl, um das Zertifikat opcuabroker.crt in opcuabroker.der zu konvertieren:
openssl x509 -outform der -in opcuabroker.crt -out opcuabroker.der
In der Dokumentation Ihres OPC UA-Servers wird erläutert, wie Sie die Zertifikatdatei
opcuabroker.crt
oderopcuabroker.der
zur Liste der vertrauenswürdigen Zertifikate des Servers hinzufügen.
Konfigurieren eines Anwendungsinstanzzertifikats auf Unternehmensniveau
Für Produktionsumgebungen können Sie OPC UA Broker so konfigurieren, dass ein Anwendungsinstanzzertifikat auf Unternehmensniveau verwendet wird. In der Regel stellt eine Zertifizierungsstelle für Unternehmen dieses Zertifikat aus, und Sie benötigen das Zertifizierungsstellenzertifikat in Ihrer Konfiguration. Häufig gibt es eine Hierarchie von Zertifizierungsstellen, und Sie müssen Ihrer Konfiguration die vollständige Validierungskette von Zertifizierungsstellen hinzufügen.
Das folgende Beispiel verweist auf die folgenden Elemente:
Artikel | Beschreibung |
---|---|
opcuabroker-certificate.der | Datei, die den öffentlichen Schlüssel des Anwendungsinstanzzertikats auf Unternehmensniveau enthält |
opcuabroker-certificate.pem | Datei, die den privaten Schlüssel des Anwendungsinstanzzertikats auf Unternehmensniveau enthält |
subjectName |
Die in das Anwendungsinstanzzertifikat eingebettete Zeichenfolge für den Antragstellernamen |
applicationUri |
Der in die Anwendungsinstanz eingebettete Anwendungsinstanz-URI |
enterprise-grade-ca-1.der | Datei, die den öffentlichen Schlüssel des Zertifizierungsstellenzertifikats auf Unternehmensniveau enthält |
enterprise-grade-ca-1.crl | Die Datei für die Zertifikatssperrliste der Zertifizierungsstelle |
Wie in den vorherigen Beispielen verwenden Sie Azure Key Vault zum Speichern der Zertifikate und Zertifikatssperrlisten. Anschließend konfigurieren Sie die benutzerdefinierten SecretProviderClass
-Ressourcen im verbundenen Cluster, um die Zertifikate und Zertifikatssperrlisten in die OPC UA Broker-Pods zu projizieren. Führen Sie die folgenden Schritte aus, um das Zertifikat der Anwendungsinstanz auf Unternehmensniveau zu konfigurieren.
Speichern Sie die Zertifikate und die Zertifikatssperrliste mithilfe der folgenden Befehle als Geheimnisse in Azure Key Vault:
# 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
Konfigurieren Sie die benutzerdefinierte Ressource
aio-opc-ua-broker-client-certificate
im Cluster. Verwenden Sie einen Kubernetes-Client wiekubectl
, um die Geheimnisseopcuabroker-certificate-der
undopcuabroker-certificate-pem
imSecretProviderClass
-Objektarray im Cluster zu konfigurieren.Das folgende Beispiel zeigt eine vollständige benutzerdefinierte
SecretProviderClass
-Ressource, nachdem Sie die Geheimniskonfigurationen hinzugefügt haben: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
Wenn Sie die Zertifizierungsstelle verwenden, um Zertifikate für Ihre OPC UA-Server auszustellen, konfigurieren Sie die benutzerdefinierte
aio-opc-ua-broker-issuer-list
-Ressource im Cluster. Verwenden Sie einen Kubernetes-Client wiekubectl
, um die Geheimnisseenterprise-grade-ca-1-der
undenterprise-grade-ca-1-crl
imSecretProviderClass
-Objektarray im Cluster zu konfigurieren.Das folgende Beispiel zeigt eine vollständige benutzerdefinierte
SecretProviderClass
-Ressource, nachdem Sie die Geheimniskonfigurationen hinzugefügt haben: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
Aktualisieren Sie die Bereitstellung von OPC UA Broker, um die neue
SecretProviderClass
-Quelle für Anwendungsinstanzzertifikate mithilfe des folgenden Befehls zu verwenden: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>
Da OPC UA Broker nun das Unternehmenszertifikat verwendet, vergessen Sie nicht, den öffentlichen Schlüssel des neuen Zertifikats in den Listen vertrauenswürdiger Zertifikate aller OPC UA-Server hinzuzufügen, mit denen eine Verbindung hergestellt werden muss.