Налаштування об'єктного сховища Azure: Terraform, Lifecycle і RBAC

Файлове сховище впирається в зростання обсягів: доступ сповільнюється, а резервні копії перестають вкладатися у вікно обслуговування. Ми налаштовуємо об'єктне сховище Azure під ключ — від проєктування та розмежування доступів до перенесення файлів і передачі команді. Витрати на зберігання перестають зростати, а доступ до даних прискорюється в рази.
Часті запитання

Azure Blob Storage: де ламається об'єктне сховище

Об'єктне сховище здається найпростішим сервісом у хмарі: створили контейнер, видали доступ, залили файли. Проблеми починаються пізніше — коли Azure Blob Storage перетворюється на звалище для логів, вивантажень, користувацьких вкладень і дампів баз.

Розростання даних відбувається непомітно: контейнер росте, а зрозумілої відповіді на питання «що тут потрібне» немає ні в розробки, ні в експлуатації.

Розростання даних б'є одразу по двох місцях. Зростають платежі за зберігання та операції, а інвентаризація вмісту перетворюється на багатогодинний ручний розбір.

Окрема категорія ризику — публічні посилання на файли: контейнер з відкритим доступом на читання віддає вкладення будь-кому, хто знає адресу, і виявляється це, як правило, на перевірці безпеки, а не раніше.

Третій типовий збій — ручні операції замість конфігурації. Файли заливаються скриптами без версіонування, доступи роздаються через портал «на око», правила життєвого циклу не налаштовані, і старі версії разом із незавершеними завантаженнями тарифікуються роками.

При цьому відкат або аудит доступу відновити нічим: немає ні історії, ні ролей, ні відтворюваної схеми.

Розбираємо, як це закривається: налаштування сховища файлів як код, правила життєвого циклу за тегами та віком об'єктів, доступ через ролі та короткоживучі токени замість широких ключів.

Що дає кероване об'єктне сховище

Кероване об'єктне сховище — це не окремий сервіс, а шар політик поверх Azure Blob Storage: контейнери, доступи та правила життєвого циклу описані кодом і версіонуються разом з рештою інфраструктури.

Інженер не заходить у веб-консоль, щоб створити сховище чи видати доступ — зміна проходить перевірку і потрапляє в середовище тим самим шляхом, що й застосунок.

Час відновлення даних скорочується з годин до хвилин.

Версіонування об'єктів зберігає попередні редакції файлу, а оборотне видалення залишає слід навіть після команди на стирання: відкат після збою вивантаження або невдалого скрипта — це повернення конкретної версії, а не пошук копії по чужих дисках і листування з підрядником.

Окремий клас відмов зникає разом із ручним керуванням файлами.

Права видаються ролями на рівні контейнера, ключі доступу не розносять по конфігураціях і листуваннях, а політики не правлять руками — тому «видалили не те» і «доступ залишився у звільненого підрядника» перестають бути регулярними історіями. Доступ перевіряється за роллю, а не за тим, у кого залишився ключ.

Зниження витрат на зберігання досягається не урізанням, а правилами: рідко запитувані дані переміщуються на холодні рівні, старі версії та незавершені блоки чистяться за розкладом, і обсяг перестає зростати сам по собі.

Зростання стає передбачуваним — видно, скільки займає кожен напрямок даних і який приріст дає нове джерело.

Варіанти розгортання та режими доступу

Вибір схеми визначається двома питаннями: звідки йдуть звернення до даних і наскільки жорстко потрібно ізолювати трафік.

Один і той самий сервіс може жити в публічному контурі, за приватним каналом або в гібридній схемі — обмеження у кожного варіанта свої, і проявляються вони не на старті, а при масштабуванні або зовнішньому аудиті.

Варіант Коли підходить Обмеження
Публічний доступ за ключем або підписаною адресою Зовнішні підрядники, разові обміни, налагодження Ключ витікає разом із репозиторієм або логами; ротація вручну; трафік іде через інтернет
Обмеження за підмережами та адресами Свої сервіси в хмарі та доступ з офісу Правила живуть окремо від коду; при переїзді або зміні адрес доступ ламається мовчки
Приватна мережа з точкою підключення Персональні дані, вимоги регулятора, внутрішні системи Дорожче в супроводі: приватна зона DNS, узгодження маршрутів, окремий шлях для діагностики
Кілька акаунтів зберігання Різні середовища, команди або класи даних Зростає число місць, де налаштовуються правила та облікові записи; потрібен єдиний шаблон і спільний журнал
Гібридна схема: гарячі дані в хмарі, архів на своїх потужностях Вимога зберігати частину даних локально Два набори політик і два монітори; без синхронізації тегів і термінів зберігання дані розповзаються

На практиці схему збирають з кількох рядків таблиці: гарячий шар у хмарі за приватною мережею, архів — в окремому акаунті з тривалими термінами зберігання, а доступ видається ролями на конкретний контейнер, а не на весь акаунт.

