Запуск рабочих нагрузок в Azure — Примеры
Пример 1 — Ключ в настройках приложения
Веб-приложение обращается к учётной записи хранилища с ключом в своей конфигурации, поэтому ротация — это проект, а каждая копия конфигурации — секрет. Дайте приложению идентичность, которую платформа выдаёт и ведёт сама, и предоставьте этой идентичности доступ к учётной записи хранилища.
resource "azurerm_linux_web_app" "orders" {
name = "<orders-app>"
# приложение читает ключ хранилища из своих настроек
}
Решение
resource "azurerm_linux_web_app" "orders" {
name = "<orders-app>"
identity {
type = "SystemAssigned"
}
}
resource "azurerm_role_assignment" "orders_storage" {
principal_id = azurerm_linux_web_app.orders.identity[0].principal_id
role_definition_name = "<storage-reader-role>"
scope = "<storage-account-resource-id>"
}
Приложение получает токен во время работы, и в конфигурации не остаётся ничего секретного, поэтому вопрос «где пароль» исчезает, а ротация перестаёт быть задачей. Поскольку роль ограничена одним ресурсом, утёкшая конфигурация не откроет ничего пригодного к переиспользованию. Обычная ошибка — оставить ключ запасным вариантом «на случай, если идентичность откажет»: так сохраняется именно та учётная запись, ради удаления которой всё делалось.
Пример 2 — Одна группа ресурсов на всё
Веб-приложение и несвязанное задание отчётности делят группу ресурсов. Разрешения нельзя разграничить, затраты нельзя разделить, а удаление группы забрало бы обе. Разделите группу по приложению и жизненному циклу.
resource "azurerm_resource_group" "shared" {
name = "<shared-group>"
location = "<region>"
}
resource "azurerm_linux_web_app" "orders" {
name = "<orders-app>"
resource_group_name = azurerm_resource_group.shared.name
}
resource "azurerm_linux_web_app" "reporting" {
name = "<reporting-app>"
resource_group_name = azurerm_resource_group.shared.name
}
Решение
resource "azurerm_resource_group" "orders" {
name = "<orders-group>"
location = "<region>"
}
resource "azurerm_resource_group" "reporting" {
name = "<reporting-group>"
location = "<region>"
}
# ресурсы каждого приложения переезжают в собственную группу
Теперь владение, разрешения и очистка следуют одной границе, поэтому удаление группы убирает ресурсы ровно одного приложения и ничего, на что опирается другая команда. Чтение затрат по группе превращает ежемесячный обзор в короткое упражнение, а не в расследование. Обычная ошибка — группировать ресурсы по типу, что затрудняет все три вещи сразу, — а исправление требует переезда, поэтому оно дешевле всего, пока парк маленький.