AWSクラウドで複数のプロジェクトまたは組織での作業を開始するとすぐに、最初の質問は、awscliクレデンシャルを管理し、それらを簡単かつ安全に使用して取得する方法です。すべてのAWSアカウントと環境へのアクセス。この記事では、aws-vault –開発環境でAWSクレデンシャルを安全に保存してアクセスするためのツールについて説明します。
私はいつも~/.aws/credentials
の大ファンではありませんでした 新しい顧客に来るたびに、このファイルを開いて編集し、新しい資格情報を追加する必要があったためです。その結果、オフィス内のすべての防犯カメラに既存のクレデンシャルをすべて表示しているような気がしました。神よ、プライバシースクリーンの発明者を祝福してください!
クレデンシャルの2番目の問題は、クレデンシャルを時々更新する必要があることです。アカウントが多いほど、資格情報のローテーションに多くの労力を費やします。
そして3番目の問題は、ターミナルセッションで役割を引き受け、同時に複数の異なる環境で作業することです。
最初の2つの問題の解決策として、少し前に、私は以下を使い始めました:
- aws-vault –AWSクレデンシャルマネージャー。
最後の2つの問題の解決策として、次のツールスタックが私のニーズのほとんどに適していることがわかりました。
- zshおよびoh-my-zsh–ターミナル。
- zsh-aws-vault –ターミナルセッションのAWS環境の強調表示。
AWSクレデンシャルの管理
こちらがスタートガイドです。
ここでは、すでにzsh
を持っていると想定しています。 およびoh-my-zsh
インストールされています。 😎
aws-vault
をインストールしましょう 。利用可能なほとんどのプラットフォームのインストール手順の完全なリストは次のとおりです。
OS X(macOS)のすべてを実行します:
brew cask install aws-vault
aws-vaultバックエンドの選択
aws-vault クレデンシャルを保存するためのいくつかのバックエンドをサポートします。私の好みは暗号化されたファイルを使用することです。したがって、次の変数を~/.zshrc
に追加する必要があります。 :
export AWS_VAULT_BACKEND="file"
次に、~/.aws/credentials
を開きます ファイル。既存のすべてのプロファイルについて、aws-vault
にクレデンシャルを追加します 。
cat ~/.aws/credentials
aws-vault add profile_1
aws-vault add profile_2
さて、 aws-vault AWS_VAULT_FILE_PASSPHRASE
があります 変数。aws-vaultを停止するために使用できます ボールトのパスワードを何度も尋ねることから。使用方法は2つあります:
次の変数を~/.zshrc
に追加します または~/.bashrc
ファイル、 aws-vaultを防ぐため 毎回パスワードを要求することから:
export AWS_VAULT_FILE_PASSPHRASE="my_strong_password"
AWS_VAULT_FILE_PASSPHRASE
を保存する代わりに .*rc
の変数 ファイルの場合、AWSSystemsManagerパラメータストアSecureString
を作成できます aws-vault
を含むパラメータ パスワード:
aws ssm put-parameter \
--name '/laptop/aws-vault/password' \
--description 'aws-vault password on my laptop' \
--value 'my_super_secret_password' \
--type SecureString

aws-vault call aws-vaultを呼び出し、AWS_VAULT_FILE_PASSPHRASE
を設定するラッパースクリプトを作成しましょう。 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
これで、このラッパーを~/.aws/config
で使用できます そのように:
[profile my_new_profile]
credential_process = ~/bin/call-aws-vault.sh my_new_profile
名前を〜/.aws/credentialsに変更できます その後、すべてをテストしたらすぐに完全に削除します。
AWSプロファイルの切り替え
すべてのAWSプロファイルを一覧表示するには、次のように入力します:
aws-vault list
これで、環境を簡単に切り替えて、どこで作業しているかを確認できます。
aws-vault exec --duration 8h default
最終的には次のようになります。

はい、すべてのAWSクレデンシャルを安全なボールトに移動し、現在の aws-vaultを表示するようにターミナルを構成しました。 セッション。次に、ソリューションをさらに改善する方法について説明します。
さまざまなAWSアカウントへのAWSユーザーのアクセスを整理するためのベストプラクティスの1つは、1つのAWSアカウントですべてのIAMユーザーを管理し、ロールを消費できるようにすることで他のAWSアカウントへのアクセスを提供することです(sts:AssumeRole
そのアカウントからのAPI呼び出し)。
典型的なAWS組織の例は次のとおりです:

AWSは、ブログ投稿でAWS CLIを使用して、単一のIAMユーザーを使用してすべてのアカウントに簡単にアクセスする方法について優れた説明を提供し、役割を消費するプロセスとawscliの設定について説明しました。コピーして貼り付けません。代わりに、 aws-vaultに集中します 同様のことを行うための設定ですが、〜/ .aws / credentials ファイル。
アカウント間で必要なすべての付与と権限がすでにあると仮定します。そうでない場合は、そのトピックに関するすばらしい記事があります–チュートリアル:IAMロールを使用してAWSアカウント間でアクセスを委任します。
すでにデフォルトが設定されているはずです ファイルでのプロファイル設定。おそらく、次のようになります:
[profile default]
region = us-east-1
aws-vaultを設定しましょう デフォルトのプロファイルのクレデンシャルソースとして:
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
ここで、デフォルトからユーザーまたはロールに権限を付与すると プロファイルが別のアカウントからAWSの役割を引き受ける場合、次のような新しいプロファイル構成を指定できます。
[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
source_profile 構成オプションは、 awscliを通知します 特定のプロファイルの役割を取得するために使用するアカウント。

役割を引き受けることができることをテストする最も速い方法は、電話することです:
aws sts get-caller-identify
default
に似たものが表示されるはずです プロファイル:
{
"UserId": "AIDDRCTFVGBHNJMGF3WI7R",
"Account": "01234567890",
"Arn": "arn:aws:iam::01234567890:user/admin"
}
その他のプロファイル呼び出しをテストするには:
aws sts get-caller-identity --profile account_1_role_admin
次のような出力が表示されます。
{
"UserId": "AROALKJHGFGDFV3IR2VSI:botocore-session-1584897134",
"Account": "012345678901",
"Arn": "arn:aws:sts::012345678901:assumed-role/admin/botocore-session-1584897134"
}
AWSアカウントの役割を引き受ける
aws-vaultにあるAWSアカウントからロールを引き受けるには、次のコマンドを実行します。
aws-vault ls
aws-vault exec --duration 8h default
ここでは、デフォルトのプロファイルに関連付けられた役割を8時間想定しています。
ボーナス:パスワードなしのAWSWebコンソールログイン
終了した皆さんへの小さなボーナスとして、特定のプロファイルごとにAWSWebコンソールにログインする方法は次のとおりです。
aws-vault ls
aws-vault login --duration 8h default
zshを使用する 、 aws-vault 、およびAWS sts:AssumeRole
機能を組み合わせることで、複数のAWSアカウントとそのクレデンシャルを大幅に簡素化してより安全に管理できます。
よろしければ、お気軽に世界に発信してください。もちろん、質問、提案、コメントがある場合は、以下のDisqusを使用してください。
しばらくお待ちください!