如何使用service principal权限运行Azure CLI及PowerShell命令?
解决方案
方法1:使用PowerShell Az模块以服务主体身份登录
提前准备好服务主体的3项核心信息:应用程序(客户端)ID、目录(租户)ID、客户端密钥(若使用证书认证则准备对应证书)
- 若本地未安装Az模块,先执行安装命令:
Install-Module -Name Az -AllowClobber -Scope CurrentUser - 密钥认证方式登录命令:
$tenantId = "替换为你的租户ID" $clientId = "替换为服务主体的客户端ID" $clientSecret = ConvertTo-SecureString "替换为服务主体的客户端密钥" -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($clientId, $clientSecret) Connect-AzAccount -ServicePrincipal -Credential $credential -Tenant $tenantId
登录完成后所有执行的Az模块命令都会继承该服务主体的权限,可直接运行删除角色等操作,示例命令:Remove-AzRoleAssignment -ObjectId <目标对象ID> -RoleDefinitionName <角色名称> -Scope <资源作用域>
- 若服务主体使用证书认证,登录命令替换为以下内容,需提前将证书导入本地证书存储:
Connect-AzAccount -ServicePrincipal -ApplicationId $clientId -Tenant $tenantId -CertificateThumbprint <证书指纹>
如果你仍在使用旧版AzureRM模块,将登录命令替换为
Connect-AzureRmAccount,其余参数保持一致即可。官方已停止维护AzureRM模块,建议优先使用Az模块。
方法2:使用Azure CLI以服务主体身份登录
- 本地安装Azure CLI完成后,执行密钥认证登录命令:
az login --service-principal -u <服务主体客户端ID> -p <客户端密钥> --tenant <租户ID>
登录成功后即可执行对应操作,删除角色示例命令:az role assignment delete --assignee <目标对象ID> --role <角色名称> --scope <资源作用域> - 证书认证方式登录命令:
az login --service-principal -u <服务主体客户端ID> -p <本地证书文件路径> --tenant <租户ID>
注意事项
- 客户端密钥属于敏感信息,请勿硬编码到脚本中,生产环境建议使用Azure Key Vault存储密钥,运行时动态拉取
- 操作前可执行
Get-AzContext(PowerShell)或az account show(CLI)确认当前登录身份为目标服务主体,避免误操作 - 需确保所用服务主体已被分配对应范围的权限(如所有者、用户访问管理员角色),否则仍会触发权限不足报错
内容的提问来源于stack exchange,提问作者nyc3
相关产品推荐
相关产品推荐

