OPC UA 用コネクタの OPC UA 証明書インフラストラクチャを構成する
重要
Azure Arc によって有効にされる Azure IoT Operations Preview は、 現在プレビュー段階です。 運用環境ではこのプレビュー ソフトウェアを使わないでください。
一般公開されたリリースが利用可能になったときは、新しい Azure IoT Operations インストールを展開する必要があります。プレビュー段階のインストールをアップグレードすることはできません。
ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
この記事では、OPC UA 用コネクタ用に OPC UA 証明書インフラストラクチャを構成する方法について説明します。 この構成により、安全にセッションを確立するための信頼できる OPC UA サーバーを決定できます。
OPC UA 用コネクタは、OPC UA サーバーとの間にセキュリティで保護された通信を確立するときに、OPC UA 仕様に基づいて単一の OPC UA アプリケーションとして機能します。 OPC UA 用コネクタは、それが OPC UA サーバーに対して開いた、セキュリティで保護されたすべてのチャネルについて、同じクライアント証明書を使用します。
詳細については、「OPC UA 用コネクタの OPC UA 証明書インフラストラクチャ」を参照してください。
前提条件
Azure IoT Operations プレビューのデプロイされたインスタンス。 デモと調査の目的で Azure IoT Operations をデプロイするには、「クイック スタート: K3s を使用して Github Codespaces で Azure IoT Operations プレビューを実行する」を参照してください。
自己署名アプリケーション インスタンス証明書を構成する
OPC UA 用コネクタの既定の展開では、cert-manager が必要とするすべてのリソースをインストールして、OPC UA 準拠の自己署名証明書を作成します。 この証明書は aio-opc-opcuabroker-default-application-cert
シークレットに格納されます。 このシークレットは、すべての OPC UA 用コネクタ ポッドにマップされ、OPC UA クライアントのアプリケーション インスタンス証明書として機能します。 cert-manager
は、このアプリケーション インスタンス証明書の自動更新を処理します。
デモ環境や調査環境で、OPC UA サーバーと OPC UA 用コネクタとの間で規制に準拠しセキュリティで保護された通信を行うには、この構成で通常十分です。 運用環境では、デプロイでエンタープライズ グレードのアプリケーション インスタンス証明書を使用する必要があります。
信頼できる証明書の一覧を構成する
資産に接続するには、まず、アプリケーション認証の相互信頼を確立する必要があります。 OPC UA 用コネクタに対して、次の手順を実行します。
OPC UA サーバー アプリケーションのインスタンス証明書をファイルとして取得します。 これらのファイルの拡張子は、通常 .der または .crt です。 これは公開キーのみです。
ヒント
通常、OPC UA サーバーには、アプリケーション インスタンス証明書をエクスポートできるインターフェイスがあります。 このインターフェイスは標準化されていません。 KEPServerEx などのサーバーでは、証明書を管理するための Windows ベースの構成 UI があります。 他のサーバーは、Web インターフェイスがある場合や、オペレーティング システム フォルダーを使用して証明書を格納する場合があります。 アプリケーション インスタンス証明書をエクスポートする方法については、サーバーのユーザー マニュアルを参照してください。 証明書を取得したら、それが DER または PEM でエンコードされていることを確認してください。 通常、拡張子が .der または .crt のファイルに格納されます。 証明書がこれらのファイル形式にない場合は、
openssl
などのツールを使用して、証明書を必要な形式に変換します。OPC UA Server のアプリケーション インスタンス証明書をシークレットとして Azure Key Vault に保存します。
./my-server.der などのファイルにある DER でエンコードされた証明書の場合は、次のコマンドを実行します。
# 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
./my-server.crt などのファイルにある PEM でエンコードされた証明書の場合は、次のコマンドを実行します。
# 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
クラスター内の
aio-opc-ua-broker-trust-list
カスタム リソースを構成します。kubectl
などの Kubernetes クライアントを使用して、クラスター内のSecretProviderClass
オブジェクト配列にmy-server-der
やmy-server-crt
などのシークレットを構成します。次の例は、DER でエンコードされたファイルに信頼できる OPC UA サーバー証明書を含む完全な
SecretProviderClass
カスタム リソースを示しています。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
次の例は、.crt 拡張子を持つ PEM でエンコードされたファイルに信頼できる OPC UA サーバー証明書を含む完全な
SecretProviderClass
カスタム リソースを示しています。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
Note
クラスターへの Azure Key Vault 証明書のプロジェクションにかかる時間は、構成されたポーリング間隔によって異なります。
OPC UA サーバーが証明機関 (CA) によって発行された証明書を使用する場合は、その公開キー証明書を OPC UA 用コネクタの信頼できる証明書リストに追加することで、その CA を信頼できます。 これで、OPC UA 用コネクタ インスタンスが、その CA によって発行された有効な証明書を使用するすべてのサーバーを自動的に信頼するようになります。 そのため、OPC UA サーバーの証明書を OPC UA 用コネクタの信頼できる証明書の一覧に明示的に追加する必要はありません。
CA を信頼するには、次の手順を実行します。
CA 証明書の公開キーを DER または PEM 形式でエンコードしたものを取得します。 これらの証明書は、通常拡張子が .der または .crt のファイルに格納されます。 CA の証明書失効リスト (CRL) を取得します。 このリストは、通常 .crl を含むファイルです。 詳細については、OPC UA サーバーのマニュアルを確認してください。
Azure Key Vault の CA 証明書と CRL をシークレットとして保存します。
./my-server-ca.der などのファイルにある DER でエンコードされた証明書の場合は、次のコマンドを実行します。
# 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
./my-server-ca.crt などのファイルにある PEM でエンコードされた証明書の場合は、次のコマンドを実行します。
# 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
クラスター内の
aio-opc-ua-broker-trust-list
カスタム リソースを構成します。kubectl
などの Kubernetes クライアントを使用して、クラスター内のSecretProviderClass
オブジェクト配列にmy-server-ca-der
やmy-server-ca-crt
などのシークレットを構成します。次の例は、DER でエンコードされたファイルに信頼できる OPC UA サーバー証明書を含む完全な
SecretProviderClass
カスタム リソースを示しています。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
次の例は、.crt 拡張子を持つ PEM でエンコードされたファイルに信頼できる OPC UA サーバー証明書を含む完全な
SecretProviderClass
カスタム リソースを示しています。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
Note
クラスターへの Azure Key Vault 証明書のプロジェクションにかかる時間は、構成されたポーリング間隔によって異なります。
発行者証明書の一覧を構成する
OPC UA サーバーが証明機関 (CA) によって発行された証明書を使用しているが、CA で発行されたすべての証明書を信頼したくない場合は、次の手順を実行します。
前のセクションの最初の 3 つの手順に従って、OPC UA サーバーのアプリケーション インスタンス証明書を信頼します。
OPC UA 用コネクタは、証明書自体に加えて、OPC UA サーバーの証明書の発行者チェーンを適切に検証するための CA 証明書を必要とします。 CA 証明書とその証明書失効リスト (CRL) を
aio-opc-ua-broker-issuer-list
という別の一覧に追加します。Azure Key Vault の CA 証明書と CRL をシークレットとして保存します。
./my-server-ca.der などのファイルにある DER でエンコードされた証明書の場合は、次のコマンドを実行します。
# 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
./my-server-ca.crt などのファイルにある PEM でエンコードされた証明書の場合は、次のコマンドを実行します。
# 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
クラスター内の
aio-opc-ua-broker-issuer-list
カスタム リソースを構成します。kubectl
などの Kubernetes クライアントを使用して、クラスター内のSecretProviderClass
オブジェクト配列にmy-server-ca-der
やmy-server-ca-crt
などのシークレットを構成します。次の例は、DER でエンコードされたファイルに信頼できる OPC UA サーバー証明書を含む完全な
SecretProviderClass
カスタム リソースを示しています。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
次の例は、.crt 拡張子を持つ PEM でエンコードされたファイルに信頼できる OPC UA サーバー証明書を含む完全な
SecretProviderClass
カスタム リソースを示しています。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
Note
クラスターへの Azure Key Vault 証明書のプロジェクションにかかる時間は、構成されたポーリング間隔によって異なります。
OPC UA サーバーを構成する
アプリケーション認証の相互信頼の構成を完了するには、OPC UA サーバーが OPC UA 用コネクタのアプリケーション インスタンス証明書を信頼するように構成する必要があります。
OPC UA 用コネクタの証明書を
opcuabroker.crt
ファイルに抽出するには、次のコマンドを実行します。kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d > opcuabroker.crt
PowerShell では、次のコマンドを使用して同じタスクを完了できます:
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
多くの OPC UA サーバーでは、DER ファイル形式の証明書のみがサポートされています。 必要に応じて、次のコマンドを使用して opcuabroker.crt 証明書を opcuabroker.der に変換します。
openssl x509 -outform der -in opcuabroker.crt -out opcuabroker.der
opcuabroker.crt
またはopcuabroker.der
証明書ファイルをサーバーの信頼できる証明書の一覧に追加する方法については、OPC UA サーバーのドキュメントを参照してください。
エンタープライズ グレードのアプリケーション インスタンス証明書を構成する
運用環境については、エンタープライズ グレードのアプリケーション インスタンス証明書を使用するように OPC UA 用コネクタを構成できます。 通常、エンタープライズ証明機関 (CA) がこの証明書を発行するため、構成には CA 証明書が必要です。 多くの場合、CA の階層があり、CA の完全な検証チェーンを構成に追加する必要があります。
次の例では、次の項目を参照しています。
アイテム | 説明 |
---|---|
opcuabroker-certificate.der | エンタープライズ グレードのアプリケーション インスタンス証明書の公開キーを含むファイル。 |
opcuabroker-certificate.pem | エンタープライズ グレードのアプリケーション インスタンス証明書の秘密キーを含むファイル。 |
subjectName |
アプリケーション インスタンス証明書に埋め込まれたサブジェクト名の文字列。 |
applicationUri |
アプリケーション インスタンスに埋め込まれているアプリケーション インスタンス URI。 |
enterprise-grade-ca-1.der | エンタープライズ グレードの CA 証明書の公開キーを含むファイル。 |
enterprise-grade-ca-1.crl | CA の証明書失効リスト (CRL) ファイル。 |
前の例と同様に、Azure Key Vault を使用して証明書と CRL を格納します。 次に、証明書と CRL を OPC UA 用コネクタ ポッドに投影するように、接続されたクラスター内の SecretProviderClass
カスタム リソースを構成します。 エンタープライズ グレードのアプリケーション インスタンス証明書を構成するには、次の手順を実行します。
次のコマンドを使用して、証明書と CRL をシークレットとして Azure Key Vault に保存します。
# Upload the connector for OPC UA 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 connector for OPC UA 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
クラスター内の
aio-opc-ua-broker-client-certificate
カスタム リソースを構成します。kubectl
などの Kubernetes クライアントを使用して、クラスター内のSecretProviderClass
オブジェクト配列にシークレットopcuabroker-certificate-der
およびopcuabroker-certificate-pem
を構成します。次の例では、シークレット構成を追加した後の完全な
SecretProviderClass
カスタム リソースを示しています。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
CA を使用して OPC UA サーバー用の証明書を発行する場合は、クラスターに
aio-opc-ua-broker-issuer-list
カスタム リソースを構成します。kubectl
などの Kubernetes クライアントを使用して、クラスター内のSecretProviderClass
オブジェクト配列にシークレットenterprise-grade-ca-1-der
およびenterprise-grade-ca-1-crl
を構成します。次の例では、シークレット構成を追加した後の完全な
SecretProviderClass
カスタム リソースを示しています。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
次のコマンドを使用して、アプリケーション インスタンス証明書に新しい
SecretProviderClass
ソースを使用するように OPC UA 用コネクタの展開を更新します: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>
これで、OPC UA 用コネクタがエンタープライズ証明書を使用するようになったので、それが接続する必要があるすべての OPC UA サーバーの信頼できる証明書リストに新しい証明書の公開キーを追加することを忘れないでください。