Role, dočasné přihlašovací údaje a SigV4

Zabezpečení AWS pro vývojáře

Rahul Singh

Technical Product Manager

Klíč, který přežije úkol

Pro zrychlení práce se ve skriptu vytvoří klíč a uloží se do konfiguračního souboru.

V souboru zůstává:

  • Neobměňovaný
  • Neodvolaný
  • Nevypršelý

Jeden přístupový klíč se rozšiřuje do šesti úložišť, časová osa vpravo ukazuje, že je stále platný i v osmnáctém měsíci

Zabezpečení AWS pro vývojáře

Klíč, který přežije úkol

Pro zrychlení práce se ve skriptu vytvoří klíč a uloží se do konfiguračního souboru.

V souboru zůstává:

  • Neobměňovaný
  • Neodvolaný
  • Nevypršelý

 

O 18 měsíců později je stále platný

Jeden přístupový klíč se rozšiřuje do šesti úložišť, časová osa vpravo ukazuje, že je stále platný i v osmnáctém měsíci

Zabezpečení AWS pro vývojáře

Přihlašovací údaje, které samy vyprší

Nastav expiraci jako výchozí pomocí AWS STS

  1. Požádej o roli a získej přihlašovací údaje se zabudovaným časovačem

  2. Security Token Service (STS): expirace je součástí, výchozí je jedna hodina

Aplikace volá AssumeRole na AWS STS a STS vrací přihlašovací údaje se zabudovaným časovačem.

Zabezpečení AWS pro vývojáře

Přihlašovací údaje, které samy vyprší

Nastav expiraci jako výchozí pomocí AWS STS

  1. Požádej o roli a získej přihlašovací údaje se zabudovaným časovačem

  2. Dočasné přihlašovací údaje začínají na ASIA a obsahují session token

  3. Security Token Service (STS): expirace je součástí, výchozí je jedna hodina

Aplikace volá AssumeRole na AWS STS a získá přihlašovací údaje se zabudovaným časovačem. Pod tím jsou vedle sebe dva typy údajů: dlouhodobý klíč začínající na AKIA, který neobsahuje session token a nikdy nevyprší, a dočasné přihlašovací údaje začínající na ASIA, které obsahují session token a vyprší za jednu hodinu.

Zabezpečení AWS pro vývojáře

Přihlašovací údaje, které samy vyprší

Nastav expiraci jako výchozí pomocí AWS STS

  1. Požádej o roli a získej přihlašovací údaje se zabudovaným časovačem

  2. Dočasné přihlašovací údaje začínají na ASIA a obsahují session token

  3. Stejné volání je nejprve přijato, pak už ne

  4. Security Token Service (STS): expirace je součástí, výchozí je jedna hodina

Aplikace volá AssumeRole na AWS STS a získá přihlašovací údaje se zabudovaným časovačem. Pod tím dlouhodobý klíč začínající na AKIA, který nikdy nevyprší, vedle dočasných údajů začínajících na ASIA, které obsahují session token a vyprší za jednu hodinu. Níže stejné volání GetObject, které v deset hodin vrací 200 OK a v pět minut po jedenácté ExpiredToken.

Zabezpečení AWS pro vývojáře

Jak je tvůj kód najde

Kontrola řetězce poskytovatelů přihlašovacích údajů

  • Hledání provádí AWS SDK, knihovna ve tvém kódu
  • Pevně daný seznam, procházený v pořadí
  • Zastaví se u první shody

Pořadí vyhledávání přihlašovacích údajů: klíč zadaný přímo v kódu je přeškrtnutý nad řetězcem, hledání pak pokračuje přes proměnné prostředí, konfigurační soubor a přihlašovací údaje kontejneru, zastaví se u první shody a nikdy nedojde k metadatům instance

Zabezpečení AWS pro vývojáře

Jak je tvůj kód najde

Kontrola řetězce poskytovatelů přihlašovacích údajů

  • Hledání provádí AWS SDK, knihovna ve tvém kódu
  • Pevně daný seznam, procházený v pořadí
  • Zastaví se u první shody

 

Napevno zapsané klíče se kontrolují jako první, proto je potřeba je smazat

Pořadí vyhledávání přihlašovacích údajů: klíč zadaný přímo v kódu je přeškrtnutý nad řetězcem, hledání pak pokračuje přes proměnné prostředí, konfigurační soubor a přihlašovací údaje kontejneru, zastaví se u první shody a nikdy nedojde k metadatům instance

