
開発環境でAWS認証情報を安全に保存およびアクセスするためのVault
[!WARNING] このプロジェクトは放棄されており、これ以上の更新は行われません。更新の受信や コントリビュートを続けたい場合は、以下のアクティブなフォークを参照してください: https://github.com/ByteNess/aws-vault
AWS Vault は、開発環境で AWS 認証情報を安全に保存およびアクセスするためのツールです。
AWS Vault は IAM 認証情報をオペレーティングシステムのセキュアなキーストアに保存し、そこから一時的な認証情報を生成してシェルやアプリケーションに公開します。AWS CLI ツールを補完するように設計されており、~/.aws/config 内のプロファイルと設定を認識します。
詳細については、発表ブログ記事をご覧ください。
AWS Vault は以下の方法でインストールできます:
brew install aws-vaultport install aws-vaultchoco install aws-vaultscoop install aws-vaultbrew install aws-vaultpacman -S aws-vaultemerge --ask app-admin/aws-vault (先に Guru を有効化)pkg install aws-vaultzypper install aws-vaultnix-env -i aws-vaultasdf plugin-add aws-vault https://github.com/karancode/asdf-aws-vault.git && asdf install aws-vault <version>設定、使用方法、ヒントとコツは USAGE.md ファイルで確認できます。
サポートされている Vault バックエンドは以下の通りです:
--backend フラグまたは AWS_VAULT_BACKEND 環境変数を使用して指定します。
# Store AWS credentials for the "jonsmith" profile
$ aws-vault add jonsmith
Enter Access Key Id: ABDCDEFDASDASF
Enter Secret Key: %%%
# Execute a command (using temporary credentials)
$ aws-vault exec jonsmith -- aws s3 ls
bucket_1
bucket_2
# open a browser window and login to the AWS Console
$ aws-vault login jonsmith
# List credentials
$ aws-vault list
Profile Credentials Sessions
======= =========== ========
jonsmith jonsmith -
# Start a subshell with temporary credentials
$ aws-vault exec jonsmith
Starting subshell /bin/zsh, use `exit` to exit the subshell
$ aws s3 ls
bucket_1
bucket_2
aws-vault は Amazon の STS サービスを使用して、GetSessionToken または AssumeRole API 呼び出しを介して一時的な認証情報を生成します。これらは短期間で期限切れになるため、認証情報が漏洩するリスクが軽減されます。
次に AWS Vault は、一時的な認証情報を以下の 2 つの方法のいずれかでサブプロセスに公開します。
$ aws-vault exec jonsmith -- env | grep AWS
AWS_VAULT=jonsmith
AWS_DEFAULT_REGION=us-east-1
AWS_REGION=us-east-1
AWS_ACCESS_KEY_ID=%%%
AWS_SECRET_ACCESS_KEY=%%%
AWS_SESSION_TOKEN=%%%
AWS_CREDENTIAL_EXPIRATION=2020-04-16T11:16:27Z
$ aws-vault exec --server jonsmith -- env | grep AWS
AWS_VAULT=jonsmith
AWS_DEFAULT_REGION=us-east-1
AWS_REGION=us-east-1
AWS_CONTAINER_CREDENTIALS_FULL_URI=%%%
AWS_CONTAINER_AUTHORIZATION_TOKEN=%%%
デフォルトでは環境変数を使用しますが、exec コマンドの --server フラグを使用してローカルインスタンスメタデータサーバーをオプトインできます。
ベストプラクティスは、権限を委任するためのロールを作成することです。セキュリティのために、ユーザーが多要素認証 (MFA) デバイスから生成されたワンタイムキーを提供することも要求すべきです。
まず、IAM でユーザーとロールを作成し、MFA デバイスをセットアップする必要があります。その後、MFA を強制するように IAM ロールを設定できます。
以下は、ロールと MFA を使用した設定例です:
[default]
region = us-east-1
[profile jonsmith]
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile foo-readonly]
source_profile = jonsmith
role_arn = arn:aws:iam::22222222222:role/ReadOnly
[profile foo-admin]
source_profile = jonsmith
role_arn = arn:aws:iam::22222222222:role/Administrator
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile bar-role1]
source_profile = jonsmith
role_arn = arn:aws:iam::333333333333:role/Role1
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile bar-role2]
source_profile = bar-role1
role_arn = arn:aws:iam::333333333333:role/Role2
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
aws-vault から期待できる動作は以下の通りです。
| Command | Credentials | Cached | MFA |
|---|---|---|---|
aws-vault exec jonsmith --no-session | Long-term credentials | No | No |
aws-vault exec jonsmith | session-token | session-token | Yes |
aws-vault exec foo-readonly | role | No | No |
aws-vault exec foo-admin | session-token + role | session-token | Yes |
aws-vault exec foo-admin --duration=2h | role | role | Yes |
aws-vault exec bar-role2 | session-token + role + role | session-token | Yes |
aws-vault exec bar-role2 --no-session | role + role | role | Yes |
macOS リリースビルドは、Keychain での余分なプロンプトを避けるためにコード署名されています。これは以下で確認できます:
$ codesign --verify --verbose $(which aws-vault)
aws-vault バイナリを自分で開発またはコンパイルする場合は、Keychain Access > Certificate Assistant > Create Certificate -> Certificate Type: Code Signing にアクセスして自己署名証明書を生成できます。その後、以下でバイナリに署名できます:
$ go build .
$ codesign --sign <Name of certificate created above> ./aws-vault