使用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使用该文件的凭证,替代环境变量依赖:- 在InSpec配置文件(如
inspec.yml)中添加配置块:inputs: azure_credentials_file: "~/.azure/credentials" azure_profile: "default" # 对应az login生成的默认配置文件 - 或者设置环境变量
AZURE_CONFIG_DIR指向Azure配置目录(默认即为~/.azure),同时指定AZURE_PROFILE为使用的配置文件名称。
- 在InSpec配置文件(如
补充订阅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

