TODO
- Create a write-up on how this works
[default] | |
credential_process = sh -c '/home/jrandomhacker/.aws/get-session-token.sh 2> /dev/tty' | |
[profile low_privilege_user] | |
aws_access_key_id=AKIAXXXXXXXXXXXXXXXX | |
aws_secret_access_key=axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | |
region=us-east-1 |
#!/bin/sh | |
# | |
# If the file ~/.aws/session-token.json exists and was created less than | |
# 718 minutes ago (12 hour - 2 minutes) then return that | |
# Otherwise read the MFA token, and call aws sts get-session-token with | |
# duration of 12 hours and recreate the file (and then return it) | |
# | |
if test "`find ~/.aws/session-token.json -type f -cmin -718 2>/dev/null`" ; then | |
cat ~/.aws/session-token.json | |
else | |
rm -f ~/.aws/session-token.json | |
read -p "Please enter MFA code: " mfa | |
aws sts get-session-token \ | |
--serial-number "arn:aws:iam::777777777777:mfa/low_privilege_user" \ | |
--profile low_privilege_user \ | |
--duration 43200 \ | |
--token-code $mfa \ | |
--query 'Credentials' | jq '.Version += 1' > ~/.aws/session-token.json | |
cat ~/.aws/session-token.json | |
fi |
{ | |
"Version": "2012-10-17", | |
"Statement": [ | |
{ | |
"Sid": "BlockMostAccessUnlessSignedInWithMFA", | |
"Effect": "Deny", | |
"NotAction": [ | |
"sts:GetSessionToken" | |
], | |
"Resource": "*", | |
"Condition": { | |
"BoolIfExists": { | |
"aws:MultiFactorAuthPresent": "false" | |
} | |
} | |
} | |
] | |
} |