Ролі, тимчасові облікові дані та SigV4

Використання AWS Security для розробників

Rahul Singh

Technical Product Manager

Ключ, що переживає завдання

Щоб пришвидшити роботу, ключ створюють у скрипті й зберігають у файлі конфігурації.

У файлі він:

  • Ніколи не ротуються
  • Ніколи не відкликаються
  • Ніколи не мають строку дії

Один access key розходиться на шість місць зберігання; вісь часу праворуч показує чинність на вісімнадцятому місяці

Використання AWS Security для розробників

Ключ, що переживає завдання

Щоб пришвидшити роботу, ключ створюють у скрипті й зберігають у файлі конфігурації.

У файлі він:

  • Ніколи не ротуються
  • Ніколи не відкликаються
  • Ніколи не мають строку дії

 

Минає 18 місяців — він досі чинний

Один access key розходиться на шість місць зберігання; вісь часу праворуч показує чинність на вісімнадцятому місяці

Використання AWS Security для розробників

Облікові дані, що самі втрачають чинність

Зробіть строк дії типовим за допомогою AWS STS

  1. Запросіть роль і отримайте облікові дані з вбудованим годинником

  2. Security Token Service (STS): строк дії додано, типово одна година

Застосунок викликає AssumeRole у AWS STS, і STS повертає облікові дані з вбудованим годинником.

Використання AWS Security для розробників

Облікові дані, що самі втрачають чинність

Зробіть строк дії типовим за допомогою AWS STS

  1. Запросіть роль і отримайте облікові дані з вбудованим годинником

  2. Тимчасові облікові дані починаються з ASIA і містять session token

  3. Security Token Service (STS): строк дії додано, типово одна година

Застосунок викликає AssumeRole у AWS STS і отримує облікові дані з вбудованим годинником. Нижче — поруч два приклади: довготривалий ключ, що починається з AKIA, без session token і без строку дії, та тимчасові облікові дані, що починаються з ASIA, із session token і строком дії одна година.

Використання AWS Security для розробників

Облікові дані, що самі втрачають чинність

Зробіть строк дії типовим за допомогою AWS STS

  1. Запросіть роль і отримайте облікові дані з вбудованим годинником

  2. Тимчасові облікові дані починаються з ASIA і містять session token

  3. Той самий виклик спершу приймають, потім — ні

  4. Security Token Service (STS): строк дії додано, типово одна година

Застосунок викликає AssumeRole у AWS STS і отримує облікові дані з вбудованим годинником. Нижче — довготривалий ключ AKIA без строку дії поруч із тимчасовими обліковими даними ASIA із session token і строком дії одна година. Ще нижче — той самий GetObject повертає 200 OK о 10:00 та ExpiredToken об 11:05.

Використання AWS Security для розробників

Як ваш код їх знаходить

Перевірка ланцюжка постачальників облікових даних

  • Пошук виконує AWS SDK — бібліотека у вашому коді
  • Фіксований список, перевіряється за порядком
  • Зупиняється на першому збігу

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

Використання AWS Security для розробників

Як ваш код їх знаходить

Перевірка ланцюжка постачальників облікових даних

  • Пошук виконує AWS SDK — бібліотека у вашому коді
  • Фіксований список, перевіряється за порядком
  • Зупиняється на першому збігу

 

Жорстко прописані ключі перевіряються першими, тож їх треба видалити

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

Використання AWS Security для розробників

Ланцюжок, ланка за ланкою

1. explicit      a key passed in your code
2. environment   AWS_* variables, and on Lambda
                 that is the execution role
3. config file   ~/.aws/credentials
4. container     ECS or EKS task role
5. instance      EC2 instance profile, via IMDS
  • Перший збіг перемагає
  • Видаліть збережений ключ — пошук піде далі до ролі
Використання AWS Security для розробників

Підтвердження особи поза AWS

Конвеєри коду часто працюють поза AWS, тож ланцюжок облікових даних не можна приєднати

  • Працюють на GitHub або GitLab
  • Ланцюжкові немає що знайти

CI runner і його платформа поза межами AWS; у runner немає ролі для приєднання, платформа підписує OIDC‑токен з назвою одного репозиторію та одного workflow

Використання AWS Security для розробників

Підтвердження особи поза AWS

Конвеєри коду часто працюють поза AWS, тож ланцюжок облікових даних не можна приєднати

  • Працюють на GitHub або GitLab
  • Ланцюжкові немає що знайти

 

OIDC token (OpenID Connect)

  • Підписаний і короткоживучий
  • Це підтвердження особи, а не облікові дані

CI runner і його платформа поза межами AWS; у runner немає ролі для приєднання, платформа підписує OIDC‑токен з назвою одного репозиторію та одного workflow

Використання AWS Security для розробників

Правило замість збереженого ключа

OIDC‑токен із назвою репозиторію, обміняний через AssumeRoleWithWebIdentity на тимчасові облікові дані зі строком дії одна година, бо політика довіри ролі вже містить цього емітента й цей репозиторій

Обмінюємо токен на облікові дані

Використання AWS Security для розробників

Правило замість збереженого ключа

OIDC‑токен із назвою репозиторію, обміняний через AssumeRoleWithWebIdentity на тимчасові облікові дані зі строком дії одна година, бо політика довіри ролі вже містить цього емітента й цей репозиторій

Обмінюємо токен на облікові дані

  • AssumeRoleWithWebIdentity: AssumeRole із зовнішнім токеном як доказом
  • Політика довіри: записана на ролі заздалегідь, не зберігається в конвеєрі
  • Claim: один факт усередині токена
  • Емітент спільний для всіх репозиторіїв платформи, тож зафіксуйте й репозиторій

Секрети репозиторію: тепер порожньо

Використання AWS Security для розробників

Кожен запит підписано

Signature Version 4, або SigV4

  • Доводить, якими обліковими даними зроблено запит
  • Підтверджує, що запит не змінено під час передавання
  • Підписується CLI та SDK для кожного виклику

Процес підпису: запит і ваші облікові дані утворюють підпис у заголовку Authorization; AWS обчислює і порівнює, приймає за збігу та повертає SignatureDoesNotMatch за невідповідності

Використання AWS Security для розробників

Підпис, яким можна поділитися

Тимчасові облікові дані

  • Багато дій, обмежених роллю
  • Знаходяться у вашому коді

Ваш код викликає чотири різні сервіси AWS — S3, DynamoDB, SQS і KMS — з тимчасовими обліковими даними

Використання AWS Security для розробників

Підпис, яким можна поділитися

Тимчасові облікові дані

  • Багато дій, обмежених роллю
  • Знаходяться у вашому коді

Pre-signed URL

  • Один об'єкт, одна дія, і будь-хто з посиланням
  • Строк дії на ваш розсуд, потім — нічого
  • Несе ваші дозволи, а не власника посилання

Ваш код викликає чотири різні сервіси AWS — S3, DynamoDB, SQS і KMS — з тимчасовими обліковими даними

Чужий браузер отримує доступ рівно до одного об'єкта через єдиний шлях; доступ перериває годинник зі строком дії, який ви задали

Використання AWS Security для розробників

Давайте потренуємось!

Використання AWS Security для розробників

Preparing Video For Download...