Такий набір описується в коді, тому режим доступу змінюється правкою шаблону, а не ручним налаштуванням у консолі.

Етапи впровадження сховища: від аудиту до передачі

Роботи йдуть послідовно: кожен наступний етап спирається на артефакти попереднього. Так перенесення не перетворюється на експеримент на робочому контурі, а правила доступу та зберігання описуються до того, як в Azure Blob Storage з'явиться перший об'єкт.

  1. Аудит зберігання даних. Інвентаризація контейнерів, обсягів, профілів читання та запису, джерел даних і термінів їхнього життя. Фіксуємо, що належить до гарячих даних, що до архівних, і де зараз дублі або «осиротілі» набори.

  2. Схема сховища. Розкладка по контейнерах і рівнях доступу: який набір куди потрапляє, як часто до нього звертаються, які вимоги до зберігання та видалення. Схема узгоджується до написання коду.

  3. Опис інфраструктури кодом. Модулі Terraform для акаунта, контейнерів, мережевих обмежень і версіонування. Будь-яка зміна проходить рев'ю, а оточення відтворюється з нуля однією командою.

  4. Ролі та права доступу. Розмежування на рівні підписки, групи ресурсів і контейнера, окремі облікові записи для застосунків і людей, мінімально необхідний набір прав. Перевіряємо, що сервіс не має зайвого доступу.

  5. Політики життєвого циклу. Правила переведення об'єктів на холодні рівні, видалення попередніх версій і незавершених блоків, терміни зберігання. Реєстр перестає рости безконтрольно, а відкат до попереднього стану залишається можливим.

  6. Перенесення даних. Спочатку пілотний набір: вимірюємо швидкість, цілісність за контрольними сумами, поведінку при обриві зв'язку. Потім основний потік — з можливістю докатки без зупинки джерел.

  7. Перевірка та передача. Тести доступу та відмовостійкості, налаштування моніторингу та оповіщень, документація щодо змін. Передаємо код, схему та інструкції вашій команді — супровід залишається всередині.

Що передаємо на руки після впровадження

Передаємо не набір конфігурацій «як вийшло», а працюючу систему, яку ваш інженер зможе розвивати та супроводжувати без нас. Нижче — що фізично залишається в репозиторії та в регламентах, і що ми проходимо разом на прийманні.

  • Схема розміщення даних — які контейнери та облікові записи заведені, де межі гарячих і архівних шарів, як ресурси розкладені по середовищах.
  • Конфігурація сховища — описана декларативно: модулі, змінні під кожне середовище, ізольований стан. Розгортання з нуля повторює продуктив без ручних правок.
  • Ролі доступу — перелік призначень по контейнерах, службові облікові записи застосунків, мінімально достатні привілеї. Ключі не зберігаються в коді та конфігураціях.
  • Політики життєвого циклу — правила переведення в холодні шари, версіонування, м'яке видалення та захист від масового видалення. Реєстр перестає рости безконтрольно.
  • Регламент резервного копіювання — що копіюється, з якою періодичністю, де лежить копія, хто підтверджує відновлення і за якими перевірками.
  • Документація щодо сховища — карта ресурсів, схема зв'язків, відповідальні, порядок додавання нового контейнера та типові операції.
  • Моніторинг та оповіщення — набір сигналів щодо доступності, відмов авторизації та заповнення, з прив'язкою до чергової зміни.

На прийманні проходимо за списком разом з вашим інженером: розгортаємо сховище з нуля, видаємо та відкликаємо доступ, відновлюємо об'єкт з копії. Пункти, які не відтворюються, залишаються в роботі до усунення.

Кейс: переїзд файлового сховища, метрики до та після

Замовник працював на спільному мережевому диску: права на папки видавалися вручну, а нічні завдання копіювання не встигали за приростом даних.

Відкат до попередньої версії файлу був можливий тільки з резервної копії і займав години, частина робочих документів існувала в єдиному екземплярі.

Ми розклали структуру диска по контейнерах і префіксах у Azure Blob Storage, доступ перевели на ролі рівня контейнера, а правила зберігання описали декларативно — політики життєвого циклу тепер лежать у репозиторії і проходять перевірку до застосування.

Що змінилося в цифрах

Метрика До Після
Простій при переключенні години в вікні обслуговування 0 — запис не зупиняли
Цілісність даних вибіркова звірка вручну звірка контрольних сум за всіма об'єктами, розбіжностей немає
Відкат до попередньої версії години з резервної копії хвилини: версії зберігаються у самого об'єкта
Права доступу видача по папках вручну роль на контейнер, зміна через репозиторій
Ріст обсягу постійний, чистка за розкладом правила життєвого циклу звільняють старі версії самі

Переключення зробили без зупинки запису: старий диск залишався доступним на читання, поки звірка контрольних сум не підтвердила, що перенесено все.

Люди продовжили працювати у звичних мережевих шляхах — їх підключили до нового сховища, тому перенавчання звелося до однієї інструкції.

