你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

管理 Azure IoT 操作预览版部署的机密

重要

Azure IoT 操作预览版(由 Azure Arc 启用)当前处于预览状态。 不应在生产环境中使用此预览版软件。

有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款

Azure IoT 操作预览版中的机密管理将使用 Azure 密钥保管库作为云中的托管保管库解决方案,并使用机密存储 CSI 驱动程序从云中拉取机密并将其存储在边缘。

先决条件

  • 启用了 Arc 的 Kubernetes 群集。 有关详细信息,请参阅准备群集

在群集上配置机密存储

Azure IoT 操作支持 Key Vault 存储机密和证书。 az iot ops init Azure CLI 命令自动执行设置服务主体以授予对密钥保管库的访问权限以及配置运行 Azure IoT 操作所需的机密的步骤。

有关详细信息,请参阅将 Azure IoT 操作预览版扩展部署到 Kubernetes 群集

手动配置服务主体和 Key Vault

如果执行 az iot ops init 命令的 Azure 帐户无权查询 Microsoft Graph 和创建服务主体,可以提前进行相应的准备,并在运行 CLI 命令时使用额外的参数,如部署 Azure IoT 操作扩展中所述。

配置服务主体以通过 Microsoft Entra ID 与 Key Vault 交互

按照以下步骤为 Azure IoT 操作应用程序创建新的应用程序注册,用于向 Key Vault 进行身份验证。

首先,向 Microsoft Entra ID 注册应用程序:

  1. 在 Azure 门户搜索栏中,搜索并选择“Microsoft Entra ID”。

  2. 从 Microsoft Entra ID 菜单的“管理”部分选择“应用注册”。

  3. 选择新注册

  4. 在“注册应用程序”页上,提供以下信息:

    字段
    Name 为应用程序提供名称。
    支持的帐户类型 确保已选择“仅此组织目录中的帐户(仅<YOUR_TENANT_NAME> - 单租户)”。
    重定向 URI 选择“Web”作为平台。 可以将 Web 地址留空。
  5. 选择“注册”。

    创建应用程序后,会定向到其资源页。

  6. 从应用注册概述页 复制应用程序(客户端)ID。 使用az iot ops init命令运行 Azure IoT 操作部署时,将此值用作参数。

接下来,为应用程序授予 Key Vault 的权限:

  1. 在应用的资源页上,从应用菜单的“管理”部分选择“API 权限”。

  2. 选择添加权限

  3. 在“请求 API 权限”页上,向下滚动并选择“Azure Key Vault”。

  4. 选择“委托的权限”。

  5. 选中该框以选择“user_impersonation”权限。

  6. 选择“添加权限”。

创建客户端机密,该机密添加到 Kubernetes 群集,用于向密钥保管库进行身份验证:

  1. 在应用的资源页上,从应用菜单的“管理”部分选择“证书和机密”。

  2. 选择“新建客户端机密”。

  3. 提供机密的可选说明,然后选择“添加”。

  4. 从新机密复制。 稍后运行az iot ops init时,你将使用此值。

检索服务主体对象 ID:

  1. 在应用的“概述”页的“概要”部分下,选择“本地目录中的托管应用程序”下的“应用程序名称”链接。 这会打开企业应用程序属性。 复制要在运行 az iot ops init 时使用的对象 ID。

创建 Key Vault

新建 Azure Key Vault 实例,并确保其“权限模型”设置为“保管库访问策略”。

az keyvault create --enable-rbac-authorization false --name "<your unique key vault name>" --resource-group "<the name of the resource group>"

如果有现有的密钥保管库,可以执行以下命令以更改权限模型:

az keyvault update --name "<your unique key vault name>" --resource-group "<the name of the resource group>" --enable-rbac-authorization false 

运行 az iot ops init 时,需要 Key Vault 资源 ID。 要检索资源 ID,请运行:

