GNU/Linux >> Znalost Linux >  >> Linux

Jak používat aws-vault k bezpečnému přístupu k více účtům AWS

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 zshoh-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í zshaws-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!


Linux
  1. Jak vytvořit více uživatelských účtů v Linuxu

  2. Jak používat tunelování SSH pro přístup k omezeným serverům

  3. Jak používat možnost unisono cesty s více cestami?

  1. Jak používat možnosti vzdáleného přístupu GNOME Boxes

  2. Jak používat AWS CLI ke správě Amazon S3

  3. Jak používat více verzí Node.js pomocí NVM

  1. Jak získat přístup a používat webmail Horde

  2. Jak používat příkaz SCP k bezpečnému přenosu souborů

  3. Jak uložit přístupový klíč uživatele AWS a tajný klíč v Jenkins