Terraform 更新 Azure 应用程序注册的秘密,“Authorization_RequestDenied”

问题描述

我有一些 terraform 代码来更新 Azure AD 应用程序的秘密。它与 Azure DevOps 服务连接是相同的服务主体和 AD 应用程序。它每 30 分钟轮换一次,以便我可以使用服务主体来执行一些 sql 任务。

代码

# Rotate password every 30min
resource "time_rotating" "azure" {
  rotation_minutes = 30
}

# Generate application temp password
resource "random_password" "ado_temp_secret" {
  length  = 32
  special = true
  keepers = {
    expiry = time_rotating.azure.rotation_rfc3339
  }
}

# Create temp secret for ADO Service Connection application
resource "azuread_application_password" "ado_temp_secret" {
  application_object_id = data.azuread_application.ado_service_connection.object_id
  description           = "${module.sql_server.sql_server_name} Temp Password"
  value                 = random_password.ado_temp_secret.result
  end_date              = time_rotating.azure.rotation_rfc3339
}

当我使用自己的 Azure 用户进行身份验证时,这在我的本地 CLI 中有效。但是在使用 DevOos 管道任务时它不起作用。

任务

    - task: terraformCLI@0
      displayName: terraform Apply
      inputs:
        command: 'apply'
        workingDirectory: '${{ parameters.terraformWorkingDirectory }}'
        environmentServiceName: '${{ parameters.ServiceConnection }}'
        runAzLogin: true
        commandOptions: '${{ parameters.terraformClioptions }}'
        allowTelemetryCollection: false

environmentServiceName 的值将与我尝试为其刷新密码的服务连接相同。

管道有错误

azuread_application_password.ado_temp_secret: Destroying... [<id>]
╷
│ Error: Removing password credential "<credentials>" from application with object ID "<id>"
│ 
│ graphrbac.ApplicationsClient#UpdatePasswordCredentials: Failure responding
│ to request: StatusCode=403 -- Original Error: autorest/azure: Service
│ returned an error. Status=403 Code="UnkNown" Message="UnkNown service
│ error"
│ Details=[{"odata.error":{"code":"Authorization_RequestDenied","date":"2021-04-27T06:29:38","message":{"lang":"en","value":"Insufficient
│ privileges to complete the
│ operation."},"requestId":"<id>"}}]
╵

很明显,问题是权限。但我无法找到需要哪个权限。是因为它试图从自己身上删除一个秘密吗?即使是不同的秘密?

解决方法

该角色需要应用程序管理员。和应用程序读/写 API 权限

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...