Zabezpečení AWS pro vývojáře

Řetězec, článek po článku

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
  • Vyhrává první shoda
  • Smaž uložený klíč, hledání pokračuje k roli
Zabezpečení AWS pro vývojáře

Jak prokázat identitu mimo AWS

Pipeline kódu často běží mimo AWS, takže k nim nelze připojit řetězec přihlašovacích údajů

  • Běží na GitHubu nebo GitLabu
  • Řetězci není co najít

CI runner a jeho platforma nakreslené mimo hranici AWS, runner označený jako bez role k připojení, platforma podepisuje OIDC token, který určuje jeden repozitář a jeden workflow

Zabezpečení AWS pro vývojáře

Jak prokázat identitu mimo AWS

Pipeline kódu často běží mimo AWS, takže k nim nelze připojit řetězec přihlašovacích údajů

  • Běží na GitHubu nebo GitLabu
  • Řetězci není co najít

 

OIDC token (OpenID Connect)

  • Podepsaný a krátkodobý
  • Vyjádření identity, nikoli přihlašovací údaj

CI runner a jeho platforma nakreslené mimo hranici AWS, runner označený jako bez role k připojení, platforma podepisuje OIDC token, který určuje jeden repozitář a jeden workflow

Zabezpečení AWS pro vývojáře

Pravidlo místo uloženého klíče

OIDC token určující repozitář se prostřednictvím AssumeRoleWithWebIdentity vymění za dočasné přihlašovací údaje platné jednu hodinu, protože trust policy role už tohoto vydavatele a tento repozitář uvádí

Výměna tokenu za přihlašovací údaje

Zabezpečení AWS pro vývojáře

Pravidlo místo uloženého klíče

OIDC token určující repozitář se prostřednictvím AssumeRoleWithWebIdentity vymění za dočasné přihlašovací údaje platné jednu hodinu, protože trust policy role už tohoto vydavatele a tento repozitář uvádí

Výměna tokenu za přihlašovací údaje

  • AssumeRoleWithWebIdentity: AssumeRole s externím tokenem jako důkazem
  • Trust policy: zapsaná na roli předem, neuložená v pipeline
  • Claim: jeden fakt uvnitř tokenu
  • Vydavatele sdílí všechny repozitáře na platformě, proto je potřeba ukotvit i repozitář

Tajné klíče v repozitáři: teď prázdné

Zabezpečení AWS pro vývojáře

Každý požadavek je podepsaný

Signature Version 4, neboli SigV4

  • Dokazuje, které přihlašovací údaje požadavek vytvořily
  • Dokazuje, že požadavek nebyl při přenosu změněn
  • Podepisuje ho CLI a SDK při každém volání

Proces podepisování, kde požadavek a tvoje přihlašovací údaje vytvoří podpis odeslaný v hlavičce Authorization, který AWS znovu vypočítá a porovná – při shodě požadavek přijme, při neshodě vrátí SignatureDoesNotMatch

Zabezpečení AWS pro vývojáře

Podpis, který můžeš předat dál

Dočasné přihlašovací údaje

  • Mnoho akcí, omezených rolí
  • Drží je tvůj kód

Tvůj kód volá čtyři různé AWS služby – S3, DynamoDB, SQS a KMS – s dočasnými přihlašovacími údaji

Zabezpečení AWS pro vývojáře

Podpis, který můžeš předat dál

Dočasné přihlašovací údaje

  • Mnoho akcí, omezených rolí
  • Drží je tvůj kód

Předpodepsaná URL

  • Jeden objekt, jedna akce a kdokoli s odkazem
  • Expirace, kterou si zvolíš, a pak nic
  • Nese tvoje oprávnění, ne oprávnění toho, kdo ji drží

Tvůj kód volá čtyři různé AWS služby – S3, DynamoDB, SQS a KMS – s dočasnými přihlašovacími údaji

Prohlížeč někoho jiného se dostane přesně k jednomu objektu jedinou cestou, přerušenou hodinami, které odpočítávají nastavenou expiraci

Zabezpečení AWS pro vývojáře

Pojďme cvičit!

Zabezpečení AWS pro vývojáře

Preparing Video For Download...