В експлуатації залишився один клас задач замість трьох: налаштування зберігання, доступу та правил очищення описані в репозиторії і відтворюються при розгортанні. Витрати на зберігання перестали зростати лінійно — версії та знімки йдуть за політикою, а не за чиєюсь пам'яттю.

Що робити, якщо в Azure вже розгорнуто файлове сховище

Зупиняти сервіси для переходу не потрібно. До одних і тих самих даних піднімаються обидва типи доступу, а споживачі переводяться по черзі: застосунки, що працюють з файловими шляхами, продовжують їх бачити. Поверх об'єктного сховища стає шар сумісності, який віддає звичні читання та запис.

Питання не в самому переїзді, а в тому, які дані залишити у файловому сховищі, а які перенести в об'єктне. Робоча схема тут — суміщена, і це не тимчасовий етап на один тиждень.

Каталоги з частим перезаписом, блокуваннями та дозаписом залишаються на файловому: в об'єктному таких операцій немає нативно, а шар сумісності додає затримку на дрібних файлах.

Архіви, вивантаження, копії та медіа йдуть в об'єктне — в Azure Blob Storage вони читаються цілими об'єктами і змінюються рідко, витрати на зберігання перестають зростати разом з обсягом.

Поступова міграція йде по споживачах, а не всім контуром одразу. Спочатку вмикається копіювання, потім звірка за контрольними сумами та розмірами — вона показує, що не доїхало або змінилося в процесі. Потім на об'єктне переходять звітність, аналітика, резервні копії.

Старий контур до останнього кроку відкритий на читання: повернення — це зміна маршруту, а не відновлення з копій. Переїзд без простою тримається на подвійному записі на перехідному етапі, контролі цілісності та однакових правах доступу в обох контурах.

Часті технічні сумніви перед стартом

Інженерна команда замовника перед стартом зазвичай ставить один і той самий набір питань: чи не зламає версіонування існуючі застосунки, як обмежити доступ по мережі і чи не доведеться переписувати код.

У Microsoft Azure всі три теми закриваються налаштуваннями сховища, а не переробкою сервісів — нижче короткі відповіді по кожній.

Увімкнення версіонування зламає існуючі записи?

Ні. Версіонування та оборотне видалення вмикаються на рівні контейнера і не змінюють формат об'єктів — застосунки пишуть і читають ті самі дані.

Зростає тільки обсяг, тому долю старих версій відразу описує політика життєвого циклу: зберігати останні кілька версій і видаляти решту за віком, щоб реєстр не розростався безконтрольно.

Обмеження доступу по мережі потребує доопрацювання застосунків?

Для сервісів усередині віртуальної мережі обмеження прозоре: доступ іде через приватну точку підключення, а рядок підключення залишається незмінним.

Доопрацювання потрібне там, де застосунок ходить у сховище за ключем доступу або із зовнішньої мережі — такі місця переводимо на керовані посвідчення та ролі, щоб ключі не лежали в конфігураціях.

Що буде, якщо правила життєвого циклу видалять потрібне?

При увімкненому оборотному видаленні об'єкт відновлюється в межах заданого терміну.

Тому термін зберігання видалених даних виставляємо довшим, ніж інтервал перевірок і резервного копіювання, а нові правила спочатку проганяємо в режимі звіту і дивимося, що потрапило б під видалення.

Обговоримо вашу задачу та повернемося з оцінкою і планом

Перша розмова — це збір ввідних, без яких план впровадження вийде приблизним. Потрібно зрозуміти обсяг і профіль даних, як вони розподілені за частотою звернень, хто і за якими каналами отримує доступ.

Окремо уточнюємо вимоги до термінів зберігання, захисту від видалення та відкату — саме вони визначають структуру контейнерів і політик.

Ось що розбираємо на дзвінку:

  • обсяг і профіль даних: скільки зберігається зараз, який приріст очікується, яка частка об'єктів читається регулярно, а яка лежить мертвим вантажем;
  • модель доступу: хто читає і пише, які сервіси звертаються до сховища, як права розмежовуються за ролями;
  • класи зберігання та правила життєвого циклу: що переноситься в холодний і архівний клас, що видаляється і за якою ознакою;
  • версіонування та захист: чи потрібні попередні версії об'єктів, блокування від видалення, м'яке видалення та терміни відновлення;
  • інфраструктура як код: де зберігається стан Terraform, хто вносить правки в конфігурацію, як вони проходять перевірку перед застосуванням;
  • мережевий доступ та посвідчення: публічна точка або приватні підключення, ключі доступу або керовані посвідчення сервісів;
  • обмеження вашого контуру: сумісність із існуючими системами, допустимі вікна змін, вимоги до відкату на попередню конфігурацію.

На виході отримуєте план впровадження: послідовність етапів, склад конфігурації, критерії приймання та оцінку обсягу робіт з розподілом за термінами. Опишіть задачу в зручному форматі — повернемося з планом і пропозицією щодо порядку робіт.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139