使用Terraform创建service principal报Insufficient privileges错误需哪些权限
问题原因
403报错的核心是Azure订阅权限和Azure AD目录权限是两套独立的权限体系,你给执行Terraform脚本的服务主体配置的订阅Owner权限仅能管理Azure订阅下的资源,没有权限操作Azure AD目录中的应用注册对象。
对应报错信息:
│ │ with module.appregister.azuread_application.auth, │ on modules/appregister/main.tf line 6, in resource "azuread_application" "auth": │ 6: resource "azuread_application" "auth" { │ │ ApplicationsClient.BaseClient.Post(): unexpected status 403 with OData │ error: Authorization_RequestDenied: Insufficient privileges to complete the │ operation. ╵ ##[error]Error: The process '/agent/_work/_tool/terraform/1.0.3/x64/terraform' failed with exit code
解决方案
你可以选择以下任意一种方式配置权限:
方案1:分配AAD内置目录角色(操作简单,推荐大多数场景使用)
给执行Terraform的服务主体分配以下任意一个AAD目录角色即可:
- 应用程序管理员:拥有全量的AAD应用注册、服务主体管理权限
- 云应用程序管理员:权限范围略小于应用程序管理员,同样支持创建、管理AAD应用注册
方案2:配置Microsoft Graph API最小权限(适合严格权限管控场景)
如果你需要遵循最小权限原则,不需要给服务主体开通全量的应用管理权限,可以按以下步骤配置:
- 在Azure门户中找到执行Terraform所用的服务主体对应的AAD应用注册
- 进入「API权限」菜单,点击「添加权限」,选择「Microsoft Graph」
- 权限类型选择「应用权限」,搜索并勾选
Application.ReadWrite.All权限 - 点击「授予管理员同意」,完成权限生效配置
注意:如果你使用的azuread Terraform Provider版本低于v2.0,建议先升级到最新稳定版,避免旧版本依赖的AAD Graph接口权限兼容问题。
内容的提问来源于stack exchange,提问作者Ashish Kumar
相关产品推荐
相关产品推荐

