次の方法で共有


Azure IoT Operations デプロイの証明書を管理する

Azure IoT Operations では、TLS を使用して、すべてのコンポーネント間の通信が暗号化されます。 この記事では、内部および外部通信用の証明書を管理する方法と、運用環境の展開で内部通信用に独自の証明機関 (CA) 発行者を持ち込む方法について説明します。

[前提条件]

  • 外部通信の証明書を管理するには、セキュリティで保護された設定でデプロイされた Azure IoT Operations インスタンスが必要です。 テスト設定を使用して Azure IoT Operations をデプロイした場合は、最初に セキュリティで保護された設定を有効にする必要があります。

内部通信用の証明書を管理する

Azure IoT Operations 内のすべての通信は、TLS を使用して暗号化されます。 開始するのに役立つように、Azure IoT Operations は、TLS サーバー証明書用の既定のルート CA と発行者と共にデプロイされます。 既定のセットアップは、開発とテストの目的で使用できます。 運用環境の展開では、独自の CA 発行者 とエンタープライズ PKI ソリューションを使用することをお勧めします。

TLS サーバー証明書用の既定の自己署名発行者とルート CA 証明書

作業を開始するのに役立つように、Azure IoT Operations は、TLS サーバー証明書用の既定の自己署名発行者とルート CA 証明書と共にデプロイされます。 この発行者を開発とテストに使うことができます。 Azure IoT Operations では、cert-manager を使用して TLS 証明書を管理し、trust-manager を使用して信頼バンドルをコンポーネントに配布します。

  • CA 証明書は自己署名証明書であるため、Azure IoT Operations の外部のどのクライアントからも信頼されていません。 CA 証明書のサブジェクトは CN=Azure IoT Operations Quickstart Root CA - Not for Production です。 CA 証明書は、cert-manager によって自動的にローテーションされます。

  • ルート CA 証明書は、azure-iot-operations-aio-ca-certificate 名前空間の下にある cert-manager という名前の Kubernetes シークレットに格納されます。

  • ルート CA 証明書のパブリック部分は、azure-iot-operations-aio-ca-trust-bundle 名前空間の下にある azure-iot-operations という名前の ConfigMap に格納されます。 ConfigMap から CA 証明書を取得し、kubectl と openssl を使用して調べることができます。 CA 証明書が cert-manager によってローテーションされる場合、ConfigMap は trust-manager によって最新の状態に維持されます。

    kubectl get configmap azure-iot-operations-aio-ca-trust-bundle -n azure-iot-operations -o "jsonpath={.data['ca\.crt']}" | openssl x509 -text -noout
    
    Certificate: 
        Data: 
            Version: 3 (0x2) 
            Serial Number: 
                <SERIAL-NUMBER> 
            Signature Algorithm: sha256WithRSAEncryption 
            Issuer: O=Microsoft, CN=Azure IoT Operations Quickstart Root CA - Not for Production 
            Validity 
                Not Before: Sep 18 20:42:19 2024 GMT 
                Not After : Sep 18 20:42:19 2025 GMT 
            Subject: O=Microsoft, CN=Azure IoT Operations Quickstart Root CA - Not for Production 
            Subject Public Key Info: 
                Public Key Algorithm: rsaEncryption 
                    Public-Key: (2048 bit) 
                    Modulus: <MODULUS> 
                                        Exponent: 65537 (0x10001) 
            X509v3 extensions: 
                X509v3 Key Usage: critical 
                    Certificate Sign, CRL Sign 
                X509v3 Basic Constraints: critical 
                    CA:TRUE 
                X509v3 Subject Key Identifier: 
                    <SUBJECT-KEY-IDENTIFIER> 
        Signature Algorithm: sha256WithRSAEncryption 
    [Signature] 
    
  • 既定では、azure-iot-operations namespaceazure-iot-operations-aio-certificate-issuer と呼ばれる発行者が既に構成されています。 これは IoT Operations のすべての TLS サーバー証明書のための共通の発行者として使用されます。 MQTT ブローカーでは、自己署名発行者によって署名された同じ CA 証明書から作成された発行者を使用して、ポート 18883 の既定の TLS リスナーに対して TLS サーバー証明書を発行します。 次のコマンドを使用して、発行者を検査できます。

    kubectl get clusterissuer azure-iot-operations-aio-certificate-issuer -o yaml
    
    apiVersion: cert-manager.io/v1 
    kind: ClusterIssuer 
    metadata: 
      creationTimestamp: "2024-09-18T20:42:17Z" 
      generation: 1 
      name: azure-iot-operations-aio-certificate-issuer 
      resourceVersion: "36665" 
      uid: 592700a6-95e0-4788-99e4-ea93934bd330 
    spec: 
      ca: 
        secretName: azure-iot-operations-aio-ca-certificate 
    status: 
      conditions: 
      - lastTransitionTime: "2024-09-18T20:42:22Z" 
        message: Signing CA verified 
        observedGeneration: 1 
        reason: KeyPairVerified 
        status: "True" 
        type: Ready 
    

独自の発行者を使用する

運用環境のデプロイでは、証明書を管理するためにエンタープライズ PKI を使用して Azure IoT Operations を設定し、既定の自己署名発行者を使用して内部通信用の TLS 証明書を発行するのではなく、エンタープライズ PKI で動作する独自の CA 発行者を使用することをお勧めします。

