GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare aws-vault per accedere in modo sicuro a più account AWS

Non appena inizi a lavorare con più di un progetto o organizzazione nel cloud AWS, la prima domanda che potresti avere è come gestire le credenziali awscli e usarle in modo semplice e sicuro per ottenere accesso a tutti i tuoi account e ambienti AWS. Questo articolo tratterà aws-vault, uno strumento per archiviare e accedere in modo sicuro alle credenziali AWS in un ambiente di sviluppo.

Il problema

Non sono sempre stato un grande fan di ~/.aws/credentials file, perché ogni volta che andavo da un nuovo cliente, dovevo aprire questo file per la modifica per aggiungere nuove credenziali. Di conseguenza, ho sempre avuto la sensazione di mostrare tutte le mie credenziali esistenti a tutte le telecamere di sicurezza dell'ufficio. Dio, benedica l'inventore degli schermi per la privacy!

Il secondo problema con le credenziali è che devono essere rinnovate di tanto in tanto. Più account hai, maggiore è lo sforzo che dedichi alla rotazione delle credenziali.

E il terzo problema:assumere ruoli in sessioni terminali e lavorare in diversi ambienti contemporaneamente.

Soluzione

Come soluzione ai primi due problemi, non molto tempo fa, ho iniziato ad utilizzare:

  • aws-vault – Gestore delle credenziali AWS.

Come soluzione per gli ultimi due problemi, ho scoperto che il seguente stack di strumenti soddisfa la maggior parte delle mie esigenze:

  • zsh e oh-my-zsh – terminale.
  • zsh-aws-vault – Evidenziazione dell'ambiente AWS per la sessione del terminale.

Gestione delle credenziali AWS

Ecco una rapida guida introduttiva.

Installazione

Presumo che tu abbia già zshoh-my-zsh installato. 😎

Installiamo aws-vault . Ecco l'elenco completo dei passaggi di installazione per la maggior parte delle piattaforme disponibili.

Faremo tutto per OS X (macOS):

brew cask install aws-vault

Scelta del backend aws-vault

aws-vault supporta diversi backend per memorizzare le tue credenziali. La mia preferenza è usare un file crittografato. Quindi, devi aggiungere la seguente variabile al tuo ~/.zshrc :

export AWS_VAULT_BACKEND="file"

Spostamento delle credenziali in aws-vault

Ora apri il tuo ~/.aws/credentials file. Per ogni profilo esistente, aggiungi le credenziali a aws-vault .

cat ~/.aws/credentials

aws-vault add profile_1

aws-vault add profile_2

Ora, aws-vault ha AWS_VAULT_FILE_PASSPHRASE variabile, che può essere utilizzata per interrompere aws-vault dal chiedere più e più volte la password del tuo vault. Ci sono due modi per usarlo:

Modo non sicuro

Aggiungi la seguente variabile al tuo ~/.zshrc~/.bashrc file, per impedire aws-vault dal chiedere la tua password ogni volta:

export AWS_VAULT_FILE_PASSPHRASE="my_strong_password"

Modo sicuro

Invece di memorizzare AWS_VAULT_FILE_PASSPHRASE variabile in .*rc file, puoi creare AWS Systems Manager Parameter Store SecureString parametro, che contiene il tuo aws-vault password:

aws ssm put-parameter \
  --name '/laptop/aws-vault/password' \
  --description 'aws-vault password on my laptop' \
  --value 'my_super_secret_password' \
  --type SecureString

Creiamo uno script wrapper, che chiamerà aws-vault call aws-vault e imposterà AWS_VAULT_FILE_PASSPHRASE con un valore necessario da AWS Systems Manager Parameter Store:

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

Ora puoi utilizzare questo wrapper in ~/.aws/config così:

[profile my_new_profile]
credential_process = ~/bin/call-aws-vault.sh my_new_profile

Puoi rinominare ~/.aws/credentials e in seguito eliminalo completamente non appena esegui il test.

Cambiare i profili AWS

Per elencare tutti i tuoi profili AWS, digita:

aws-vault list

Ottimo, ora puoi cambiare facilmente ambiente e vedere dove stai lavorando:

aws-vault exec --duration 8h default

Ecco come appare finalmente:

Approccio basato sui ruoli

