次の方法で共有


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

  • ルート CA 証明書のパブリック部分は、azure-iot-operations 名前空間の下にある azure-iot-operations-aio-ca-trust-bundle という名前の 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 と連携する独自の発行者を用意することをお勧めします。

独自の発行者を使用して 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>