内部通信用に独自の発行者で Azure IoT Operations を設定するには、 クラスターにインスタンスをデプロイする前に次の手順を使用します

  1. クラスターの準備の手順に従ってクラスターを設定します。

  2. cert-managerをインストールします。 cert-manager は TLS 証明書を管理します。

  3. trust-managerをインストールします。 trust-manager のインストール中に、trust namespace を cert-manager に設定します。 例えば次が挙げられます。

    helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --set app.trust.namespace=cert-manager --wait
    

    trust-manager は、信頼バンドルをコンポーネントに配布するために使用されます。

  4. Azure IoT Operations 名前空間を作成します。

    kubectl create namespace azure-iot-operations
    
  5. cert-manager と連携する発行者をデプロイします。 サポートされているすべての発行者の一覧については、cert-manager の発行者を参照してください。

    発行者は、ClusterIssuer または Issuer の種類にすることができます。 Issuer を使用する場合は、発行者リソースを Azure IoT Operations 名前空間に作成する必要があります。

  6. Azure IoT Operations 名前空間で信頼バンドルを設定します。

    1. 信頼バンドルを設定するには、Azure IoT Operations 名前空間に ConfigMap を作成します。 CA 証明書の公開キー部分を、選択したキー名で構成マップに配置します。

    2. CA 証明書の公開キー部分を取得します。 公開キーを取得する手順は、選択する発行者によって異なります。

    3. ConfigMap を作成します。 例えば次が挙げられます。

      kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
      
  7. Azure IoT Operations のデプロイの手順に従って、"いくつかの変更を加えて" デプロイします。

    1. クラスターの準備中に --user-trust パラメーターを追加します。 例えば次が挙げられます。

      az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME>  -g <RESOURCE_GROUP> --user-trust
      
    2. Azure IoT Operations のデプロイ中に、必要な情報と共に --trust-settings パラメーターを追加します。 例えば次が挙げられます。

    az iot ops create --subscription <SUBSCRIPTION_ID> -g <RESOURCE_GROUP> --cluster <CLUSTER_NAME> --custom-___location <CUSTOM_LOCATION> -n <INSTANCE_NAME> --sr-resource-id <SCHEMAREGISTRY_RESOURCE_ID> --trust-settings configMapName=<CONFIGMAP_NAME> configMapKey=<CONFIGMAP_KEY_WITH_PUBLICKEY_VALUE> issuerKind=<CLUSTERISSUER_OR_ISSUER> issuerName=<ISSUER_NAME>
    

外部通信用の証明書を管理する

外部通信の証明書管理エクスペリエンスでは、クラウド上のマネージド コンテナー ソリューションとして Azure Key Vault が使用されます。 証明書はシークレットとしてキー コンテナーに追加され、 Azure Key Vault シークレット ストア拡張機能を介して Kubernetes シークレットとしてエッジに同期されます。

たとえば、OPC UA 用コネクタは、証明書管理エクスペリエンスを使用して、外部 OPC UA サーバーに対する OPC UA クライアント アプリケーション認証を構成します。 Azure IoT Operations は、OPC UA 用コネクタ用の 2 つの異なる証明書ストアを管理します。1 つは 信頼リスト 用、1 つは 発行者リスト用です。 OPC UA 用コネクタが証明書を使用して OPC UA サーバーとの相互信頼を確立する方法の詳細については、OPC UA 用コネクタの OPC UA 証明書インフラストラクチャを参照してください。

セキュリティで保護された設定で Azure IoT Operations をデプロイすると、Azure Key Vault への証明書の追加を開始し、それらを Kubernetes クラスターに同期して、OPC UA 接続の信頼リスト発行者リスト ストアで使用できます。

[資産エンドポイント] ページに新しい証明書を追加するときの [証明書のアップロード] オプションと [Azure Key Vault からの追加] オプションを示すスクリーンショット。

  • 証明書のアップロード: 証明書をアップロードし、シークレットとして Azure Key Vault に追加し、シークレット ストア拡張機能を使用してクラスターに自動的に同期します。

    ヒント

    • アップロードした証明書の詳細を表示して、Azure Key Vault に追加してクラスターに同期する前に、正しい証明書があることを確認します。
    • 後でシークレットを表すシークレットを認識できるように、わかりやすい名前を使用します。

    証明書をアップロードするだけでは、シークレットは Azure Key Vault に追加され、クラスターに同期されません。変更を適用するには、[ 適用 ] を選択する必要があります。

  • Azure Key Vault からの追加: クラスターに同期する Azure Key Vault から既存のシークレットを追加します。

    クラスターに同期する証明書を保持するシークレットを選択してください。 正しい証明書ではないシークレットを選択すると、接続が失敗します。

リスト ビューを使用すると、同期された証明書を管理できます。 同期されたすべての証明書と、同期先の証明書ストアを表示できます。

資産エンドポイント ページの証明書の一覧と、信頼リストと発行者リストでフィルター処理する方法を示すスクリーンショット。

同期された証明書も削除できます。 同期された証明書を削除すると、同期された証明書のみが Kubernetes クラスターから削除され、含まれているシークレット参照は Azure Key Vault から削除されません。 証明書シークレットは、キー コンテナーから手動で削除する必要があります。