Jakmile začnete pracovat s více než jedním projektem nebo organizací v cloudu AWS, první otázka, kterou možná budete mít, je, jak spravovat přihlašovací údaje awscli a jak je snadno a bezpečně používat, abyste získali přístup ke všem vašim účtům a prostředím AWS. Tento článek se bude zabývat aws-vault – nástrojem pro bezpečné ukládání a přístup k přihlašovacím údajům AWS ve vývojovém prostředí.
Problém
Vždy jsem nebyl velkým fanouškem ~/.aws/credentials
soubor, protože pokaždé, když jsem přicházel k novému zákazníkovi, musel jsem tento soubor otevřít pro úpravy a přidat nové přihlašovací údaje. V důsledku toho jsem měl neustále pocit, že jsem všechny své stávající přihlašovací údaje zobrazoval všem bezpečnostním kamerám v kanceláři. Bože, požehnej vynálezci ochranných obrazovek!
Druhým problémem přihlašovacích údajů je, že je třeba je čas od času obnovit. Čím více účtů máte, tím více úsilí vynaložíte na střídání přihlašovacích údajů.
A třetí problém – přebírání rolí v terminálových relacích a práce v několika různých prostředích současně.
Řešení
Jako řešení prvních dvou problémů jsem nedávno začal používat:
- aws-vault – správce přihlašovacích údajů AWS.
Jako řešení posledních dvou problémů jsem zjistil, že následující sada nástrojů vyhovuje většině mých potřeb:
- zsh a oh-my-zsh – terminál.
- zsh-aws-vault – zvýraznění prostředí AWS pro relaci terminálu.
Správa přihlašovacích údajů AWS
Zde je stručný návod, jak začít.
Instalace
Zde předpokládám, že již máte zsh
a oh-my-zsh
nainstalováno. 😎
Pojďme nainstalovat aws-vault
. Zde je úplný seznam kroků instalace pro většinu dostupných platforem.
Uděláme vše pro OS X (macOS):
brew cask install aws-vault
Výběr backendu aws-vault
aws-vault podporuje několik backendů pro ukládání vašich přihlašovacích údajů. Dávám přednost použití šifrovaného souboru. Do svého ~/.zshrc
tedy musíte přidat následující proměnnou :
export AWS_VAULT_BACKEND="file"
Přesun přihlašovacích údajů do aws-vault
Nyní otevřete své ~/.aws/credentials
soubor. Ke každému existujícímu profilu přidejte přihlašovací údaje do aws-vault
.
cat ~/.aws/credentials
aws-vault add profile_1
aws-vault add profile_2
Nyní, aws-vault má AWS_VAULT_FILE_PASSPHRASE
proměnnou, kterou lze použít k zastavení aws-vault od opakovaného dotazování na heslo k trezoru. Existují dva způsoby, jak jej použít:
Nezabezpečený způsob
Přidejte do svého ~/.zshrc
následující proměnnou nebo ~/.bashrc
souboru, abyste zabránili aws-vault od toho, abyste pokaždé požadovali heslo:
export AWS_VAULT_FILE_PASSPHRASE="my_strong_password"
Bezpečná cesta
Místo ukládání AWS_VAULT_FILE_PASSPHRASE
proměnná v .*rc
soubory, můžete vytvořit úložiště parametrů AWS Systems Manager SecureString
parametr, který obsahuje váš aws-vault
heslo:
aws ssm put-parameter \
--name '/laptop/aws-vault/password' \
--description 'aws-vault password on my laptop' \
--value 'my_super_secret_password' \
--type SecureString
Vytvořme obalový skript, který zavolá volání aws-vault aws-vault a nastaví AWS_VAULT_FILE_PASSPHRASE
s potřebnou hodnotou z úložiště parametrů AWS Systems Manager:
mkdir -p $HOME/bin
cat > $HOME/bin/call-aws-vault.sh <<- EOF
#!/usr/bin/env bash
export PROFILE=$1
export AWS_VAULT_FILE_PASSPHRASE=$(aws ssm get-parameters --profile default --names '/laptop/aws-vault/password' --with-decryption --query 'Parameters[0].Value' --output text)
aws-vault exec -j $PROFILE
EOF
chmod +x $HOME/bin/call-aws-vault.sh
Nyní můžete použít tento obal na ~/.aws/config
takhle:
[profile my_new_profile]
credential_process = ~/bin/call-aws-vault.sh my_new_profile
Můžete přejmenovat ~/.aws/credentials a později jej úplně smažte, jakmile vše otestujete.
Přepínání profilů AWS
Chcete-li zobrazit všechny své profily AWS, zadejte:
aws-vault list
Skvělé, nyní můžete snadno přepínat prostředí a vidět, kde pracujete:
aws-vault exec --duration 8h default
Takhle to nakonec vypadá:
Přístup založený na rolích
Dobře, právě jsme přesunuli všechny naše přihlašovací údaje AWS do zabezpečeného trezoru a nakonfigurovali náš terminál tak, aby zobrazoval náš aktuální aws-vault zasedání. Nyní je čas prodiskutovat, jak můžeme řešení ještě vylepšit.
Organizace s více účty
Jedním z osvědčených postupů pro organizaci přístupu uživatelů AWS k různým účtům AWS – je správa všech uživatelů IAM v jednom účtu AWS a poskytování přístupu k dalším účtům AWS tím, že jim umožňuje využívat role (sts:AssumeRole
volání API) z těchto účtů.
Zde je typický příklad organizace AWS:
Společnost AWS ve svém příspěvku na blogu poskytla skvělé vysvětlení toho, jak používat jednoho uživatele IAM ke snadnému přístupu ke všem vašim účtům pomocí rozhraní AWS CLI, a popisuje proces náročné na role a konfiguraci awscli. Nebudu je kopírovat a vkládat. Místo toho se zaměříme na aws-vault konfiguraci pro provedení něčeho podobného, ale bez ~/.aws/credentials soubor.
Za předpokladu, že již mezi svými účty máte všechna potřebná povolení a oprávnění. Pokud ne, zde je skvělý článek na toto téma – Výukový program:Delegování přístupu napříč účty AWS pomocí rolí IAM.
Výchozí nastavení profilu
Již byste měli mít své výchozí nastavení nastavení profilu v souboru. Pravděpodobně to vypadá nějak takto:
[profile default]
region = us-east-1
Pojďme nakonfigurovat aws-vault jako zdroj pověření pro náš výchozí profil:
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
Nyní, pokud svému uživateli nebo roli udělíte oprávnění z výchozího nastavení profilu převzít roli AWS z jiného účtu, budete moci zadat konfiguraci nových profilů takto:
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
mfa_serial = arn:aws:iam:::mfa/admin
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
mfa_serial = arn:aws:iam:::mfa/admin
[profile account_1_role_admin]
region = us-east-1
role_arn = arn:aws:iam:::role/admin
source_profile = default
[profile account_2_role_qa]
region = us-east-1
role_arn = arn:aws:iam:::role/qa
source_profile = default
zdrojový_profil možnost konfigurace sdělí awscli který účet použít k získání role pro daný profil.
Testování
Nejrychlejší způsob, jak otestovat, že jste schopni převzít roli, je zavolat:
aws sts get-caller-identify
Něco podobného byste měli vidět u default
profil:
{
"UserId": "AIDDRCTFVGBHNJMGF3WI7R",
"Account": "01234567890",
"Arn": "arn:aws:iam::01234567890:user/admin"
}
Chcete-li otestovat volání jakéhokoli jiného profilu:
aws sts get-caller-identity --profile account_1_role_admin
Měli byste vidět výstup podobný následujícímu:
{
"UserId": "AROALKJHGFGDFV3IR2VSI:botocore-session-1584897134",
"Account": "012345678901",
"Arn": "arn:aws:sts::012345678901:assumed-role/admin/botocore-session-1584897134"
}
Převzetí role účtu AWS
Chcete-li převzít roli z jakéhokoli účtu AWS, který máte ve svém aws-vault, proveďte následující příkazy:
aws-vault ls
aws-vault exec --duration 8h default
Zde předpokládáme roli spojenou s výchozím profilem po dobu 8 hodin.
Bonus:Přihlášení do webové konzole AWS bez hesla
Jako malý bonus pro ty z vás, kteří skončili, zde je návod, jak se přihlásit do webové konzole AWS pro každý daný profil:
aws-vault ls
aws-vault login --duration 8h default
Přehled
Pomocí zsh , aws-vault a AWS sts:AssumeRole
společně mohou výrazně zjednodušit a zajistit bezpečnější správu více účtů AWS a jejich přihlašovacích údajů.
Pokud se vám článek líbí, neváhejte ho šířit do světa. A samozřejmě, pokud máte nějaké dotazy, návrhy nebo komentáře, neváhejte použít Disqus níže.
Zůstaňte naladěni!