az keyvault show --name "<your unique key vault name>" --resource-group "<the name of the resource group>" --query id  -o tsv

在 Key Vault 中设置服务主体访问策略

新建服务主体需要机密 listget 访问策略,才能让 Azure IoT 操作使用机密存储。

登录到 CLI 的主体需要足够的 Azure 权限才能管理 Key Vault 访问策略。 在基于角色的访问控制 (RBAC) 模型中,此权限包含在 Key Vault 参与者角色或权限更高的角色中。

提示

如果你已使用登录的 CLI 主体来创建密钥保管库,那么你可能已经拥有正确的权限。 但是,如果你指向不同的或现有的密钥保管库,则应检查你是否有足够的权限来设置访问策略。

运行以下命令,以为服务主体分配机密listget权限。

az keyvault set-policy --name "<your unique key vault name>" --resource-group "<the name of the resource group>" --object-id <Object ID copied from Enterprise Application SP in Microsoft Entra ID> --secret-permissions get list

将服务主体和 Key Vault 参数传递给 Azure IoT 操作部署

按照部署 Azure IoT 操作扩展指南操作时,请将其他标志传递到 az iot ops init 命令,以使用预配置的服务主体和密钥保管库。

以下示例演示了如何使用--no-deploy标志为 Azure IoT 操作准备群集,无需完全部署群集。 还可以在无此参数的情况下为默认的 Azure IoT 操作部署运行命令。

az iot ops init --name "<your unique key vault name>" --resource-group "<the name of the resource group>" \
    --kv-id <Key Vault Resource ID> \
    --sp-app-id <Application registration App ID (client ID) from Microsoft Entra ID> \
    --sp-object-id <Object ID copied from Enterprise Application in Microsoft Entra ID> \
    --sp-secret "<Client Secret from App registration in Microsoft Entra ID>" \
    --no-deploy

init 命令执行的一个步骤是确保 Azure IoT 操作所需的所有机密提供程序类 (SPC) 都在密钥保管库中配置了默认机密。 如果默认机密的值不存在,init 会创建一个。 此步骤要求登录 CLI 的主体具有机密 set 权限。 如果你想使用现有机密作为默认 SPC 机密,可以使用 --kv-sat-secret-name 参数指定它,在这种情况下,登录主体仅需要机密 get 权限。

将机密添加到 Azure IoT 操作组件

在群集上设置机密存储后,可以创建和添加 Key Vault 机密。

  1. 使用所需的名称和值在 Key Vault 中创建机密。 可以使用 Azure 门户az keyvault secret set 命令创建机密。

  2. 在群集上,标识要向其添加机密的组件的机密提供程序类 (SPC)。 例如 aio-default-spc。 使用以下命令列出群集上的所有 SPC:

    kubectl get secretproviderclasses -A
    
  3. 在你喜欢的文本编辑器中打开 文件。 如果使用 k9s,请键入 e 以进行编辑。

  4. 将机密对象添加到 spec.parameters.objects.array 下的列表中。 例如:

    spec:
      parameters:
        keyvaultName: my-key-vault
        objects: |
          array:
            - |
              objectName: PlaceholderSecret
              objectType: secret
              objectVersion: ""
    
  5. 保存更改并将其应用到群集。 如果使用 k9s,则会自动应用更改。

CSI 驱动程序使用轮询间隔更新机密,因此在下一个轮询间隔到来之前,新机密对 Pod 不可用。 若要立即更新组件,请重启组件的 Pod。 例如,若要重启数据处理器组件,请运行以下命令:

kubectl delete pod aio-dp-reader-worker-0 -n azure-iot-operations
kubectl delete pod aio-dp-runner-worker-0 -n azure-iot-operations

Azure IoT MQ 预览版机密

使用 Azure 密钥保管库为 Azure IoT MQ 预览版管理机密的步骤将有所不同。 有关详细信息,请参阅使用 Key Vault 管理 MQ 机密