你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure IoT 操作内部通信的证书管理
Azure IoT 操作中的所有通信都使用 TLS 进行加密。 为了帮助入门,Azure IoT 操作使用 TLS 服务器证书的默认根 CA 和颁发者进行部署。 你可以使用默认设置进行开发和测试。 对于生产部署,我们建议使用自己的 CA 颁发者和企业 PKI 解决方案。
TLS 服务器证书的默认自签名颁发者和根 CA 证书
为了帮助你入门,我们为 Azure IoT 操作部署了 TLS 服务器证书的默认自签名颁发者和根 CA 证书。 可以使用此颁发者进行开发和测试。 Azure IoT 操作使用 cert-manager 来管理 TLS 证书,使用 trust-manager 将信任捆绑包分发到组件。
CA 证书是自签名证书,不受 Azure IoT 操作外部的任何客户端信任。 CA 证书的使用者是
CN=Azure IoT Operations Quickstart Root CA - Not for Production
。 CA 证书由证书管理器自动轮替。根 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 证书时,信任管理器会持续更新 ConfigMap。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-aio-certificate-issuer
的azure-iot-operations namespace
中已配置了颁发者。 它用作 IoT 操作的所有 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 操作来管理证书,并且将自己的颁发者与企业 PKI 配合使用,而不是使用默认自签名颁发者颁发 TLS 证书进行内部通信。
若要使用自己的颁发者设置 Azure IoT 操作,请在将实例部署到群集之前按照以下步骤操作:
按照准备群集中的步骤设置群集。
安装 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 操作命名空间。
kubectl create namespace azure-iot-operations
部署适用于 cert-manager 的颁发者。 有关所有受支持的颁发者的列表,请参阅 cert-manager 颁发者。
颁发者可以是
ClusterIssuer
或Issuer
类型。 如果使用Issuer
,则必须在 Azure IoT 操作命名空间中创建颁发者资源。在 Azure IoT 操作命名空间中设置信任捆绑包。
若要设置信任捆绑包,请在 Azure IoT 操作命名空间中创建 ConfigMap。 将 CA 证书的公钥部分添加到 ConfigMap 中,可以自己选择键名。
获取 CA 证书的公钥部分。 获取公钥的步骤取决于所选的颁发者。
创建 ConfigMap。 例如:
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
按照部署 Azure IoT 操作中的步骤进行部署,其中有一些变动。
在准备群集时添加
--user-trust
参数。 例如:az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME> -g <RESOURCE_GROUP> --user-trust
在部署 Azure IoT 操作时添加具有必要信息的
--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>