你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure IoT作使用 TLS 来加密所有组件之间的通信。 本文介绍如何管理内部和外部通信的证书,以及如何在生产部署中为内部通信引入自己的证书颁发机构(CA)。
先决条件
- 若要管理外部通信的证书,需要部署以安全设置的 Azure IoT 运营实例。 如果使用测试设置部署了 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 证书存储在命名空间
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 证书时,信任管理器会持续更新 ConfigMap。kubectl get configmap azure-iot-operations-aio-ca-trust-bundle -n azure-iot-operations -o "jsonpath={.data['ca\.crt']}" | openssl x509 -text -nooutCertificate: 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 操作的所有 TLS 服务器证书的通用颁发者。 MQTT 代理使用从自签名颁发者签名的同一 CA 证书创建的证书颁发者为端口 18883 上的默认 TLS 侦听器颁发 TLS 服务器证书。 可以使用以下命令检查颁发者:kubectl get clusterissuer azure-iot-operations-aio-certificate-issuer -o yamlapiVersion: 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 一起工作的 CA 颁发者,而不是使用默认的自签名颁发者来颁发内部通信所需的 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 --waittrust-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>
注释
自定义位置名称的最大长度为 63 个字符。
管理外部通信的证书
外部通信的证书管理体验使用 Azure Key Vault 作为云中的托管保管库解决方案。 证书作为机密添加到密钥保管库,并通过 Azure Key Vault 机密存储扩展作为 Kubernetes 机密同步到边缘。
连接器使用证书管理体验将客户端应用程序身份验证配置为外部服务器。 若要详细了解连接器如何使用证书与外部服务器建立互信,请参阅特定于连接器的证书管理文档。
当你以安全设置部署 Azure IoT 操作时,可以开始将证书添加到 Azure Key Vault,并将它们同步到 Kubernetes 群集,以用于外部连接的“信任列表”和“颁发者列表”存储。
若要管理用于外部通信的证书,请执行以下步骤:
转到 Azure IoT 操作体验,然后选择你的站点和 Azure IoT 操作实例。
在左侧导航窗格中,选择“设备”。
单击“管理证书和机密”。
在“证书和机密”页中,单击“添加新证书”。
可以通过两种方式添加新证书:
使用列表视图可以管理同步的证书。 可以查看所有同步的证书,以及它同步到的证书存储:
若要详细了解如何为特定连接器管理信任证书,请参阅特定于连接器的证书管理文档。
也可以删除同步的证书。 删除同步的证书时,它只会从 Kubernetes 群集中删除同步的证书,并且不会从 Azure Key Vault 中删除包含的机密引用。 必须从密钥保管库中手动删除证书机密。