Přístupový klíč AWS tvoří dva řetězce, které programu společně umožní jednat jménem uživatele IAM: ID přístupového klíče, které klíč identifikuje, a tajný přístupový klíč, který ho prokazuje. Lidé je hledají pod třemi názvy („access key a secret key“, „secret access key“ a prostě „AWS secret key“) a ve všech případech jde o stejnou dvojici. Objevuje se v konfiguracích CLI, v pipelinech CI a až příliš často ve zprávě ve Slacku.
Tento návod vysvětluje, co obě poloviny jsou, jak je vytvořit a nastavit, jak je rotovat bez výpadku a co dělat, když jedna unikne. Odpovídá i na otázku, která se vrací pokaždé, když do týmu přijde vývojář nebo začne pracovat externista: jak tajný klíč předat člověku, aniž by skončil v e-mailu.
ID přístupového klíče a tajný přístupový klíč
| ID přístupového klíče | Tajný přístupový klíč | |
|---|---|---|
| Jak vypadá | AKIAIOSFODNN7EXAMPLE (20 znaků) | 40 znaků, malá a velká písmena a symboly |
| Úloha | Určuje, který klíč požadavek podepisuje | Podepisuje požadavek, prokazuje vlastnictví |
| Tajné? | Ne, zacházejte s ním jako s uživatelským jménem | Ano, zacházejte s ním jako s heslem |
| Viditelné později? | Ano, v konzoli IAM | Po vytvoření už nikdy |
Dlouhodobé klíče začínají na AKIA. Dočasné přihlašovací údaje ze
STS, ke kterým patří i token relace, začínají na ASIA a jejich
platnost vyprší sama. Pokud v konfiguračním souboru uvidíte klíč
ASIA, během několika hodin přestane fungovat, a tak to má být.
Žádná z polovin sama neuděluje oprávnění. Klíč se ověřuje jako uživatel IAM a o tom, co tato identita smí, rozhodují zásady připojené k uživateli. Uniklý klíč uživatele jen pro čtení je problém. Uniklý klíč administrátora je bezpečnostní incident.
Kdy dlouhodobý klíč vůbec potřebujete
Upřímně řečeno: méně často, než si lidé myslí.
- Úlohy běžící v AWS (EC2, Lambda, ECS, EKS) mají používat role IAM. SDK si krátkodobé přihlašovací údaje načte samo a není co rotovat ani co by mohlo uniknout.
- Lidé se mají přihlašovat přes IAM Identity Center nebo
federované SSO a dočasné přihlašovací údaje získat příkazem
aws sso login. - Systémy CI, jako je GitHub Actions, mohou převzít roli přes OIDC bez uloženého klíče.
- Dlouhodobé klíče zůstávají pro případy, kdy nic z toho nejde: nástroj na notebooku bez podpory SSO, služba třetí strany, která přijímá jen statické klíče, starší úloha, kterou jste ještě nepřevedli.
Pokud klíč opravdu potřebujete, vytvořte ho u vyhrazeného uživatele IAM s co nejužší zásadou, která na tu práci stačí, a nikdy ne u administrátorského účtu konkrétního člověka.
Vytvoření a nastavení klíče
V konzoli IAM otevřete uživatele, zvolte „Security credentials“ a pak „Create access key“. Vyberte případ použití, na který se AWS ptá, přečtěte si alternativu, kterou navrhne, a pokračujte. Tajný klíč se zobrazí přesně jednou. Uložte ho rovnou do úložiště důvěrných údajů nebo do správce hesel, případně stáhněte soubor CSV a po importu ho smažte. Každý uživatel IAM může mít najednou nejvýš dva klíče, a právě díky tomu je rotace možná.
Na počítači nastavte pojmenovaný profil místo výchozího:
aws configure --profile deploy-tool
# AWS Access Key ID [None]: AKIA...
# AWS Secret Access Key [None]: ...
# Default region name [None]: eu-west-1
Tím se zapíšou soubory ~/.aws/credentials a ~/.aws/config.
Příkazem chmod 600 soubor omezte jen na svého uživatele. Do
kontejnerů a CI předávejte AWS_ACCESS_KEY_ID
a AWS_SECRET_ACCESS_KEY jako důvěrné údaje (secrets) z úložiště
platformy, ne jako obyčejné proměnné v souboru YAML. Nikdy je
nezadávejte na příkazovém řádku, kde skončí v historii shellu.
Rotace, která nic nerozbije
Rotace má čtyři kroky a umožňuje ji právě limit dvou klíčů.
- Vytvořte druhý klíč u stejného uživatele.
- Převeďte všechny, kdo klíč používají, na nový klíč: konfigurace, důvěrné údaje v CI, záznam ve správci důvěrných údajů. Konzole IAM u každého klíče ukazuje, kdy byl naposledy použit, takže poznáte, jestli jste na nějaké místo nezapomněli.
- Deaktivujte starý klíč. Počkejte den nebo jeden cyklus nasazení. Pokud se něco rozbije, klíč znovu aktivujte, opravte místo, které ho používalo, a zkuste to znovu.
- Smažte starý klíč, jakmile ho už nic nepoužívá.
U klíčů, které existovat musí, to dělejte podle plánu a u všech klíčů také mimořádně: při odchodu člověka, změně dodavatele, ztrátě notebooku nebo podezření na únik. AWS Config a IAM Access Analyzer umí označit klíče starší, než povolují vaše pravidla.
Když klíč unikne
Klíč, který se objevil v repozitáři, logu, tiketu nebo chatu, považujte za kompromitovaný, i když byl o minutu později smazán. Skenery najdou důvěrné údaje nahrané do repozitáře během několika sekund.
- Deaktivujte klíč v IAM hned. Nečekejte, až nejdřív vytvoříte náhradu, ledaže by výpadek byl horší než samotný únik.
- Vytvořte náhradní klíč a převeďte na něj vše, co klíč používalo.
- Projděte CloudTrail a najděte každou akci provedenou s tímto ID přístupového klíče od okamžiku úniku. Hledejte nové uživatele IAM nebo klíče, nové instance, změněné zásady bucketů a neznámé regiony.
- Zkontrolujte vyúčtování a Cost Explorer, jestli v nich nejsou skoky, jaké způsobuje těžba kryptoměn.
- Odstraňte tajný klíč z kódu, logů a historie gitu. Když AWS
zjistí veřejný únik, může k uživateli samo připojit zásadu
AWSCompromisedKeyQuarantine. Nechte ji na místě, dokud úklid neskončí. - Smažte starý klíč, pak zjistěte, jak se tam dostal, a tuto cestu uzavřete.
Jak předat tajný klíč AWS člověku
Někdy se klíč musí dostat k člověku: k externistovi, který ho potřebuje pro nástroj na nasazování, k vývojáři, který se připojí k projektu dřív, než je nastavené SSO, nebo k dodavateli, který ho kvůli integraci chce vložit do svého řídicího panelu. E-mail, Slack i tikety uchovávají kopie a 40znakový tajný klíč v kterémkoli z nich zůstane čitelný celé roky.
Bezpečný postup zabere minutu:
- Vytvořte pro toho člověka vlastní klíč u vyhrazeného uživatele IAM se zásadou, kterou jeho úkol potřebuje, a s ničím navíc. Nesdílejte klíč, který používá cokoli dalšího.
- Vložte jen tajný přístupový klíč do jednorázového tajného odkazu. Ještě před uložením se zašifruje ve vašem prohlížeči, uložená kopie se při prvním otevření odkazu zničí, a pokud odkaz nikdo neotevře, jeho platnost vyprší po hodině, dni nebo týdnu.
- Pošlete odkaz s jednou větou vysvětlení. ID přístupového klíče, region a název profilu pošlete zvlášť. Nic z toho samo o sobě tajné není.
- Přidejte heslovou frázi v tarifu Pro u všeho, co má víc než oprávnění jen pro čtení, a předejte ji SMS nebo po telefonu.
- Ověřte si, že odkaz otevřel příjemce. Pokud odkaz hlásí, že už byl zobrazen, ale příjemce ho neotevřel, deaktivujte klíč a začněte znovu.
- Deaktivujte klíč, až spolupráce skončí, a potom ho smažte.
Návod ke klíčům API popisuje stejný postup pro další poskytovatele a článek bezpečné sdílení odkazů pro vývojáře ukazuje, jak předání při nástupu do týmu skriptovat.
