
Outil CLI qui vous permet de vous connecter et de récupérer des informations d'identification temporaires AWS en utilisant avec les ADF ou les fournisseurs d'identité Pingfederate.
Ceci est basé sur le code Python de la façon d'implémenter une solution générale pour l'accès API / CLI fédéré à l'aide de SAML 2.0.
Le processus ressemble à ceci:
saml2aws scriptsaml2aws execMis à part Okta, la plupart des fournisseurs de ce projet utilisent le grattage d'écran pour enregistrer les utilisateurs dans SAML, ce n'est pas idéal et, espérons-le, les fournisseurs facilitent cela à l'avenir. En plus de cela, il y a des choses que vous devez savoir:
--session-duration .AWS_STS_REGIONAL_ENDPOINTS dans regional lors de l'appel saml2aws afin qu'AWS-SDK-GO utilise un point de terminaison STS régional au lieu de celui global. Voir la note au bas de la signature des demandes d'API AWS et des points de terminaison régionalisés AWS STS. Si vous êtes sur macOS, vous pouvez installer SAML2AW en utilisant Homebrew!
brew install saml2aws
saml2aws --version
Si vous êtes sous Windows, vous pouvez installer SAML2AW en utilisant Chocolatey!
choco install saml2aws
saml2aws --version
Bien que Brew soit disponible pour Linux, vous pouvez également exécuter ce qui suit sans utiliser de gestionnaire de packages.
Certains utilisateurs d'Ubuntu ont signalé un problème avec les autres installer des instructions et ont rapporté ce qui suit fonctionner (peut être requis en utilisant la commande sudo comme pour la fonction "MV")
CURRENT_VERSION=$(curl -Ls https://api.github.com/repos/Versent/saml2aws/releases/latest | grep 'tag_name' | cut -d'v' -f2 | cut -d'"' -f1)
wget https://github.com/Versent/saml2aws/releases/download/v${CURRENT_VERSION}/saml2aws_${CURRENT_VERSION}_linux_amd64.tar.gz
tar -xzvf saml2aws_${CURRENT_VERSION}_linux_amd64.tar.gz
mv saml2aws /usr/local/bin/
chmod u+x /usr/local/bin/saml2aws
saml2aws --version
Pour la prise en charge de U2F, remplacez la ligne WGET ci-dessus par wget https://github.com/Versent/saml2aws/releases/download/v${CURRENT_VERSION}/saml2aws-u2f_${CURRENT_VERSION}_linux_amd64.tar.gz ;
mkdir -p ~/.local/bin
CURRENT_VERSION=$(curl -Ls https://api.github.com/repos/Versent/saml2aws/releases/latest | grep 'tag_name' | cut -d'v' -f2 | cut -d'"' -f1)
wget -c "https://github.com/Versent/saml2aws/releases/download/v${CURRENT_VERSION}/saml2aws_${CURRENT_VERSION}_linux_amd64.tar.gz" -O - | tar -xzv -C ~/.local/bin
chmod u+x ~/.local/bin/saml2aws
hash -r
saml2aws --version
Si saml2aws --version ne fonctionne pas comme prévu, vous devrez peut-être mettre à jour votre fichier de configuration du terminal (comme ~ / .Bashrc, ~ / .profile, ~ / .zshrc) pour inclure export PATH="$PATH:$HOME/.local/bin/" à la fin du fichier.
Pour la prise en charge de U2F, remplacez la ligne WGET ci-dessus par wget -c "https://github.com/Versent/saml2aws/releases/download/v${CURRENT_VERSION}/saml2aws-u2f_${CURRENT_VERSION}_linux_amd64.tar.gz" -O - | tar -xzv -C ~/.local/bin
Vous aurez besoin d'outils GO (vous pouvez également vérifier votre mainteneur de colis) installé et l'outil GO Lint
Clone ce dépôt à votre répertoire $GOPATH/src
Vous pouvez maintenant installer en exécutant
make
make install
L'outil saml2aws est disponible dans AUR (SAML2AWS-BIN), vous pouvez donc l'installer à l'aide d'une aide AUR disponible:
$ pamac build saml2aws-bin Si vous êtes sur void Linux, vous pouvez utiliser XBPS pour installer le package SAML2AWS!
xbps-install saml2aws
saml2aws peut générer des scripts d'achèvement.
Ajoutez la ligne suivante à votre .bash_profile (ou équivalent):
eval " $( saml2aws --completion-script-bash ) " Ajoutez la ligne suivante à votre .zshrc (ou équivalent):
eval " $( saml2aws --completion-script-zsh ) " Installez le CLI AWS Voir, dans notre cas, nous utilisons Homebrew sur macOS.
brew install awscli
usage: saml2aws [<flags>] <command> [<args> ...]
A command line tool to help with SAML access to the AWS token service.
Flags:
--help Show context-sensitive help (also try --help-long and --help-man).
--version Show application version.
--verbose Enable verbose logging
--quiet silences logs
-i, --provider=PROVIDER This flag is obsolete. See: https://github.com/Versent/saml2aws#configuring-idp-accounts
--config=CONFIG Path/filename of saml2aws config file (env: SAML2AWS_CONFIGFILE)
-a, --idp-account="default" The name of the configured IDP account. (env: SAML2AWS_IDP_ACCOUNT)
--idp-provider=IDP-PROVIDER
The configured IDP provider. (env: SAML2AWS_IDP_PROVIDER)
--mfa=MFA The name of the mfa. (env: SAML2AWS_MFA)
-s, --skip-verify Skip verification of server certificate. (env: SAML2AWS_SKIP_VERIFY)
--url=URL The URL of the SAML IDP server used to login. (env: SAML2AWS_URL)
--username=USERNAME The username used to login. (env: SAML2AWS_USERNAME)
--password=PASSWORD The password used to login. (env: SAML2AWS_PASSWORD)
--mfa-token=MFA-TOKEN The current MFA token (supported in Keycloak, ADFS, GoogleApps). (env: SAML2AWS_MFA_TOKEN)
--role=ROLE The ARN of the role to assume. (env: SAML2AWS_ROLE)
--aws-urn=AWS-URN The URN used by SAML when you login. (env: SAML2AWS_AWS_URN)
--skip-prompt Skip prompting for parameters during login.
--session-duration=SESSION-DURATION
The duration of your AWS Session. (env: SAML2AWS_SESSION_DURATION)
--disable-keychain Do not use keychain at all. This will also disable Okta sessions & remembering MFA device. (env: SAML2AWS_DISABLE_KEYCHAIN)
-r, --region=REGION AWS region to use for API requests, e.g. us-east-1, us-gov-west-1, cn-north-1 (env: SAML2AWS_REGION)
--prompter=PROMPTER The prompter to use for user input (default, pinentry)
Commands:
help [<command>...]
Show help.
configure [<flags>]
Configure a new IDP account.
--app-id=APP-ID OneLogin app id required for SAML assertion. (env: ONELOGIN_APP_ID)
--client-id=CLIENT-ID OneLogin client id, used to generate API access token. (env: ONELOGIN_CLIENT_ID)
--client-secret=CLIENT-SECRET
OneLogin client secret, used to generate API access token. (env: ONELOGIN_CLIENT_SECRET)
--subdomain=SUBDOMAIN OneLogin subdomain of your company account. (env: ONELOGIN_SUBDOMAIN)
--mfa-ip-address=MFA-IP-ADDRESS
IP address whitelisting defined in OneLogin MFA policies. (env: ONELOGIN_MFA_IP_ADDRESS)
-p, --profile=PROFILE The AWS profile to save the temporary credentials. (env: SAML2AWS_PROFILE)
--resource-id=RESOURCE-ID F5APM SAML resource ID of your company account. (env: SAML2AWS_F5APM_RESOURCE_ID)
--credentials-file=CREDENTIALS-FILE
The file that will cache the credentials retrieved from AWS. When not specified, will use the default AWS credentials file location. (env: SAML2AWS_CREDENTIALS_FILE)
--cache-saml Caches the SAML response (env: SAML2AWS_CACHE_SAML)
--cache-file=CACHE-FILE The location of the SAML cache file (env: SAML2AWS_SAML_CACHE_FILE)
--disable-sessions Do not use Okta sessions. Uses Okta sessions by default. (env: SAML2AWS_OKTA_DISABLE_SESSIONS)
--disable-remember-device Do not remember Okta MFA device. Remembers MFA device by default. (env: SAML2AWS_OKTA_DISABLE_REMEMBER_DEVICE)
login [<flags>]
Login to a SAML 2.0 IDP and convert the SAML assertion to an STS token.
-p, --profile=PROFILE The AWS profile to save the temporary credentials. (env: SAML2AWS_PROFILE)
--duo-mfa-option=DUO-MFA-OPTION
The MFA option you want to use to authenticate with (supported providers: okta). (env: SAML2AWS_DUO_MFA_OPTION)
--client-id=CLIENT-ID OneLogin client id, used to generate API access token. (env: ONELOGIN_CLIENT_ID)
--client-secret=CLIENT-SECRET
OneLogin client secret, used to generate API access token. (env: ONELOGIN_CLIENT_SECRET)
--mfa-ip-address=MFA-IP-ADDRESS
IP address whitelisting defined in OneLogin MFA policies. (env: ONELOGIN_MFA_IP_ADDRESS)
--force Refresh credentials even if not expired.
--credential-process Enables AWS Credential Process support by outputting credentials to STDOUT in a JSON message.
--credentials-file=CREDENTIALS-FILE
The file that will cache the credentials retrieved from AWS. When not specified, will use the default AWS credentials file location. (env: SAML2AWS_CREDENTIALS_FILE)
--cache-saml Caches the SAML response (env: SAML2AWS_CACHE_SAML)
--cache-file=CACHE-FILE The location of the SAML cache file (env: SAML2AWS_SAML_CACHE_FILE)
--download-browser-driver Automatically download browsers for Browser IDP. (env: SAML2AWS_AUTO_BROWSER_DOWNLOAD)
--disable-sessions Do not use Okta sessions. Uses Okta sessions by default. (env: SAML2AWS_OKTA_DISABLE_SESSIONS)
--disable-remember-device Do not remember Okta MFA device. Remembers MFA device by default. (env: SAML2AWS_OKTA_DISABLE_REMEMBER_DEVICE)
exec [<flags>] [<command>...]
Exec the supplied command with env vars from STS token.
-p, --profile=PROFILE The AWS profile to save the temporary credentials. (env: SAML2AWS_PROFILE)
--exec-profile=EXEC-PROFILE
The AWS profile to utilize for command execution. Useful to allow the aws cli to perform secondary role assumption. (env: SAML2AWS_EXEC_PROFILE)
--credentials-file=CREDENTIALS-FILE
The file that will cache the credentials retrieved from AWS. When not specified, will use the default AWS credentials file location. (env: SAML2AWS_CREDENTIALS_FILE)
console [<flags>]
Console will open the aws console after logging in.
--exec-profile=EXEC-PROFILE
The AWS profile to utilize for console execution. (env: SAML2AWS_EXEC_PROFILE)
-p, --profile=PROFILE The AWS profile to save the temporary credentials. (env: SAML2AWS_PROFILE)
--force Refresh credentials even if not expired.
--link Present link to AWS console instead of opening browser
--credentials-file=CREDENTIALS-FILE
The file that will cache the credentials retrieved from AWS. When not specified, will use the default AWS credentials file location. (env: SAML2AWS_CREDENTIALS_FILE)
list-roles
List available role ARNs.
--cache-saml Caches the SAML response (env: SAML2AWS_CACHE_SAML)
--cache-file=CACHE-FILE The location of the SAML cache file (env: SAML2AWS_SAML_CACHE_FILE)
script [<flags>]
Emit a script that will export environment variables.
-p, --profile=PROFILE The AWS profile to save the temporary credentials. (env: SAML2AWS_PROFILE)
--credentials-file=CREDENTIALS-FILE
The file that will cache the credentials retrieved from AWS. When not specified, will use the default AWS credentials file location. (env: SAML2AWS_CREDENTIALS_FILE)
--shell=bash Type of shell environment. Options include: bash, /bin/sh, powershell, fish, env
saml2aws script Si le sous-commun script est appelé, saml2aws publiera les informations d'identification de sécurité temporaires suivantes:
export AWS_ACCESS_KEY_ID="ASIAI....UOCA"
export AWS_SECRET_ACCESS_KEY="DuH...G1d"
export AWS_SESSION_TOKEN="AQ...1BQ=="
export AWS_SECURITY_TOKEN="AQ...1BQ=="
export AWS_CREDENTIAL_EXPIRATION="2016-09-04T38:27:00Z00:00"
SAML2AWS_PROFILE=saml
PowerShell, SH et les coquilles de poisson sont également soutenues. Env est utile pour tous les outils compatibles SDK AWS qui peuvent trouver un fichier env. C'est un combo puissant avec Docker et le paramètre --env-file .
Si vous utilisez fréquemment eval $(saml2aws script) , vous voudrez peut-être créer un alias pour cela:
Zsh:
alias s2a="function(){eval $( $(command saml2aws) script --shell=bash --profile=$@);}"
frapper:
function s2a { eval $( $(which saml2aws) script --shell=bash --profile=$@); }
Env:
docker run -ti --env-file <(saml2aws script --shell=env) amazon/aws-cli s3 ls
saml2aws exec Si le sous-commande exec est appelé, saml2aws exécutera la commande donnée comme argument: par défaut SAML2AWS exécutera la commande avec des informations d'identification TEMP générées via saml2aws login .
L'indicateur --exec-profile permet à une commande de s'exécuter à l'aide d'un profil AWS qui peut avoir enchaîné des actions "Assumer le rôle". (via 'source_profile' dans ~ / .aws / config)
options:
--exec-profile Execute the given command utilizing a specific profile from your ~/.aws/config file
C'est la nouvelle façon d'ajouter des comptes de fournisseurs IDP, il vous permet d'avoir nommé des comptes avec tous les paramètres que vous aimez et prend en charge un compte par défaut qui est utilisé si vous omettez l'indicateur de compte. Cela remplace l'indicateur --Provider et l'ancien fichier de configuration dans 1.x.
Pour ajouter un compte IDP par défaut à SAML2AWS, exécutez simplement la commande suivante et suivez les invites.
$ saml2aws configure
? Please choose a provider: Ping
? AWS Profile myaccount
? URL https://example.com
? Username [email protected]
? Password
No password supplied
account {
URL: https://example.com
Username: [email protected]
Provider: Ping
MFA: Auto
SkipVerify: false
AmazonWebservicesURN: urn:amazon:webservices
SessionDuration: 3600
Profile: myaccount
Region: us-east-1
}
Configuration saved for IDP account: default
Puis pour se connecter à l'aide de ce compte.
saml2aws login
Vous pouvez également ajouter des comptes nommés, ci-dessous est un exemple où je configure un compte sous l'alias wolfeidau , suivez à nouveau les invites.
saml2aws configure -a wolfeidau
Vous pouvez également configurer l'alias du compte sans invites.
saml2aws configure -a wolfeidau --idp-provider KeyCloak --username [email protected] -r cn-north-1
--url https://keycloak.wolfe.id.au/auth/realms/master/protocol/saml/clients/amazon-aws --skip-prompt
Ensuite, vous êtes prêt à utiliser SAML2AWS.
Connectez-vous à un service (sans MFA).
$ saml2aws login
Using IDP Account default to access Ping https://id.example.com
To use saved password just hit enter.
Username [[email protected]]:
Password: ************
Authenticating as [email protected] ...
Selected role: arn:aws:iam::123123123123:role/AWS-Admin-CloudOPSNonProd
Requesting AWS credentials using SAML assertion
Saving credentials
Logged in as: arn:aws:sts::123123123123:assumed-role/AWS-Admin-CloudOPSNonProd/[email protected]
Your new access key pair has been stored in the AWS configuration
Note that it will expire at 2016-09-19 15:59:49 +1000 AEST
To use this credential, call the AWS CLI with the --profile option (e.g. aws --profile saml ec2 describe-instances).
Connectez-vous à un service (avec MFA).
$ saml2aws login
Using IDP Account default to access Ping https://id.example.com
To use saved password just hit enter.
Username [[email protected]]:
Password: ************
Authenticating as [email protected] ...
Enter passcode: 123456
Selected role: arn:aws:iam::123123123123:role/AWS-Admin-CloudOPSNonProd
Requesting AWS credentials using SAML assertion
Saving credentials
Logged in as: arn:aws:sts::123123123123:assumed-role/AWS-Admin-CloudOPSNonProd/[email protected]
Your new access key pair has been stored in the AWS configuration
Note that it will expire at 2016-09-19 15:59:49 +1000 AEST
To use this credential, call the AWS CLI with the --profile option (e.g. aws --profile saml ec2 describe-instances --region us-east-1).
Si vous utilisez WSL1 ou WSL2, vous pouvez obtenir l'erreur suivante lorsque vous essayez de sauver les informations d'identification dans le trousseau
No such interface “org.freedesktop.DBus.Properties” on object at path /
Cela se produit parce que le back-end de clés préféré - utilise le gnome-keyring par défaut - ce qui nécessite X11 - et si vous n'utilisez pas Windows 11 avec la prise en charge des applications GUI Linux - cela peut être difficile sans configurer un Formed X11.
Il existe 2 approches préférées pour solution de contournement: ce problème:
Vous pouvez appliquer l'indicateur --disable-keychain lors de l'utilisation des commandes configure et login . L'utilisation de ce drapeau signifie que vos informations d'identification (telles que votre mot de passe pour votre PDI, ou dans le cas de l'Okta le jeton de session OKTA) ne sauvera pas sur votre porte-clés - et ne sera pas sauté entièrement. Cela signifie que vous devrez saisir votre nom d'utilisateur et votre mot de passe chaque fois que vous invoquez la commande login .
Il y a quelques étapes impliquées dans cette option - mais cette option enregistrera vos informations d'identification (telles que votre mot de passe à votre IDP et vos jetons de session, etc.) dans le clés de pass [https://www.passwordstore.org/]. Le Course pass est le gestionnaire de mot de passe UNIX standard. Cette option a été fortement inspirée par un problème similaire dans AWS-Vault
Pour configurer la réussite pour être le clés par défaut, les étapes suivantes devront être terminées (en supposant que vous utilisez Ubuntu 20.04 LTS):
sudo apt-get update && sudo apt-get install -y pass gnupggpg --gen-keyLa sortie de la commande gpg sortira quelque chose de similaire à ce qui suit:
public and secret key created and signed.
pub rsa3072 2021-04-22 [SC] [expires: 2023-04-22]
844E426A53A64C2A916CBD1F522014D5FDBF6E3D
uid Meir Gabay <[email protected]>
sub rsa3072 2021-04-22 [E] [expires: 2023-04-22]
pass init < GPG_PUBLIC_KEY > Pendant le processus init vous serez invité à saisir la phrase secrète fournie à l'étape 2
saml2aws pour utiliser le clés pass . Cela peut être fait en définissant la variable SAML2AWS_KEYRING_BACKEND pour pass . Vous devrez également définir le GPG_TTY sur votre TTY actuel, ce qui signifie que vous pouvez définir la variable sur "$( tty )"ce qui signifie que ce qui suit peut être ajouté dans votre profil
export SAML2AWS_KEYRING_BACKEND=pass
export GPG_TTY="$( tty )"
Configuration de plusieurs comptes avec un rôle et un profil personnalisés dans ~/.aws/config avec objectif étant l'isolement entre le code infra lors du déploiement dans ces environnements. Cette configuration suppose que vous utilisez des rôles distincts et que AWS complete probablement dev et test et est conçu pour aider le personnel des opérations à éviter accidentellement le déploiement sur le mauvais compte AWS dans des environnements complexes. Notez que cette méthode configure directement l'authentification SAML sur chaque compte AWS (dans ce cas, différents comptes AWS). Dans l'exemple ci-dessous, les valeurs d'authentification distinctes sont configurées pour les comptes AWS 'Profil = client-dev / awsaccount = était 121234567890' et 'Profil = client-test / awsaccount = 121234567891'
Pour configurer le compte Dev, exécutez les éléments suivants et entrez URL, nom d'utilisateur et mot de passe, et attribuez un rôle standard à sélectionner automatiquement sur la connexion.
saml2aws configure -a customer-dev --role=arn:aws:iam::121234567890:role/customer-admin-role -p customer-dev
Cela entraînera la configuration suivante dans ~/.saml2aws .
[customer-dev]
url = https://id.customer.cloud
username = [email protected]
provider = Ping
mfa = Auto
skip_verify = false
timeout = 0
aws_urn = urn:amazon:webservices
aws_session_duration = 28800
aws_profile = customer-dev
role_arn = arn:aws:iam::121234567890:role/customer-admin-role
region = us-east-1
Pour l'utiliser, vous devrez exporter AWS_DEFAULT_PROFILE=customer-dev pour cibler dev .
Pour configurer le compte de test, exécutez les éléments suivants et entrez URL, nom d'utilisateur et mot de passe.
saml2aws configure -a customer-test --role=arn:aws:iam::121234567891:role/customer-admin-role -p customer-test
Il en résulte la configuration suivante dans ~/.saml2aws .
[customer-test]
url = https://id.customer.cloud
username = [email protected]
provider = Ping
mfa = Auto
skip_verify = false
timeout = 0
aws_urn = urn:amazon:webservices
aws_session_duration = 28800
aws_profile = customer-test
role_arn = arn:aws:iam::121234567891:role/customer-admin-role
region = us-east-1
Pour l'utiliser, vous devrez exporter AWS_DEFAULT_PROFILE=customer-test au test cible.
Si vous utilisez le fournisseur d'identité du navigateur, lors de la première invocation de saml2aws login vous devez vous souvenir d'installer les pilotes du navigateur afin que le dramaturge fonctionne. Sinon, vous verrez le message d'erreur suivant:
Error authenticating to IDP.: please install the driver (vx.xx) and browsers first: %!w(<nil>)
Pour installer les pilotes, vous pouvez:
--download-browser-driver to saml2aws loginSAML2AWS_AUTO_BROWSER_DOWNLOAD=truedownload_browser_driver = true dans votre fichier de configuration saml2aws, c'est-à-dire ~/.saml2aws Exemple: (s'authentifiez-vous à mon compte «sso» AWS. Avec cette configuration, il n'est pas nécessaire de s'authentifier à nouveau. Nous pouvons maintenant compter sur IAM pour assumer le compte de Role Cross)
~ / .AWS / Identials: # (Ceux-ci sont générés par saml2aws login . Configure l'authentification SAML dans le compte SSO AWS)
[saml]
aws_access_key_id = AAAAAAAAAAAAAAAAB
aws_secret_access_key = duqhdZPRjEdZPRjE=dZPRjEhKjfB
aws_session_token = #REMOVED#
aws_security_token = #REMOVED#
x_principal_arn = arn:aws:sts::000000000123:assumed-role/myInitialAccount
x_security_token_expires = 2019-08-19T15:00:56-06:00
(Utilisez les profils AWS pour supposer un rôle de rôle AWS) (notez que le "source_profile" est défini sur SAML qui est mon compte SSO AWS car il est déjà authentifié)
~ / .aws / config:
[profile roleIn2ndAwsAccount]
source_profile=saml
role_arn=arn:aws:iam::123456789012:role/OtherRoleInAnyFederatedAccount # Note the different account number here
role_session_name=myAccountName
[profile extraRroleIn2ndAwsAccount]
# this profile uses a _third_ level of role assumption
source_profile=roleIn2ndAwsAccount
role_arn=arn:aws:iam::123456789012:role/OtherRoleInAnyFederatedAccount
Exécution de Saml2AWS sans - Flag de profil EXEC:
saml2aws exec aws sts get-caller-identity
{
"UserId": "AROAYAROAYAROAYOO:myInitialAccount",
"Account": "000000000123",
"Arn": "arn:aws:sts::000000000123:assumed-role/myInitialAccount" # This shows my 'SSO' account (SAML profile)
}
Exécution de Saml2aws avec le drapeau de profil - EXEC:
Lorsque vous utilisez «--exec-profile», je peux assumer le role dans un autre compte AWS sans ré-authentification. Notez qu'il ne réauthentique pas car nous sommes déjà authentifiés via le compte SSO.
saml2aws exec --exec-profile roleIn2ndAwsAccount aws sts get-caller-identity
{
"UserId": "YOOYOOYOOYOOYOOA:/myAccountName",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/myAccountName"
}
Par exemple
saml2aws login
aws s3 ls --profile saml
An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
# This is denied in this example because there are no S3 buckets in the 'SSO' AWS account
saml2aws exec --exec-profile roleIn2ndAwsAccount aws s3 ls # Runs given CMD with environment configured from --exec-profile role
# If we check env variables we see that our environment is configured with temporary credentials for our 'assumed role'
env | grep AWS
AWS_SESSION_TTL=12h
AWS_FEDERATION_TOKEN_TTL=12h
AWS_ASSUME_ROLE_TTL=1h
AWS_ACCESS_KEY_ID=AAAAAAAASORTENED
AWS_SECRET_ACCESS_KEY=secretShortened+6jJ5SMqsM5CkYi3Gw7
AWS_SESSION_TOKEN=ShortenedTokenXXX=
AWS_SECURITY_TOKEN=ShortenedSecurityTokenXXX=
AWS_CREDENTIAL_EXPIRATION=2016-09-04T38:27:00Z00:00
# If we desire to execute multiple commands utilizing our assumed profile, we can obtain a new shell with Env variables configured for access
saml2aws exec --exec-profile roleIn2ndAwsAccount $SHELL # Get a new shell with AWS env vars configured for 'assumed role' account access
# We are now able to execute AWS cli commands with our assume role permissions
# Note that we do not need a --profile flag because our environment variables were set up for this access when we obtained a new shell with the --exec-profile flag
aws s3 ls
2019-07-30 01:32:59 264998d7606497040-sampleBucket
aws iam list-groups
{
"Groups": [
{
"Path": "/",
"GroupName": "MyGroup",
"GroupId": "AGAGTENTENTENGOCQFK",
"Arn": "arn:aws:iam::123456789012:group/MyGroup",
"CreateDate": "2019-05-13T16:12:19Z"
]
}
}
Il existe peu de paramètres supplémentaires permettant de personnaliser la configuration SAML2AWS. Utilisez les paramètres suivants dans le fichier ~/.saml2aws :
http_attempts_count - Configure le nombre de tentatives pour envoyer des demandes HTTP afin d'autoriser avec le fournisseur SAML. Par défaut est 1http_retry_delay - configure la durée (en secondes) de temps mort entre les tentatives d'envoi de demandes HTTP au fournisseur SAML. Par défaut est 1region - Configure la région des points de terminaison à utiliser, voir le public et la partitiontarget_url - Recherchez un point de terminaison cible autre que Signin.aws.amazon.com/saml. Les fournisseurs ECP OKTA, Pingfed, Pingone et Shibboleth doivent soit envoyer ou rechercher explicitement cette URL dans une réponse afin d'obtenir ou d'identifier une réponse d'authentification appropriée. Cela peut être remplacé ici si vous souhaitez vous authentifier pour autre chose que AWS.Exemple: la configuration typique avec de tels paramètres ressemblerait à suit:
[default]
url = https://id.customer.cloud
username = [email protected]
provider = Ping
mfa = Auto
skip_verify = false
timeout = 0
aws_urn = urn:amazon:webservices
aws_session_duration = 28800
aws_profile = customer-dev
role_arn = arn:aws:iam::121234567890:role/customer-admin-role
http_attempts_count = 3
http_retry_delay = 1
region = us-east-1
Pour KeyCloak, 2 paramètres supplémentaires sont disponibles pour mettre fin à un processus d'authentification raté.
kc_auth_error_element - Configure ce que Saml2AWS HTTP recherche dans les réponses d'erreur d'authentification. Par défaut, "Span # Input-Error" et recherche <span id=input-error>xxx</span> . Goquery est utilisé. "Span # id-name" recherche <span id=id-name>xxx</span> . "span.class-name" recherche <span class=class-name>xxx</span> .kc_auth_error_message - Fonctionne avec le kc_auth_error_element et configure ce que le message HTTP SAML2AWS recherche dans les réponses d'erreur d'authentification. Par défaut est «nom d'utilisateur ou mot de passe non valide». et recherche <xxx>Invalid username or password.</xxx> . Les expressions régulières sont acceptées. Exemple: si votre serveur KeyCloak renvoie le message d'erreur d'authentification "nom d'utilisateur ou mot de passe non valide". Dans une langue différente de l'élément <span class=kc-feedback-text>xxx</span> , ces paramètres ressembleraient:
[default]
url = https://id.customer.cloud
username = [email protected]
provider = KeyCloak
...
kc_auth_error_element = span.kc-feedback-text
kc_auth_error_message = "Ungültiger Benutzername oder Passwort."
Si votre serveur KeyCloak renvoie un message d'erreur différent en fonction d'un type d'erreur d'authentification, utilisez un tuyau comme séparateur et ajoutez plusieurs messages au kc_auth_error_message :
[default]
url = https://id.customer.cloud
username = [email protected]
provider = KeyCloak
...
kc_auth_error_message = "Invalid username or password.|Account is disabled, contact your administrator."
Pour créer ce logiciel sur macOS, clonez le repo à $GOPATH/src/github.com/versent/saml2aws et assurez-vous d'avoir $GOPATH/bin dans votre $PATH . Vous aurez également besoin de GoreleSer installé.
make mod
Installez le binaire sur $GOPATH/bin .
make install
Ensuite, pour tester le logiciel, il suffit de s'exécuter.
make test
Avant d'élever un PR, veuillez exécuter le linter.
make lint-fix
Pour construire ce logiciel sur Debian / Ubuntu, vous devez installer une dépendance à la construction:
sudo apt install libudev-dev
Vous avez également besoin d'installation de GoreleSer et du binaire (ou d'un lien de symbolique) dans bin/goreleaser .
ln -s $(command -v goreleaser) bin/goreleaser
Ensuite, vous pouvez construire:
make build
La commande EXEC Sub exportera les variables d'environnement suivantes.
Remarque: Les variables d'environnement de profil vous permettent d'utiliser exec avec un script ou une commande qui nécessite un profil explicite.
Cet outil ne serait pas possible sans d'excellentes bibliothèques OpenSource.
git tag -as vX.XXmake builddist/ du répertoire racine du projetgit push origin vX.XXIl y a deux niveaux de débogage, émet d'abord des informations de débogage et la ligne de demandes URL / méthode / statut.
saml2aws login --verbose
Le second émet le contenu des demandes et des réponses, cela inclut les informations liées à l'authentification, alors ne les copiez pas et ne les collez pas dans le chat ou les billets!
DUMP_CONTENT=true saml2aws login --verbose
Le processus d'identification est un moyen pratique d'interfacer les fournisseurs d'identification avec l'AWS CLI.
Vous pouvez utiliser saml2aws comme fournisseur d'identification en le configurant simplement, puis en ajoutant un profil à la configuration AWS. saml2aws a un drapeau --credential-process générant une sortie avec le bon format JSON, ainsi qu'un drapeau --quiet qui empêchera la journalisation d'être affichée. Le fichier d'identification AWS (généralement ~ / .AWS / Identials) a une priorité sur le fournisseur d'identification_process. Cela signifie que si des informations d'identification sont présentes dans le fichier, le processus d'identification ne déclenche pas. Pour contrer que vous pouvez remplacer l'emplacement d'identification AWS de saml2aws vers un autre fichier utilisant --credential-file ou le spécifier pendant configure .
Le fichier d'identification AWS (généralement ~ / .AWS / Identials) a une priorité sur le fournisseur d'identification_process. Cela signifie que si des informations d'identification sont présentes dans le fichier, le processus d'identification ne déclenche pas.
Un exemple de la configuration AWS ( ~/.aws/config ):
[profile mybucket]
region = us-west-1
credential_process = saml2aws login --credential-process --role <ROLE> --profile mybucket
Vous pouvez l'ajouter manuellement ou via l'Awscli, c'est-à-dire
aws configure set credential_process "saml2aws login --credential-process --role <ROLE> --profile mybucket"
Lorsque vous utilisez le CLI AWS avec le profil mybucket , le processus d'authentification sera exécuté et l'AWS sera ensuite exécuté en fonction des informations d'identification renvoyées.
Vous pouvez utiliser l'indicateur --cache-saml afin de mettre en cache l'affirmation SAML à l'heure d'authentification. Le cache d'affirmation SAML a une validité très courte (5 min) et peut être utilisé pour s'authentifier pour plusieurs rôles avec une seule validation MFA.
Il y a un fichier par profil SAML2AWS, le répertoire de cache est appelé saml2aws et est situé dans votre répertoire .aws dans votre utilisateur HomeDir.
Vous pouvez basculer --cache-saml pendant login ou pendant list-roles , et vous pouvez le définir une fois pendant configure et l'utiliser implicitement.
Cela nécessite l'utilisation du porte-clés (magasin d'identification local). Si vous avez désactivé le trousseau en utilisant --disable-keychain , Okta Sessions sera également désactivée.
Les sessions OKTA sont activées par défaut. Cela stockera la session OKTA localement et enregistrera votre appareil pour MFA. Cela signifie que si la session n'a pas encore expiré, vous ne serez pas invité à MFA.
--disable-remember-device pendant les commandes login ou configure .--disable-sessions pendant les commandes login ou configure . Utilisez l'indicateur --force pendant la commande login pour provoquer la sélection des rôles AWS.
Si les sessions OKTA sont désactivées via l'une des méthodes mentionnées ci-dessus, le processus de connexion sera par défaut au processus d'authentification standard (sans utiliser sessions).
Veuillez noter que vos politiques de durée d'Okta Session et de MFA sont régies par votre organisation hôte d'Okta.
Ce code est Copyright (C) 2024 Versent et libéré sous la licence MIT. Tous les droits non explicitement accordés dans la licence du MIT sont réservés. Voir le fichier Licence.md inclus pour plus de détails.