如何借助元数据端点确定Azure VM上运行脚本的托管标识
通过Azure VM元数据端点获取托管标识并授权给AzD订阅
获取系统分配托管标识信息
Azure VM的本地元数据端点可直接返回托管标识核心信息,无需额外认证。访问时必须携带Metadata: true请求头,避免意外缓存或重定向。
Linux/macOS(curl)
curl -H "Metadata: true" "http://169.254.169.254/metadata/instance/identity?api-version=2021-02-01" | jq '.systemAssigned'
返回结果包含clientId和objectId,其中objectId是授权时最常用的标识ID。
Windows(PowerShell)
Invoke-RestMethod -Headers @{"Metadata"="true"} -Uri "http://169.254.169.254/metadata/instance/identity?api-version=2021-02-01" | Select-Object -ExpandProperty systemAssigned
获取用户分配托管标识信息
如果VM关联了用户分配的托管标识,元数据端点会在userAssigned字段下列出所有相关标识,每个条目包含clientId、objectId和resourceId:
curl示例
curl -H "Metadata: true" "http://169.254.169.254/metadata/instance/identity?api-version=2021-02-01" | jq '.userAssigned'
根据需求提取对应标识的objectId即可。
授权托管标识访问AzD目标订阅
拿到托管标识的objectId后,使用Azure CLI为其分配订阅级权限。先通过azd config get defaults.subscription确认AzD当前选定的订阅,再执行以下命令:
az role assignment create \ --role "Contributor" \ # 替换为你需要的具体角色 --assignee-object-id <托管标识的objectId> \ --assignee-principal-type ServicePrincipal \ --scope /subscriptions/$(az account show --query id -o tsv)
上述命令中,$(az account show --query id -o tsv)会自动获取当前订阅ID,无需手动填写。
内容的提问来源于stack exchange,提问作者Kai Walter
相关产品推荐
相关产品推荐

