<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rafael Sales</title>
    <description>The latest articles on DEV Community by Rafael Sales (@rafaelsales).</description>
    <link>https://dev.to/rafaelsales</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F100730%2Fee4ed471-88b7-4cb9-9993-b9e15c8d27d0.jpg</url>
      <title>DEV Community: Rafael Sales</title>
      <link>https://dev.to/rafaelsales</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rafaelsales"/>
    <language>en</language>
    <item>
      <title>Generating ~/.aws/credentials through AWS SSO via CLI</title>
      <dc:creator>Rafael Sales</dc:creator>
      <pubDate>Sat, 06 Jun 2020 16:40:56 +0000</pubDate>
      <link>https://dev.to/rafaelsales/generating-aws-credentials-through-aws-sso-11bh</link>
      <guid>https://dev.to/rafaelsales/generating-aws-credentials-through-aws-sso-11bh</guid>
      <description>&lt;h2&gt;
  
  
  1. Configure AWS SSO via CLI
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;aws configure sso
SSO start URL &lt;span class="o"&gt;[&lt;/span&gt;None]: https://mycompany.awsapps.com/start
SSO Region &lt;span class="o"&gt;[&lt;/span&gt;None]: us-east-1
The only AWS account available to you is: 43294231752
Using the account ID 43294231752
The only role available to you is: DeveloperAccess
Using the role name &lt;span class="s2"&gt;"DeveloperAccess"&lt;/span&gt;
CLI default client Region &lt;span class="o"&gt;[&lt;/span&gt;None]: us-east-1
CLI default output format &lt;span class="o"&gt;[&lt;/span&gt;None]: json
CLI profile name &lt;span class="o"&gt;[&lt;/span&gt;DeveloperAccess-43294231752]: mycompany
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Find your role ARN
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;aws iam list-roles &lt;span class="nt"&gt;--profile&lt;/span&gt; mycompany
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"Roles"&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"Path"&lt;/span&gt;: &lt;span class="s2"&gt;"/aws-reserved/sso.amazonaws.com/"&lt;/span&gt;,
      &lt;span class="s2"&gt;"RoleName"&lt;/span&gt;: &lt;span class="s2"&gt;"AWSReservedSSO_DeveloperAccess_d76dgf87km13mb"&lt;/span&gt;,
      &lt;span class="s2"&gt;"RoleId"&lt;/span&gt;: &lt;span class="s2"&gt;"D67DSAUSNJ3491KM"&lt;/span&gt;,
      &lt;span class="s2"&gt;"Arn"&lt;/span&gt;: &lt;span class="s2"&gt;"arn:aws:iam::43294231752:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_DeveloperAccess_d76dgf87km13mb"&lt;/span&gt;,
      ...
    &lt;span class="o"&gt;}&lt;/span&gt;,
  ...
&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;To find the role in the list, simply look for a role name matching the one you saw in the 1st step, "DeveloperAccess" in this case.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Try fetching the credentials using the Arn above
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;aws sts assume-role
  &lt;span class="nt"&gt;--profile&lt;/span&gt; mycompany
  &lt;span class="nt"&gt;--role-session-name&lt;/span&gt; YourNameHere
  &lt;span class="nt"&gt;--role-arn&lt;/span&gt; arn:aws:iam::43294231752:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_DeveloperAccess_d76dgf87km13mb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You should get a response like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Credentials"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AccessKeyId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SecretAccessKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SessionToken"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Expiration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2020-06-06T16:48:03+00:00"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"AssumedRoleUser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AssumedRoleId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Arn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Create a script to generate ~/.aws/credentials
&lt;/h2&gt;

&lt;p&gt;I like to name this script &lt;code&gt;aws_refresh_token.sh&lt;/code&gt;.&lt;br&gt;
Also make sure to adjust the variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c"&gt;# This script generates AWS Programmatic Access credentials from a user authenticated via SSO&lt;/span&gt;
&lt;span class="c"&gt;# Before using, make sure that the AWS SSO is configured in your CLI: `aws configure sso`&lt;/span&gt;
&lt;span class="c"&gt;# The Role ARN can be found in the AWS Console -&amp;gt; IAM -&amp;gt; Roles or via AWS CLI -&amp;gt; `aws iam list-roles`&lt;/span&gt;

&lt;span class="nv"&gt;profile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mycompany"&lt;/span&gt;
&lt;span class="nv"&gt;role_arn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::43294231752:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_DeveloperAccess_d76dgf87km13mb"&lt;/span&gt;
&lt;span class="nv"&gt;user_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git config user.name | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/[^A-Za-z0-9+=,.@-]/-/g'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

request_credentials&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nv"&gt;credentials&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;
    aws sts assume-role &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="nt"&gt;--profile&lt;/span&gt; &lt;span class="nv"&gt;$profile&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="nt"&gt;--role-arn&lt;/span&gt; &lt;span class="nv"&gt;$role_arn&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
      &lt;span class="nt"&gt;--role-session-name&lt;/span&gt; &lt;span class="nv"&gt;$user_name&lt;/span&gt;
  &lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
request_credentials

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt; &lt;span class="nt"&gt;-ne&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;aws sso login &lt;span class="nt"&gt;--profile&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$profile&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt; &lt;span class="nt"&gt;-ne&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;exit &lt;/span&gt;1
  &lt;span class="k"&gt;fi

  &lt;/span&gt;request_credentials
&lt;span class="k"&gt;fi

&lt;/span&gt;&lt;span class="nv"&gt;access_key_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$credentials&lt;/span&gt; | perl &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="s1"&gt;'/"AccessKeyId": "([^,]+)"/ &amp;amp;&amp;amp; print $1'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;secret_key_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$credentials&lt;/span&gt; | perl &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="s1"&gt;'/"SecretAccessKey": "([^,]+)"/ &amp;amp;&amp;amp; print $1'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;session_token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$credentials&lt;/span&gt; | perl &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="s1"&gt;'/"SessionToken": "([^,]+)"/ &amp;amp;&amp;amp; print $1'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

aws configure &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$profile&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; aws_access_key_id &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$access_key_id&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
aws configure &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$profile&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; aws_secret_access_key &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$secret_key_id&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
aws configure &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$profile&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; aws_session_token &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$session_token&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Testing
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./aws_refresh_token.sh

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.aws/credentials
&lt;span class="o"&gt;[&lt;/span&gt;mycompany]
aws_access_key_id &lt;span class="o"&gt;=&lt;/span&gt; ...
aws_secret_access_key &lt;span class="o"&gt;=&lt;/span&gt; ...
aws_session_token &lt;span class="o"&gt;=&lt;/span&gt; ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>aws</category>
      <category>sso</category>
      <category>saml</category>
      <category>credentials</category>
    </item>
  </channel>
</rss>
