23f9348e2c2341df71b1891eb4607f60ddd5a204

Author
Sergei Shvetsov <sshvetsov@users.noreply.github.com>
Committer
GitHub <noreply@github.com>
Date

Message

fix(aws): allow for profile switch w/o MFA configured (#9924)

Diff

 1diff --git a/plugins/aws/aws.plugin.zsh b/plugins/aws/aws.plugin.zsh
 2index e1566b1133c1063d06d2447372ff9ca4f7a5e7f4..2d095635b54b407f7af7c558d06f8e92043f8e85 100644
 3--- a/plugins/aws/aws.plugin.zsh
 4+++ b/plugins/aws/aws.plugin.zsh
 5@@ -62,47 +62,47 @@ function acp() {
 6       read -r sess_duration
 7     fi
 8     mfa_opt=(--serial-number "$mfa_serial" --token-code "$mfa_token" --duration-seconds "${sess_duration:-3600}")
 9+  fi
10 
11-    # Now see whether we need to just MFA for the current role, or assume a different one
12-    local role_arn="$(aws configure get role_arn --profile $profile)"
13-    local sess_name="$(aws configure get role_session_name --profile $profile)"
14-
15-    if [[ -n "$role_arn" ]]; then
16-      # Means we need to assume a specified role
17-      aws_command=(aws sts assume-role --role-arn "$role_arn" "${mfa_opt[@]}")
18+  # Now see whether we need to just MFA for the current role, or assume a different one
19+  local role_arn="$(aws configure get role_arn --profile $profile)"
20+  local sess_name="$(aws configure get role_session_name --profile $profile)"
21 
22-      # Check whether external_id is configured to use while assuming the role
23-      local external_id="$(aws configure get external_id --profile $profile)"
24-      if [[ -n "$external_id" ]]; then
25-        aws_command+=(--external-id "$external_id")
26-      fi
27+  if [[ -n "$role_arn" ]]; then
28+    # Means we need to assume a specified role
29+    aws_command=(aws sts assume-role --role-arn "$role_arn" "${mfa_opt[@]}")
30 
31-      # Get source profile to use to assume role
32-      local source_profile="$(aws configure get source_profile --profile $profile)"
33-      if [[ -z "$sess_name" ]]; then
34-        sess_name="${source_profile:-profile}"
35-      fi
36-      aws_command+=(--profile="${source_profile:-profile}" --role-session-name "${sess_name}")
37+    # Check whether external_id is configured to use while assuming the role
38+    local external_id="$(aws configure get external_id --profile $profile)"
39+    if [[ -n "$external_id" ]]; then
40+      aws_command+=(--external-id "$external_id")
41+    fi
42 
43-      echo "Assuming role $role_arn using profile ${source_profile:-profile}"
44-    else
45-      # Means we only need to do MFA
46-      aws_command=(aws sts get-session-token --profile="$profile" "${mfa_opt[@]}")
47-      echo "Obtaining session token for profile $profile"
48+    # Get source profile to use to assume role
49+    local source_profile="$(aws configure get source_profile --profile $profile)"
50+    if [[ -z "$sess_name" ]]; then
51+      sess_name="${source_profile:-profile}"
52     fi
53+    aws_command+=(--profile="${source_profile:-profile}" --role-session-name "${sess_name}")
54 
55-    # Format output of aws command for easier processing
56-    aws_command+=(--query '[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]' --output text)
57+    echo "Assuming role $role_arn using profile ${source_profile:-profile}"
58+  else
59+    # Means we only need to do MFA
60+    aws_command=(aws sts get-session-token --profile="$profile" "${mfa_opt[@]}")
61+    echo "Obtaining session token for profile $profile"
62+  fi
63 
64-    # Run the aws command to obtain credentials
65-    local -a credentials
66-    credentials=(${(ps:\t:)"$(${aws_command[@]})"})
67+  # Format output of aws command for easier processing
68+  aws_command+=(--query '[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]' --output text)
69 
70-    if [[ -n "$credentials" ]]; then
71-      aws_access_key_id="${credentials[1]}"
72-      aws_secret_access_key="${credentials[2]}"
73-      aws_session_token="${credentials[3]}"
74-    fi
75+  # Run the aws command to obtain credentials
76+  local -a credentials
77+  credentials=(${(ps:\t:)"$(${aws_command[@]})"})
78+
79+  if [[ -n "$credentials" ]]; then
80+    aws_access_key_id="${credentials[1]}"
81+    aws_secret_access_key="${credentials[2]}"
82+    aws_session_token="${credentials[3]}"
83   fi
84 
85   # Switch to AWS profile