Секрет обновления Terraform для регистрации приложения Azure, Authorization_RequestDenied

У меня есть код Terraform для обновления секрета приложения Azure AD. Это тот же субъект-служба и приложение AD, что и подключение службы Azure DevOps. Он меняет его каждые 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. Но это не работает при использовании конвейерной задачи 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>"}}]
╵

Итак, очевидно, что проблема в разрешениях. Но я не могу найти, какое разрешение необходимо. Не потому ли, что пытается лишить себя секрета? Хоть и другой секрет?


person philthy    schedule 27.04.2021    source источник


Ответы (1)


Для этой роли требовался Администратор приложений. И чтение/запись приложения для разрешения API

person philthy    schedule 27.04.2021
comment
Привет, спасибо за обмен, вы могли бы принять это как ответ, это могло бы помочь другим участникам сообщества, сталкивающимся с такими же проблемами, и мы могли бы заархивировать эту тему, спасибо. - person Edward Han-MSFT; 29.04.2021