GNU/Linux >> Linux の 問題 >  >> Linux

aws-vaultを使用して複数のAWSアカウントに安全にアクセスする方法

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-vaultに移動する

次に、~/.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を使用してください。

しばらくお待ちください!


Linux
  1. Linuxで複数のユーザーアカウントを作成する方法

  2. SSHトンネリングを使用して制限付きサーバーにアクセスする方法

  3. AWSCLIを使用してAmazonS3を管理する方法

  1. GNOMEBoxesのリモートアクセス機能の使用方法

  2. NVM を使用して複数の Node.js バージョンを使用する方法

  3. 複数のパスでユニゾンのパスオプションを使用するには?

  1. HordeWebメールにアクセスして使用する方法

  2. SCPコマンドを使用してファイルを安全に転送する方法

  3. AWSユーザーアクセスキーとシークレットキーをJenkinsに保存する方法