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

Azure服务主体是什么?如何创建它实现脚本非交互式登录Azure?

关于Azure服务主体的解释与创建指南

什么是Azure服务主体?

简单说,Azure服务主体就是Azure AD里专门给自动化工具、脚本、应用程序用的「专用账号」——它不是给真人用户用的,而是用来让你的Shell脚本、CI/CD流水线这类程序能安全地访问和操作Azure资源。

和用个人账号登录相比,它的优势很明显:

  • 权限可控:你可以精准设置它能操作哪些资源(比如只能管理某个资源组里的应用网关),避免权限过大导致误操作或安全风险
  • 无MFA限制:个人账号通常会启用多因素认证,没法在非交互脚本里直接登录,但服务主体就是为这种场景设计的,不会有这个问题
  • 独立身份:就算你的个人账号权限变更或离职,服务主体的权限不受影响,不会中断自动化流程

如何创建服务主体并用于Shell脚本?

下面是一步步的操作指南,前提是你得有Azure账号的管理员权限(比如全局管理员、订阅所有者这类):

1. 先交互式登录Azure CLI(用于创建服务主体)

首先在本地终端执行这个命令,完成浏览器登录:

az login

这一步是临时操作,只是为了让你能有权限创建服务主体,之后脚本里就不需要这一步了。

2. 创建服务主体并分配权限

执行下面的命令,把占位符换成你自己的信息:

az ad sp create-for-rbac --name <你的服务主体名称> --role Contributor --scopes /subscriptions/<你的订阅ID>

参数说明:

  • --name:给你的服务主体起个好记的名字,比如script-app-gateway-sp
  • --role:这里用的是Contributor(参与者),能管理大部分资源;如果需要更严格的权限,可以换成Reader(只读)或者自定义角色
  • --scopes:指定权限生效的范围,这里是整个订阅,你也可以缩小到某个资源组,比如/subscriptions/<订阅ID>/resourceGroups/<资源组名称>

执行成功后,会返回类似这样的JSON结果,一定要保存好这几个字段:

{
  "appId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx",
  "displayName": "你的服务主体名称",
  "password": "xxxxxx~xxxxxx~xxxxxx",
  "tenant": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"
}

3. 在Shell脚本中用服务主体非交互登录

把刚才拿到的appId、password、tenant代入下面的命令,就能在脚本里完成非交互登录了:

az login --service-principal -u <appId> -p <password> --tenant <tenantId>

登录成功后,你就可以正常执行各种Azure CLI命令了,比如创建应用网关:

az network application-gateway create --name my-app-gateway --resource-group my-rg --location eastus ...

重要安全提醒

千万不要把服务主体的密码硬编码在脚本里!推荐用环境变量来传递:

# 先设置环境变量
export AZURE_CLIENT_ID=<你的appId>
export AZURE_CLIENT_SECRET=<你的password>
export AZURE_TENANT_ID=<你的tenantId>

# 再登录
az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET --tenant $AZURE_TENANT_ID

如果是生产环境,更推荐用Azure Key Vault来存储密码,通过CLI读取,进一步提升安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:08:50