You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OIDC联合令牌替代密码时Cinc-auditor/Chef Azure InSpec认证报错求助

问题描述

我们目前使用cinc-auditor和Azure InSpec执行测试,正从基于密码的认证切换至OIDC,但测试无法正常运行。

原Azure密码认证命令:

az login --service-principal --username "${ARM_CLIENT_ID}" --password "${ARM_CLIENT_SECRET}" --tenant "${ARM_TENANT_ID}" --output none

替换为OIDC令牌认证命令后:

az login --service-principal --username "${ARM_CLIENT_ID}" --federated-token "${ARM_OIDC_TOKEN}" --tenant "${ARM_TENANT_ID}" --output none

登录操作可正常完成,但cinc-auditor报错:

ERROR: The following must be set in the Environment: [:tenant_id, :client_id, :client_secret, :subscription_id].

请问是否可以通过联合令牌(federated-token)认证来使用cinc-auditor/Chef?


解决方案

可以通过OIDC联合令牌认证使用cinc-auditor/Chef,但需要调整配置逻辑——默认的Azure InSpec资源会强制检查传统服务主体密码的环境变量(ARM_CLIENT_SECRET),不会自动识别az login生成的会话凭证。

具体操作可按以下步骤执行:

  • 让InSpec读取Azure会话凭证
    az login成功后,会话凭证会存储在~/.azure/credentials文件中。你可以通过配置让cinc-auditor/InSpec使用该文件的凭证,替代环境变量依赖:

    1. 在InSpec配置文件(如inspec.yml)中添加配置块:
      inputs:
        azure_credentials_file: "~/.azure/credentials"
        azure_profile: "default" # 对应az login生成的默认配置文件
      
    2. 或者设置环境变量AZURE_CONFIG_DIR指向Azure配置目录(默认即为~/.azure),同时指定AZURE_PROFILE为使用的配置文件名称。
  • 补充订阅ID配置
    报错中还提到缺少subscription_id,无论采用哪种认证方式,都需要确保订阅ID已配置:

    • 设置环境变量ARM_SUBSCRIPTION_ID;
    • 或者在InSpec配置文件中添加:
      inputs:
        azure_subscription_id: "你的Azure订阅ID"
      
  • 绕过环境变量检查(可选)
    如果不想依赖本地凭证文件,也可以自定义InSpec的Azure认证策略来跳过ARM_CLIENT_SECRET的强制检查,但这种方式需要修改InSpec的Azure资源代码,复杂度较高,优先推荐使用凭证文件的方式。

注意:cinc-auditor作为Chef InSpec的社区版,适配Azure OIDC的逻辑与官方InSpec完全一致,只要让它读取az login生成的会话凭证,就能避开对ARM_CLIENT_SECRET的强制要求。

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:45:06