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 namespace
にazure-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 を設定するには、クラスターにインスタンスをデプロイする前に、次の手順を使用します。
クラスターの準備の手順に従ってクラスターを設定します。
cert-manager をインストールします。 cert-manager は TLS 証明書を管理します。
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 は、信頼バンドルをコンポーネントに配布するために使用されます。
Azure IoT Operations 名前空間を作成します。
kubectl create namespace azure-iot-operations
cert-manager と連携する発行者をデプロイします。 サポートされているすべての発行者の一覧については、cert-manager の発行者を参照してください。
発行者は、
ClusterIssuer
またはIssuer
の種類にすることができます。Issuer
を使用する場合は、発行者リソースを Azure IoT Operations 名前空間に作成する必要があります。Azure IoT Operations 名前空間で信頼バンドルを設定します。
信頼バンドルを設定するには、Azure IoT Operations 名前空間に ConfigMap を作成します。 CA 証明書の公開キー部分を、選択したキー名で構成マップに配置します。
CA 証明書の公開キー部分を取得します。 公開キーを取得する手順は、選択する発行者によって異なります。
ConfigMap を作成します。 次に例を示します。
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
Azure IoT Operations のデプロイの手順に従って、"いくつかの変更を加えて" デプロイします。
クラスターの準備中に
--user-trust
パラメーターを追加します。 次に例を示します。az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME> -g <RESOURCE_GROUP> --user-trust
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>