From 852a44094a3bb4df39f8f778bc7ada2ddda09727 Mon Sep 17 00:00:00 2001 From: Maksym Date: Thu, 29 Oct 2020 21:13:36 +0000 Subject: [PATCH] aws: split setting profile from changing profile (#9402) the change to assume a role when it is specified in configuration broke some workflows. This fix addresses that Fixes #9394 --- plugins/aws/README.md | 7 +++++++ plugins/aws/aws.plugin.zsh | 24 +++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/plugins/aws/README.md b/plugins/aws/README.md index 4ceb71425..851f586dd 100644 --- a/plugins/aws/README.md +++ b/plugins/aws/README.md @@ -15,6 +15,13 @@ plugins=(... aws) It also sets `$AWS_EB_PROFILE` to `` for the Elastic Beanstalk CLI. Run `asp` without arguments to clear the profile. +* `acp []`: in addition to `asp` functionality, it actually changes the profile by + assuming the role specified in the `` configuration. It supports MFA and sets + `$AWS_ACCESS_KEY_ID`, `$AWS_SECRET_ACCESS_KEY` and `$AWS_SESSION_TOKEN`, if obtained. It + requires the roles to be configured as per the + [official guide](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html). + Run `acp` without arguments to clear the profile. + * `agp`: gets the current value of `$AWS_PROFILE`. * `aws_change_access_key`: changes the AWS access key of a profile. diff --git a/plugins/aws/aws.plugin.zsh b/plugins/aws/aws.plugin.zsh index fe1f098e8..8149ba121 100644 --- a/plugins/aws/aws.plugin.zsh +++ b/plugins/aws/aws.plugin.zsh @@ -4,6 +4,27 @@ function agp() { # AWS profile selection function asp() { + if [[ -z "$1" ]]; then + unset AWS_DEFAULT_PROFILE AWS_PROFILE AWS_EB_PROFILE + echo AWS profile cleared. + return + fi + + local -a available_profiles + available_profiles=($(aws_profiles)) + if [[ -z "${available_profiles[(r)$1]}" ]]; then + echo "${fg[red]}Profile '$1' not found in '${AWS_CONFIG_FILE:-$HOME/.aws/config}'" >&2 + echo "Available profiles: ${(j:, :)available_profiles:-no profiles found}${reset_color}" >&2 + return 1 + fi + + export AWS_DEFAULT_PROFILE=$1 + export AWS_PROFILE=$1 + export AWS_EB_PROFILE=$1 +} + +# AWS profile switch +function acp() { if [[ -z "$1" ]]; then unset AWS_DEFAULT_PROFILE AWS_PROFILE AWS_EB_PROFILE AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN echo AWS profile cleared. @@ -34,7 +55,7 @@ function asp() { echo "Please enter the session duration in seconds (900-43200; default: 3600, which is the default maximum for a role):" read sess_duration if [[ -z $sess_duration ]]; then - sess_duration = 3600 + sess_duration="3600" fi mfa_opt="--serial-number $mfa_serial --token-code $mfa_token --duration-seconds $sess_duration" fi @@ -100,6 +121,7 @@ function _aws_profiles() { reply=($(aws_profiles)) } compctl -K _aws_profiles asp aws_change_access_key +compctl -K _aws_profiles acp aws_change_access_key # AWS prompt function aws_prompt_info() {