Пошаговое повторное развертывание шаблона ARM с назначением ролей вызывает ошибку

Если я использую Azure Pipelines для «инкрементального» развертывания «Группа ресурсов» шаблона ARM, содержащего назначения ролей, мне кажется, что я не могу повторно запустить / повторно развернуть конвейер без получения ошибки в ресурсе назначения ролей:

RoleAssignmentUpdateNotPermitted: Tenant ID, application ID, principal ID, and scope are not allowed to be updated.

Похоже, это очевидная проблема, для которой необходимо общее решение? Ожидается, что я выделю назначение ролей в отдельный шаблон и, возможно, удаляю и заново создаю назначения ролей в каждом развертывании?




Ответы (1)


Пошаговое повторное развертывание шаблона ARM с назначением ролей вызывает ошибку

Как вы сказали, это очевидная проблема. Для одной и той же области или ресурса вы можете назначить одну и ту же роль субъекту службы только один раз.

Итак, существует назначенная роль с тем же именем, которое вы пытаетесь создать с помощью этого шаблона, и в конечном итоге выдает ошибку для RoleAssignmentUpdateNotPermitted.

Чтобы решить эту проблему, нам нужно убедиться, что каждое развертывание в другой группе ресурсов использует другой GUID для назначения роли, но в то же время убедитесь, что тот же самый используется при развертывании в одной и той же группе ресурсов.

Мы могли бы использовать функцию guid! Требуется одна или несколько строк, которые используются для вычисления хэша, очень похоже на функцию uniquestring; только он вместо этого генерирует строку в формате GUID:

{
  "type": "Microsoft.Authorization/roleAssignments",
  "name": "[guid(resourceGroup().id, 'monitoringUsers')]"
}

Вы можете обратиться к документу Определение назначения ролей RBAC в шаблонах ARM для получения более подробной информации.

person Leo Liu-MSFT    schedule 15.02.2021
comment
Спасибо, Лео. Чтобы уточнить, в моем случае я развертываю идентичный шаблон руки в той же группе ресурсов. Идентификатор GUID жестко запрограммирован (для тестирования), поэтому имя такое же, та же роль, тот же ресурс и т. Д. И я все равно получаю указанную выше ошибку. Вы хотите сказать, что я не должен? - person JohnKoz; 16.02.2021
comment
@JohnKoz, Да, согласно документации, для той же области или ресурса вы можете назначить одну и ту же роль субъекту службы только один раз. - person Leo Liu-MSFT; 16.02.2021
comment
Спасибо, Лео. Итак, как мне повторно запустить существующий конвейер без ошибок? В режиме добавочного развертывания ресурсы ARM игнорируются, если не было внесено никаких изменений. Конвейер CI / CD может часто работать без изменений. Следует ли добавить в конвейер шаг, чтобы удалить все назначения ролей, чтобы конвейер мог их воссоздать? Если это так, то инкрементальный характер шаблона ARM roleAssignment кажется нарушенным? - person JohnKoz; 17.02.2021
comment
К вашему сведению, я провел дополнительное тестирование и сейчас не получаю ошибок, предполагая, что это возможно. Не уверен, во что верить сейчас, но я продолжу вперед. Я отмечу это как ответ за полезность (думаю, вы). - person JohnKoz; 17.02.2021