错误:删除ID为XXX graphrbac.UsersClient#Delete Authorization_RequestDenied的用户时出错-权限不足,无法完成操作

时间:2020-07-17 08:03:27

标签: azure active-directory azure-active-directory terraform

我已经创建了服务原理,并添加了在Azure Active Directory中读写用户的所有必要权限。

enter image description here

我在其上运行terraform planterraform apply,它运行正常。

enter image description here

但是,每当我尝试销毁(terraform destroy)资源( azuread_user )以删除AD用户时,都会出现此错误

enter image description here

我做错了什么?任何帮助将不胜感激。


已更新:添加了.tf文件

provider "azuread" {
  version = "~> 0.11"
  subscription_id= var.ARM_SUBSCRIPTION_ID
  client_id       = var.ARM_CLIENT_ID
  client_secret   = var.ARM_CLIENT_SECRET
  tenant_id       = var.ARM_TENANT_ID
}

resource "azuread_user" "main-user" {
  user_principal_name = var.email
  display_name        = var.name
  password            = var.password
}

2 个答案:

答案 0 :(得分:0)

看起来与服务主体具有的权限相关的问题,我建议创建一个具有Azure AD完全权限的新权限。检查该理论的一种方法是尝试使用az CLI删除terraform创建的用户。

首先,使用现有的服务主体:

az login --service-principal --username APP_ID --password PASSWORD --tenant TENANT_ID

稍后,尝试通过运行以下命令删除用户:

az ad user delete --id %USER_ID%

如果命令失败,请创建新的服务主体并将管理权限分配给Azure Active Directory。

另外,从terraform docs-NOTE: If you're authenticating using a Service Principal then it must have permissions to Directory.ReadWrite.All within the Windows Azure Active Directory API

答案 1 :(得分:0)

我对您的脚本进行了测试,发现如果仅在Azure AD图下授予def findSubDir(file, dire=""): tempPath = os.path.join(path, dire) for dirs in os.listdir(tempPath): if os.path.isdir(os.path.join(tempPath, dirs)): return findSubDir(file,os.path.join(tempPath,dirs)) if dirs == file: return os.path.join(tempPath, file) 委派的权限,则我们只能创建AAD用户。当我尝试使用Directory.ReadWrite.All删除它时,遇到与您相同的错误。

因此,我尝试了另一种方法:将 Global Admin 角色分配给Azure门户中的服务主体。然后,我可以成功删除用户。

请参见此处的参考:Method 1: Directory Roles (recommended)