ІнфраструктураБудь-який рівень

AWS

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

Типова відповідь
Заборонено
Межа
Акаунт
Облікові дані
Приймають, не зберігають

Кожен запит — це рішення про право

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

В AWS не дозволено нічого, доки цього не скаже якась політика, і думку можуть мати чотири окремі речі — кожну встановлюють різні люди, і саме це робить налагодження відмови заплутаним. Service control policy — це стеля, яку організація ставить над цілим акаунтом, і вона може лише забирати. Permission boundary — це стеля, яку адміністратор ставить на одну роль. Політика ідентичності прикріплена до користувача чи ролі, що робить запит. Політика ресурсу прикріплена до самої речі й саме вона взагалі дозволяє доступ ззовні акаунта. Явна заборона в будь-якій із них негайно завершує обчислення, а якщо запит не дозволяє ніщо — відповідь «ні».

Думку можуть мати чотири речі, і встановлюють їх різні люди — саме це й робить налагодження заплутаним. Service control policy — це стеля, яку організація ставить над цілим акаунтом; вона може лише забирати, ніколи не надавати. Permission boundary — це стеля, яку адміністратор ставить на одну роль, щоб команда могла створювати ролі, не маючи змоги створити потужнішу за себе. Політика ідентичності прикріплена до користувача чи ролі, що питає. Політика ресурсу прикріплена до самої речі — бакета S3, черги, ключа — і саме вона взагалі дозволяє доступ ззовні акаунта. Явна заборона в будь-якій із них негайно завершує обчислення: ніщо нижче її не переважить.

Роль — це механізм, що робить усе це придатним до роботи, і його варто розуміти як окрему ідею, а не як «користувача для машин». Роль — це набір прав без власних облікових даних; принципал приймає її на себе й отримує облікові дані, що спливають за годину або швидше. Саме так застосунок на інстансі дістає доступ без того, щоб десь існував ключ; саме так один акаунт надає доступ іншому; і саме так людина дістає підвищене право на час задачі, а не назавжди. Майже будь-який дизайн доступу в AWS зводиться до двох питань: хто може прийняти яку роль і що ця роль дозволяє.

Довгоживучий ключ доступу

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

Прийнята роль

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

Акаунт — це радіус ураження

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

Organizations — це шар, що робить багато акаунтів керованими, а не хаотичними. Акаунти лежать у дереві організаційних одиниць, рахунок консолідується нагорі, а service control policy застосовуються до одиниці й до всього під нею. Ці політики — єдиний механізм, що спиняє адміністратора акаунта, і саме тому це правильне місце для правил, які мають триматися незалежно від того, хто питає: жодних ресурсів поза дозволеними регіонами, жодного вимкнення журналювання аудиту, жодного видалення інструментів безпеки. Усе решта — хто що може робити щодня — належить самим акаунтам.

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

Вибір серед двохсот сервісів

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

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

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

Як це виявляється в реальній поставці

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

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

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

Де це вироджується

  • Один акаунт на всі середовища, розділені домовленостями про назви, які не спиняють нічого.
  • Довгоживучі ключі доступу в CI, на ноутбуках і в репозиторіях замість прийнятих ролей.
  • Політика із зірочкою, написана, щоб розблокувати першу годину, і ніколи потім не звужена.
  • Журнали аудиту, записані в той самий акаунт, що й навантаження, яке вони мають аудитувати.
  • Ресурси, створені в консолі: нічого не переглянути, не відтворити й не пояснити.
  • Нетеговані ресурси: рахунок нікому не приписати, і прибирання не має власника.
  • Балакучий сервіс, рознесений по зонах доступності, платить погігабайтно за власну балаканину.
  • Сервіс старого покоління, взятий тому, що консоль запропонувала його першим.
  • Двадцять сервісів там, де витягли б шість, і в кожного власний режим збою.

Коли це застосовувати

Застосовуйте, коли

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

Уникайте, коли

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

Було корисно?

Поділіться з тим, хто працює над тією ж задачею.