Це гостьовий допис у блозі, написаний у співавторстві з Патріком Оберхерром із Contentful та Йоханнесом Гюнтером із Netlight Consulting.
Ця публікація в блозі показує, як покращити безпеку в архітектурі конвеєра даних на основі Керовані робочі процеси Amazon для Apache Airflow (Amazon MWAA) та Служба Amazon Elastic Kubernetes (Amazon EKS) шляхом встановлення детальних дозволів, використання HashiCorp Terraform для інфраструктури як код.
Багато клієнтів AWS використовують Amazon EKS для обробки даних. Переваги Amazon EKS включають різні варіанти обчислення та зберігання даних залежно від потреб робочого навантаження, краще використання ресурсів завдяки спільному використанню основної інфраструктури та активну спільноту з відкритим кодом, яка надає спеціальні розширення. The Дані по ЕКС project надає низку шаблонів та інших ресурсів, які допоможуть клієнтам розпочати цю подорож. Він містить опис використання Amazon MWAA як планувальник завдань.
Зміст є клієнтом AWS і партнером AWS Partner Network (APN). За лаштунками свого продукту «Програмне забезпечення як послуга» (SaaS), Contentful Composable Content Platform, Contentful використовує інформацію з даних для покращення процесу прийняття бізнес-рішень і покращення взаємодії з клієнтами. Змістовно займається Netlight, консалтингового партнера APN, щоб допомогти налаштувати платформу даних для збору цієї інформації.
Більшість робочих навантажень програм Contentful працюють на Amazon EKS, і в організації широко поширені знання про цей сервіс і Kubernetes. Ось чому команда розробки даних Contentful вирішила також запустити канали даних на Amazon EKS. Для роботи планування, вони почали з самостійного керування Apache Airflow у кластері Amazon EKS, а пізніше перейшли на Amazon MWAA, щоб зменшити накладні витрати на інженерні роботи та операції. Робота виконання залишився на Amazon EKS.
Contentful запускає складний конвеєр даних, використовуючи цю інфраструктуру, включаючи надходження з кількох джерел даних і різні завдання перетворення, наприклад за допомогою борг. Весь конвеєр працює в одному середовищі Amazon MWAA і в одному кластері Amazon EKS. З різноманітним набором робочих навантажень в одному середовищі необхідно застосовувати принцип найменшої привілеї, гарантуючи, що окремі завдання або компоненти мають лише певні дозволи, необхідні для функціонування.
Сегментуючи дозволи відповідно до ролей і обов’язків, команда розробки даних Contentful змогла створити більш надійне та безпечне середовище обробки даних, яке є важливим для підтримки цілісності та конфіденційності даних, що обробляються.
У цій публікації блогу ми розповімо про налаштування інфраструктури з нуля та розгортання зразка програми за допомогою Terraform, обраного інструменту Contentful для інфраструктури як коду.
Передумови
Щоб слідувати цій публікації в блозі, вам потрібна остання версія таких інструментів:
огляд
У цій публікації блогу ви створите зразок програми з такою інфраструктурою:
Зразок робочого процесу Airflow містить список об’єктів у вихідному сегменті, тимчасово зберігаючи цей список за допомогою Airflow XComsі записує список як файл у цільове відро. Ця програма виконується за допомогою модулів Amazon EKS, запланованих середовищем Amazon MWAA. Ви розгортаєте кластер EKS і середовище MWAA в a віртуальна приватна хмара (VPC) і застосувати дозволи з найменшими привілеями до модулів EKS, які використовують Ролі IAM для облікових записів служб. Відро конфігурації для Amazon MWAA містить вимоги до середовища виконання, а також код програми, що визначає Ациклічний графік, спрямований повітряним потоком (DAG).
Ініціалізуйте проект і створіть сегменти
Створіть файл main.tf
з таким вмістом у порожньому каталозі:
Цей файл визначає Провайдер Terraform AWS а також відро джерела та призначення, імена яких експортуються як Параметри AWS Systems Manager. Він також повідомляє Terraform завантажити порожній об’єкт з іменем dummy.txt
у відро джерела, що дає змогу зразку програми Airflow, який ми створимо пізніше, отримувати результат під час переліку вмісту відра.
Ініціалізуйте проект Terraform і завантажте залежності модуля, виконавши таку команду:
Створіть інфраструктуру:
Terraform просить вас підтвердити зміни в середовищі, а потім починає розгортати ресурси в AWS. Після успішного розгортання ви повинні побачити таке повідомлення про успішне виконання:
Створіть VPC
Створіть новий файл vpc.tf
в тому ж каталозі, що і main.tf
і вставте наступне:
Цей файл визначає VPC, віртуальну мережу, яка пізніше розмістить кластер Amazon EKS і середовище Amazon MWAA. Зверніть увагу, що ми використовуємо an існуючий Terraform Модулі для цього, який обертає конфігурацію базових мережевих ресурсів, наприклад підмережі, маршрутні таблиці та Шлюзи NAT.
Завантажте модуль VPC:
Розгорніть нові ресурси:
Зверніть увагу, які ресурси створюються. Використовуючи модуль VPC у нашому файлі Terraform, ми позбавляємося значної частини основної складності під час визначення нашої інфраструктури, але все одно корисно знати, що саме розгортається.
Зауважте, що Terraform тепер обробляє ресурси, які ми визначили в обох файлах, main.tf
та vpc.tf
, оскільки Terraform включає все .tf
файли у поточному робочому каталозі.
Створіть середовище Amazon MWAA
Створіть новий файл mwaa.tf
і вставте такий вміст:
Як і раніше, ми використовуємо існуючий модуль щоб заощадити зусилля з налаштування для середовища Amazon MWAA. Модуль також створює сегмент конфігурації, який ми використовуємо для визначення залежність виконання програми (apache-airflow-cncf-kubernetes) У requirements.txt
файл. Цей пакет у поєднанні з попередньо встановленим пакетом apache-airflow-amazon, дозволяє взаємодіяти з Amazon EKS.
Завантажте модуль MWAA:
Розгорніть нові ресурси:
Ця операція займає 20–30 хвилин.
Створіть кластер Amazon EKS
Створіть файл eks.tf
з наступним вмістом:
Щоб створити сам кластер, ми використовуємо переваги Чертежі Amazon EKS для Terraform демонструвати. Ми також визначаємо групу керованих вузлів з одним вузлом як цільовим розміром. Зауважте, що у випадках коливання навантаження, масштабування кластера за допомогою Карпентер замість підходу керованої групи вузлів, показаного вище, робить масштабування кластера більш гнучким. Ми використовували групи керованих вузлів насамперед через простоту конфігурації.
Ми визначаємо ідентичність, що Роль виконання Amazon MWAA передбачає використання в Kubernetes map_roles
змінна. Після налаштування Провайдер Terraform Kubernetes, ми надаємо ролі виконання Amazon MWAA дозволи на керування пакетами в кластері.
Завантажте модуль EKS Blueprints for Terraform:
Розгорніть нові ресурси:
Ця операція займає близько 12 хвилин.
Створіть ролі IAM для облікових записів служби
Створіть файл roles.tf
з наступним вмістом:
Цей файл визначає два облікові записи служби Kubernetes, source-bucket-reader-sa
та destination-bucket-writer-sa
та їхні дозволи щодо API AWS, використовуючи ролі IAM для облікових записів служб (IRSA). Знову ж таки, ми використовуємо модуль із проекту Amazon EKS Blueprints for Terraform, щоб спростити налаштування IRSA. Зауважте, що обидві ролі отримують лише мінімальні дозволи, які їм потрібні, визначені за допомогою Політики AWS IAM.
Завантажте новий модуль:
Розгорніть нові ресурси:
Створіть DAG
Створіть файл dag.py
визначення Airflow DAG:
DAG визначено для роботи за погодинним графіком із двома завданнями read_bucket
з обліковим записом служби source-bucket-reader-sa
та write_bucket
з обліковим записом служби destination-bucket-writer-sa
, бігаючи один за одним. Обидва запускаються за допомогою ЕксПодОператор, який відповідає за планування завдань на Amazon EKS за допомогою Образ докера AWS CLI для виконання команд. Перше завдання містить список файлів у вихідному сегменті та записує список у Airflow XCom. Друге завдання читає список із XCom і зберігає його в цільовому відрі. Зверніть увагу, що service_account_name
Параметр розрізняє, що дозволено робити кожному завданню.
Створіть файл dag.tf
щоб завантажити код DAG у сегмент конфігурації Amazon MWAA:
Розгорніть зміни:
Середовище Amazon MWAA автоматично імпортує файл із сегмента S3.
Запустіть DAG
У своєму браузері перейдіть до Консоль Amazon MWAA і виберіть своє середовище. У верхньому правому куті виберіть Відкрийте інтерфейс Airflow . Ви повинні побачити наступне:
Щоб запустити DAG, у Дії виберіть символ відтворення, а потім виберіть Тригер DAG. Клацніть назву DAG, щоб ознайомитися з виконанням DAG та його результатами.
перейдіть до Консоль Amazon S3 і виберіть відро, починаючи з «призначення». Він повинен містити файл list.json
нещодавно створений write_bucket
завдання. Завантажте файл, щоб переглянути його вміст, список JSON з одним записом.
Прибирати
Ресурси, які ви створили в цьому покроковому керівництві, несуть витрати на AWS. Щоб видалити створені ресурси, виконайте таку команду:
І схвалити зміни в діалоговому вікні Terraform CLI.
Висновок
У цій публікації блогу ви дізналися, як покращити безпеку каналу даних, що працює на Amazon MWAA та Amazon EKS, звузивши дозволи для кожного окремого завдання.
Щоб зануритися глибше, скористайтеся робочим прикладом, створеним у цьому покроковому керівництві, щоб глибше дослідити тему: що станеться, якщо видалити service_account_name
із завдання Airflow? Що станеться, якщо поміняти імена облікових записів служби в двох завданнях?
Для простоти в цьому покроковому керівництві ми використовували плоску файлову структуру з файлами Terraform і Python в одному каталозі. Ми не дотримувалися стандартна структура модуля запропонований Terraform, який загалом рекомендований. У реальному проекті поділ проекту на кілька проектів або модулів Terraform також може збільшити гнучкість, швидкість і незалежність між командами, які володіють різними частинами інфраструктури.
Нарешті, обов’язково вивчіть Дані по ЕКС документацію, яка містить інші цінні ресурси для запуску вашого конвеєра даних на Amazon EKS, а також Amazon MWAA та Потік повітря Apache документація для реалізації ваших власних варіантів використання. Зокрема, подивіться на це зразок реалізації модуля Terraform для Amazon MWAA та Amazon EKS, який містить більш зрілий підхід до конфігурації Amazon EKS і автоматичного масштабування вузлів, а також мереж.
Якщо у вас є запитання, ви можете створити нову тему AWS re:Post або дотягнутися до Підтримка AWS.
Про авторів
Ульріх Гінце є архітектором рішень в AWS. Він співпрацює з компаніями-виробниками програмного забезпечення для розробки та впровадження хмарних рішень на AWS. До того, як приєднатися до AWS, він понад 8 років працював для клієнтів і партнерів AWS у розробці програмного забезпечення, консалтингу та архітектурі.
Патрік Оберхерр є штатним інженером даних у Contentful із 4+ роками роботи з AWS та 10+ роками у сфері даних. У Contentful він відповідає за інфраструктуру та роботу стеку даних, розміщеного на AWS.
Йоганнес Гюнтер є консультантом з хмар і даних у Netlight із 5+ роками роботи з AWS. Він допомагав клієнтам у різних галузях розробляти стійкі хмарні платформи та має сертифікат AWS.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- PlatoData.Network Vertical Generative Ai. Додайте собі сили. Доступ тут.
- PlatoAiStream. Web3 Intelligence. Розширення знань. Доступ тут.
- ПлатонЕСГ. вуглець, CleanTech, Енергія, Навколишнє середовище, Сонячна, Поводження з відходами. Доступ тут.
- PlatoHealth. Розвідка про біотехнології та клінічні випробування. Доступ тут.
- джерело: https://aws.amazon.com/blogs/big-data/set-up-fine-grained-permissions-for-your-data-pipeline-using-mwaa-and-eks/
- : має
- :є
- : ні
- $UP
- 1
- 10
- 100
- 12
- 16
- 2023
- 27
- 41
- 8
- 9
- a
- Здатний
- МЕНЮ
- вище
- За
- рахунки
- Рахунки
- визнавати
- через
- дії
- ациклічні
- доданий
- дотримуватися
- Перевага
- Переваги
- після
- знову
- проти
- ВСІ
- по
- Також
- Amazon
- Amazon Web Services
- an
- та
- Інший
- будь-який
- Apache
- API
- додаток
- Застосовувати
- підхід
- схвалювати
- архітектура
- ЕСТЬ
- AS
- передбачає
- At
- авторизації
- автоматичний
- автоматично
- доступний
- геть
- AWS
- Сертифікований AWS
- Клієнт AWS
- заснований
- оскільки
- перед тим
- за
- за лаштунками
- буття
- між
- Блог
- обидва
- браузер
- бізнес
- але
- by
- CAN
- випадків
- Сертифікований
- змінилися
- Зміни
- вибір
- Вибирати
- клацання
- клієнтів
- хмара
- кластер
- код
- Колонка
- поєднання
- співтовариство
- Компанії
- повний
- комплекс
- складність
- Компоненти
- обчислення
- конфіденційність
- конфігурація
- Консоль
- консультант
- консалтинг
- містити
- містить
- зміст
- контент платформа
- Кут
- виправити
- витрати
- створювати
- створений
- створює
- Поточний
- клієнт
- Досвід клієнтів
- Клієнти
- DAG
- дані
- інженер даних
- Платформа даних
- обробка даних
- дата, час
- вирішене
- Прийняття рішень
- глибше
- визначати
- певний
- Визначає
- визначаючи
- залежно
- Залежність
- Залежно
- розгортання
- розгорнути
- розгортання
- розгортання
- description
- проектування
- призначення
- зруйнований
- Діалог
- DID
- різний
- спрямований
- занурення
- Різне
- do
- Docker
- документація
- скачати
- малювання
- кожен
- простота
- нудьгувати
- зусилля
- порожній
- дозволяє
- зайнятий
- інженер
- Машинобудування
- забезпечення
- запис
- Навколишнє середовище
- істотний
- Ефір (ETH)
- точно
- приклад
- обмін
- виконувати
- виконано
- виконання
- досвід
- дослідити
- Розширення
- false
- поле
- філе
- Файли
- Перший
- плоский
- Гнучкість
- гнучко
- стежити
- після
- для
- від
- функція
- далі
- збирати
- в цілому
- отримати
- GitHub
- Давати
- графік
- Group
- Групи
- гість
- Гість-блог
- Ручки
- відбувається
- Мати
- he
- допомога
- допоміг
- вище
- господар
- відбувся
- Як
- How To
- HTML
- HTTPS
- IAM
- Особистість
- if
- здійснювати
- реалізації
- імпорт
- імпорт
- удосконалювати
- in
- включати
- includes
- У тому числі
- Augmenter
- незалежність
- індивідуальний
- промисловості
- Інфраструктура
- всередині
- розуміння
- замість
- цілісність
- взаємодія
- інтерфейс
- в
- питання
- видачі
- IT
- ЙОГО
- сам
- робота
- Джобс
- приєднання
- подорож
- JPG
- json
- ключ
- Дитина
- Знати
- знання
- Кубернетес
- пізніше
- останній
- вчений
- найменш
- як
- список
- список
- списки
- загрузка
- місцевий
- увійшли
- подивитися
- збереження
- зробити
- РОБОТИ
- управляти
- вдалося
- менеджер
- зрілий
- Може..
- повідомлення
- метадані
- мінімальний
- протокол
- Модулі
- Модулі
- більше
- багато
- множинний
- ім'я
- Названий
- Імена
- Переміщення
- необхідно
- Необхідність
- потреби
- мережу
- мережа
- Нові
- вузол
- увагу
- зараз
- об'єкт
- об'єкти
- of
- on
- ONE
- тільки
- з відкритим вихідним кодом
- операція
- операції
- Оператори
- Опції
- or
- організація
- Інше
- наші
- з
- вихід
- власний
- пакет
- параметр
- партнер
- партнерська мережа
- партнери
- частини
- пластир
- шлях
- Патрік
- Дозволи
- трубопровід
- платформа
- Платформи
- plato
- Інформація про дані Платона
- PlatoData
- Play
- Стручки
- політика
- портрет
- пошта
- в першу чергу
- приватний
- обробка
- Product
- профіль
- проект
- проектів
- запропонований
- Постачальник
- провайдери
- забезпечує
- Python
- питань
- RE
- досягати
- отримати
- нещодавно
- рекомендований
- зменшити
- регіон
- видаляти
- Вимога
- ресурс
- використання ресурсів
- ресурси
- обов'язки
- відповідальний
- результат
- результати
- міцний
- Роль
- ролі
- Правило
- прогін
- біг
- пробіжки
- SaaS
- то ж
- зберегти
- шкала
- Масштабування
- сцени
- розклад
- плановий
- планування
- подряпати
- другий
- безпечний
- безпеку
- побачити
- Серія
- обслуговування
- Послуги
- комплект
- установка
- акції
- поділ
- Повинен
- показаний
- Шоу
- простота
- спростити
- один
- єдине середовище
- Розмір
- невеликий
- Софтвер
- розробка програмного забезпечення
- Рішення
- Source
- Джерела
- конкретний
- конкретно
- швидкість
- стек
- Персонал
- старт
- почалася
- Починаючи
- починається
- Заява
- Як і раніше
- зберігання
- варіанти зберігання
- магазинів
- структура
- Вивчення
- тема
- успіх
- успішний
- Переконайтеся
- сталого
- переключено
- символ
- Systems
- Приймати
- прийняті
- приймає
- Мета
- Завдання
- завдання
- команда
- команди
- розповідає
- Шаблони
- Terraform
- текст
- Що
- Команда
- Джерело
- їх
- потім
- Ці
- вони
- це
- через
- до
- знак
- інструмент
- інструменти
- топ
- тема
- Перетворення
- викликати
- правда
- два
- тип
- що лежить в основі
- Оновити
- на
- використання
- використовуваний
- користувач
- Інтерфейс користувача
- використовує
- використання
- Цінний
- значення
- змінна
- різний
- версія
- вібруючий
- Віртуальний
- ходити
- покрокове керівництво
- було
- we
- Web
- веб-сервіси
- ДОБРЕ
- Що
- коли
- який
- всі
- чий
- чому
- широко поширений
- волі
- з
- працював
- робочий
- Робочі процеси
- робочий
- років
- ви
- вашу
- зефірнет