Bene, ok, abbiamo appena spostato tutte le nostre credenziali AWS in un deposito sicuro e configurato il nostro terminale per visualizzare il nostro attuale aws-vault sessione. Ora è il momento di discutere di come possiamo migliorare ulteriormente la soluzione.

Organizzazione con più account

Una delle migliori pratiche per organizzare l'accesso degli utenti AWS a diversi account AWS:gestire tutti gli utenti IAM in un account AWS e fornire l'accesso ad altri account AWS consentendo loro di utilizzare ruoli (sts:AssumeRole chiamata API) da quegli account.

Ecco il tipico esempio di organizzazione AWS:

AWS ha fornito un'ottima spiegazione di Come utilizzare un singolo utente IAM per accedere facilmente a tutti i tuoi account utilizzando l'AWS CLI nel post del blog, descrivendo il processo di utilizzo del ruolo e la configurazione di awscli. Non li copierò e incollerò. Invece, ci concentreremo sul aws-vault configurazione per fare qualcosa di simile, ma senza ~/.aws/credentials file.

Supponendo che tu abbia già tutte le sovvenzioni e le autorizzazioni necessarie tra i tuoi account. In caso contrario, ecco l'ottimo articolo sull'argomento: Tutorial:delega l'accesso agli account AWS utilizzando i ruoli IAM.

Configurazione profilo predefinita

Dovresti già avere il tuo predefinito configurazione del profilo in atto nel file. Probabilmente, assomiglia a questo:

[profile default]
region = us-east-1

Configuriamo aws-vault come fonte di credenziali per il nostro profilo predefinito:

[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default

Ora, se concedi le autorizzazioni al tuo utente o ruolo da impostazione predefinita profile per assumere il ruolo AWS da un altro account, sarai in grado di specificare la nuova configurazione dei profili come questa:

[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

profilo_sorgente l'opzione di configurazione indicherà awscli quale account utilizzare per acquisire un ruolo per un determinato profilo.

Test

Il modo più veloce per verificare che sei in grado di assumere il ruolo è chiamare:

aws sts get-caller-identify

Dovresti vedere qualcosa di simile per il tuo default profilo:

{
    "UserId": "AIDDRCTFVGBHNJMGF3WI7R",
    "Account": "01234567890",
    "Arn": "arn:aws:iam::01234567890:user/admin"
}

Per testare qualsiasi altra chiamata di profilo:

aws sts get-caller-identity --profile account_1_role_admin

Dovresti vedere un output simile al seguente:

{
    "UserId": "AROALKJHGFGDFV3IR2VSI:botocore-session-1584897134",
    "Account": "012345678901",
    "Arn": "arn:aws:sts::012345678901:assumed-role/admin/botocore-session-1584897134"
}

Supponendo il ruolo dell'account AWS

Per assumere il ruolo da qualsiasi account AWS che hai nel tuo aws-vault, esegui i seguenti comandi:

aws-vault ls
aws-vault exec --duration 8h default

Qui, assumiamo un ruolo associato al profilo predefinito per 8 ore.

Bonus:accesso alla console Web AWS senza password

Come piccolo bonus per quelli di voi che sono giunti al termine, ecco come accedere alla console Web AWS per ogni dato profilo:

aws-vault ls
aws-vault login --duration 8h default

Riepilogo

Utilizzando zshaws-vault e AWS sts:AssumeRole insieme possono semplificare notevolmente e rendere più sicura la gestione di più account AWS e delle relative credenziali.

Se ti piace l'articolo, per favore, sentiti libero di diffonderlo nel mondo. E, naturalmente, se hai domande, suggerimenti o commenti, sentiti libero di usare Disqus qui sotto.

Resta sintonizzato!


Linux
  1. Come creare più account utente in Linux

  2. Come utilizzare il tunneling SSH per accedere a server con restrizioni

  3. Come utilizzare AWS CLI per gestire Amazon S3

  4. Come utilizzare più versioni di Node.js utilizzando NVM

  5. Come utilizzare l'opzione del percorso all'unisono con più percorsi?

Come utilizzare Cloudformation per creare code SQS su AWS

Come utilizzare più account Skype contemporaneamente in Linux

Come utilizzare aws-vault per accedere in modo sicuro a più account AWS

Come accedere e utilizzare Patchman in Plesk

Come accedere agli account di posta elettronica di Hostinger in cPanel?

Come posso cancellare le credenziali in AWS Configure?