获取验证码
承接上一篇VCF SSO API令牌基础教程,本文补充后台REST批量操作接口、MFA多因素认证场景限制、令牌自动刷新脚本、全环境审计日志采集、Ansible流水线集成、企业批量运维落地方案,覆盖多租户、多自动化任务集群的令牌统一管控场景,解决大规模私有云批量巡检、定时扩容流水线的鉴权痛点。
有VMware全系列产品官方资源和定制版资源需求的可以移步:
VCF Identity Broker提供标准OAuth2 REST接口,支持脚本批量生成/查询/吊销SSO API令牌;开启MFA的账号无法长期生成永久类API令牌,仅支持短时令牌;可通过curl/PowerShell实现access_token自动无感刷新;所有令牌调用行为完整存入VCF审计日志,支持对接SIEM安全平台;Ansible可封装-VcfApiToken参数实现多SDDC批量运维鉴权,完全规避明文密码硬编码风险。
# 先通过账号密码获取Broker管理员临时令牌 curl -ks -X POST https://idb.vcf.lab/acs/token \ -H "Content-Type:application/x-www-form-urlencoded" \ -d grant_type=password \ -d [email protected] \ -d password=VMware1! | jq -r '.access_token' # 查询该账号下所有API令牌元数据(名称、创建时间、过期时间、唯一tokenId) curl -ks -X GET https://idb.vcf.lab/acs/api-tokens \ -H "Authorization: Bearer $IDB_ADMIN_TOKEN"
遵循OAuth2标准revoke端点,传入目标token字符串即可全局失效:
curl -ks -X POST https://idb.vcf.lab/acs/revoke \ -H "Content-Type:application/x-www-form-urlencoded" \ -d token="此处填入需要吊销的完整SSO API Token" \ -d token_type_hint=api_token
返回200代表吊销成功,所有使用该令牌的自动化脚本立即401鉴权失败。
curl -ks -X POST https://idb.vcf.lab/acs/api-tokens \
-H "Authorization: Bearer $IDB_ADMIN_TOKEN" \
-H "Content-Type:application/json" \
-d '{
"displayName":"批量主机巡检脚本",
"description":"每日凌晨自动采集ESXi硬件状态",
"accessTokenTtlHours":168
}'返回结果中仅初次展示完整token字符串,务必落地加密存储。
1、全局规则:账号绑定OIDC/SAML MFA二次验证后,**无法生成超过24小时有效期的长期API令牌**,最大TTL仅支持24小时;
2、折中方案: - 测试环境:关闭用户MFA,配置7天短期轮换令牌; - 生产环境MFA强制开启:编写定时任务每23小时自动生成新令牌、同步替换密钥托管库,提前吊销旧令牌;
3、底层原理:MFA账号每次长效鉴权必须二次校验,API令牌属于无交互自动化凭证,因此Identity Broker强制缩短有效期降低泄露攻击窗口。
适用于7×24小时持续运行的监控采集流水线,提前判断过期阈值自动换新令牌:
function Get-RefreshedVcfApiToken {
$idbFqdn = "idb.vcf.lab"
$adminUser = "[email protected]"
$adminPwd = ConvertTo-SecureString "VMware1!" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($adminUser,$adminPwd)
# 获取管理员临时访问令牌
$tokenReq = @{
grant_type = "password"
username = $cred.UserName
password = $cred.GetNetworkCredential().Password
}
$resp = Invoke-RestMethod -Uri "https://$idbFqdn/acs/token" -Method Post -Body $tokenReq -SkipCertificateCheck
$adminToken = $resp.access_token
# 读取本地现有令牌信息,判断过期时间
$localTokenData = Get-Content ./vcf_token.json | ConvertFrom-Json
$expireTime = $localTokenData.expireAt | Get-Date
$now = Get-Date
$diffHours = ($expireTime - $now).TotalHours
if($diffHours -lt 4){
# 生成全新API令牌
$newTokenBody = @{
displayName = "Auto-Refresh监控令牌"
accessTokenTtlHours = 24
} | ConvertTo-Json
$newTokenResp = Invoke-RestMethod -Uri "https://$idbFqdn/acs/api-tokens" -Method Post `
-Headers @{"Authorization"="Bearer $adminToken"} -Body $newTokenBody -SkipCertificateCheck
# 覆盖本地加密存储
@{
token = $newTokenResp.token
expireAt = $newTokenResp.expireAt
} | ConvertTo-Json | Out-File ./vcf_token.json
return $newTokenResp.token
}else{
return $localTokenData.token
}
}VCFMS Identity Broker审计日志:/var/log/vcfms/identity/audit.log 包含字段:操作人账号、客户端IP、操作类型(创建/查询/吊销token)、令牌唯一ID、时间戳、终端UA。
通过VCF Operations日志转发功能,将审计日志实时推送ELK、Splunk;设置告警规则: - 单IP 10分钟内连续5次token吊销操作(疑似泄露处置); - 非运维网段IP批量调用令牌生成接口(异常入侵); - 凌晨非维护时段大量新建API令牌。
每周执行批量导出全部令牌清单,与自动化服务清单做对账,清理闲置半年以上僵尸令牌:
curl -ks -H "Authorization: Bearer $ADMIN_TOKEN" https://idb.vcf.lab/acs/api-tokens > token_inventory_$(Get-Date -Format yyyyMMdd).json
VCF9.1适配新版VMware.PowerCLI Ansible模块,直接传入API令牌实现多vCenter批量运维,无需账号密码变量:
---
- name: 批量采集所有ESXi主机硬件信息
hosts: localhost
gather_facts: false
vars:
vcf_api_token: "{{ lookup('file','./secure_vcf_token.txt') }}"
vc_list:
- vc01.vcf.lab
- vc02.vcf.lab
tasks:
- name: 加载PowerCLI模块并连接vCenter
vmware_vcenter_connection:
server: "{{ item }}"
vcf_api_token: "{{ vcf_api_token }}"
validate_certs: false
loop: "{{ vc_list }}"
- name: 导出主机硬件清单
vmware_host_info:
register: host_info优势:密钥托管文件单独加密存放,Playbook脚本中无任何明文账号密码,符合等保安全规范。
1、生产/测试两套VCF集群部署独立Identity Broker,两套API令牌完全隔离,杜绝测试环境凭证泄露影响生产; 2、按业务线划分RBAC账号:存储运维、网络运维、集群生命周期运维分属不同账号,各自生成独立令牌,单一令牌泄露仅影响对应业务模块; 3、禁止超级管理员admin账号下发大量自动化令牌,拆分只读巡检、变更操作两类权限账号分离使用。
诱因:当前账号无Identity Broker API-Token管理角色; 解决:VCF SSO为账号授予「API Token Administrator」内置角色。
诱因:复制令牌携带换行、空格,或token_type_hint参数缺失; 解决:去除首尾空白字符,请求体增加token_type_hint=api_token参数。
诱因:生成令牌时accessTokenTtlHours传参为字符串; 解决:JSON内有效期数值使用数字类型,不带引号。
说明:VCF9.1底层安全策略硬性限制,无配置开关可解除,只能定时轮换。
1、令牌命名强制规范:{业务模块}_{用途}_{有效期},例:vSAN_backup_7d; 2、密钥存储统一使用HashiCorp Vault,禁止明文存Git、服务器本地普通文件; 3、轮换周期:无MFA环境7天自动换新,MFA强制23小时轮换; 4、离职人员处置:执行批量吊销该用户名下全部API Token; 5、季度全量审计:核对令牌清单与自动化服务台账,清理废弃任务对应的僵尸令牌; 6、泄露应急流程:立即调用revoke接口吊销→更新所有流水线密钥托管→排查审计日志溯源访问IP。
VCF9.1 Identity Broker开放完整OAuth2 REST接口,支持脚本批量新建、查询、吊销SSO API令牌,可实现自动化无感刷新适配7×24监控流水线;绑定MFA的账号受安全策略限制仅能生成24小时短时令牌,需配置定时轮换机制。所有令牌操作完整留存审计日志,支持对接SIEM安全平台做异常告警;Ansible、PowerCLI原生支持-VcfApiToken鉴权参数,完美替代明文密码硬编码,配合多租户账号隔离、Vault密钥托管、季度审计SOP,可满足大型私有云集群等保安全与批量自动化运维双重需求。