Command line tool to easier aws cli authentication against ADFS
1.1K
The project provides two command line tools:
aws-adfs to ease aws cli authentication against ADFS (multi factor authentication with active directory) andawsr to ease automatic re-authentication against ADFS server in case of AWS token expiration.aws-adfs command line toolThanks to Brandond contribution - "Remove storage of credentials, in favor of storing ADFS session cookies" aws-adfs:
allows you to re-login to STS without entering credentials for an extended period of time, without having to store the user's actual credentials. It also lets an organization control the period in which a user can re-login to STS without entering credentials, by altering the ADFS session lifetime.
Thanks to Brandond contribution - "Add support for legacy aws_security_token key in credentials file" aws-adfs supports ansible by providing two keys with security token:
Thanks to Brandond contribution - "Add support for Kerberos SSO on Windows via requests_negotiate_sspi"
As of version 0.2.0, this tool acts on the 'default' profile unless an alternate profile name has been specified on the command line or in your environment. Previous versions acted on the 'adfs' profile by default.
aws-adfs integrates with:
awsr command line toolawsr command decorates aws command provided by awscli python package. It delegates
the execution to aws command and verifies the return code. When the return code indicates that AWS token has expired
then aws-adfs is invoked for an attempt of re-authentication. If re-authentication is finished with success then
original aws command is invoked for the second time.
aws command with awsrReplacement of aws command with awsr can be done by aliasing aws command.
alias aws='awsr'alias aws 'awsr'Place somewhere in your config.fish
test -x (which aws_completer); and complete --command awsr --no-files --arguments '(begin; set --local --export COMP_SHELL fish; set --local --export COMP_LINE (commandline); aws_completer | sed \'s/ $//\'; end)'
user local installation
pip install aws-adfs
Please note, that you need to add $HOME/.local/bin to your PATH
system wide installation
sudo pip install aws-adfs
virtualenvs
virtualenv -p /usr/bin/python2.7 aws-adfs
source aws-adfs/bin/activate
pip install aws-adfs
...
...
deactivate
aws-adfslogin to your adfs host with disabled ssl verification on aws cli profile: adfs
aws-adfs login --adfs-host=your-adfs-hostname --no-ssl-verification
and verification
aws --profile=adfs s3 ls
login to your adfs host with disabled ssl verification on specified aws cli profile: specified-profile
aws-adfs login --profile=specified-profile --adfs-host=your-adfs-hostname --no-ssl-verification
and verification
aws --profile=specified-profile s3 ls
login to your adfs host within ansible playbook
---
- name: "Auth sts aws"
command: "aws-adfs login --adfs-host sts.example.com --env --stdout --role-arn arn:aws:iam::000123456789:role/ADMIN"
register: sts_result
environment:
- username: "{{ ansible_user }}@example.com"
- password: "{{ ansible_ssh_pass }}"
- name: "Set sts facts"
set_fact:
sts: "{{ sts_result.stdout | from_json }}"
- name: "List s3 Buckets"
aws_s3_bucket_facts:
aws_access_key: "{{ sts.AccessKeyId }}"
aws_secret_key: "{{ sts.SecretAccessKey }}"
security_token: "{{ sts.SessionToken }}"
region: "us-east-1"
register: buckets
- name: "Print Buckets"
debug:
var: buckets
help, help, help?
$ aws-adfs --help
Usage: aws-adfs [OPTIONS] COMMAND [ARGS]...
Options:
--version Show current tool version
--help Show this message and exit.
Commands:
list lists available profiles
login Authenticates an user with active directory...
reset removes stored profile
$ aws-adfs list --help
Usage: aws-adfs list [OPTIONS]
lists available profiles
Options:
--version Show current tool version
--help Show this message and exit.
$ aws-adfs login --help
Usage: aws-adfs login [OPTIONS]
Authenticates an user with active directory credentials
Options:
--profile TEXT AWS cli profile that will be authenticated.
After successful authentication just use:
aws --profile <authenticated profile>
<service> ...
--region TEXT The default AWS region that this script will
connect
to for all API calls
--ssl-verification / --no-ssl-verification
SSL certificate verification: Whether or not
strict certificate
verification is done,
False should only be used for dev/test
--adfs-host TEXT For the first time for a profile it has to
be provided, next time for the same profile
it will be loaded from the stored
configuration
--output-format [json|text|table]
Output format used by aws cli
--provider-id TEXT Provider ID, e.g urn:amazon:webservices
(optional)
--s3-signature-version [s3v4] s3 signature version: Identifies the version
of AWS Signature to support for
authenticated requests. Valid values: s3v4
--env Read username, password from environment
variables (username and password).
--stdin Read username, password from standard input
separated by a newline.
--stdout Print aws_session_token in json on stdout.
--role-arn TEXT Predefined role arn to selects,
e.g. aws-adfs login --role-arn arn:aws:iam::123456789012:role/YourSpecialRole
--help Show this message and exit.
$ aws-adfs reset --help 13:39
Usage: aws-adfs reset [OPTIONS]
removes stored profile
Options:
--profile TEXT AWS cli profile that will be removed
--help Show this message and exit.
awsrawsr s3 ls
awsr --profile sandbox s3 ls
duo-security
Error: Cannot begin authentication process. The error response: {"message": "Unknown authentication method.", "stat": "FAIL"}
Please setup preferred auth method in duo-sercurity settings (settings' -> 'My Settings & Devices').
in cases of trouble with lxml please install
sudo apt-get install python-dev libxml2-dev libxslt1-dev zlib1g-dev
in cases of trouble with OSX Sierra (obsolete OpenSSL), upgrade OpenSSL. Example:
brew upgrade openssl
AND add explicit directive to .bash_profile:
export PATH=$(brew --prefix openssl)/bin:$PATH
python 2.6 is not supported
python 3.2 is not supported
Content type
Image
Digest
Size
105.3 MB
Last updated
over 8 years ago
docker pull ikerry/aws-adfs