你当前正在访问 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 -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 操作的所有 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 一起工作的 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 --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>
管理外部通信的证书
外部通信的证书管理体验使用 Azure Key Vault 作为云中的托管保管库解决方案。 证书作为机密添加到密钥保管库,并通过 Azure Key Vault 机密存储扩展作为 Kubernetes 机密同步到边缘。
例如,OPC UA 的连接器使用证书管理体验将 OPC UA 客户端应用程序身份验证配置为外部 OPC UA 服务器。 Azure IoT Operations 负责管理 OPC UA 连接器的两个不同证书存储:一个用于 信任列表,一个用于 颁发者列表。 若要详细了解 OPC UA 的连接器如何使用证书与 OPC UA 服务器建立互信,请参阅 OPC UA 连接器的 OPC UA 证书基础结构。
使用安全设置部署 Azure IoT 操作时,可以开始将证书添加到 Azure Key Vault,并将其同步到 Kubernetes 集群,以便在 OPC UA 连接中的信任列表和颁发者列表存储中使用:
上传证书:上传证书,该证书随后作为机密添加到 Azure Key Vault,并使用机密存储扩展自动同步到群集。
小窍门
- 上传后查看证书详细信息,以确保在添加到 Azure Key Vault 并同步到群集之前拥有正确的证书。
- 使用一个易于识别的名称,以便你能够识别将来哪个机密代表你的机密。
注释
仅仅上传证书不会将机密添加到 Azure Key Vault 并同步到群集,您必须选择应用以应用更改。
从 Azure Key Vault 添加:从 Azure Key Vault 添加要同步到群集的现有机密。
注释
请确保选择保存要同步到群集的证书的机密。 选择不是正确证书的机密会导致连接失败。
使用列表视图可以管理同步的证书。 可以查看所有同步的证书,以及它同步到的证书存储:
- 若要了解有关 信任列表 和 颁发者列表 存储的详细信息,请参阅 为 OPC UA 的连接器配置 OPC UA 证书基础结构。
也可以删除同步的证书。 删除同步的证书时,它只会从 Kubernetes 群集中删除同步的证书,并且不会从 Azure Key Vault 中删除包含的机密引用。 必须从密钥保管库中手动删除证书机密。