
CLI -Tool, mit dem Sie AWS -temporäre Anmeldeinformationen mit ADFs oder PingFederate -Identitätsanbietern anmelden und abrufen können.
Dies basiert auf dem Python -Code von der Implementierung einer allgemeinen Lösung für den Federated API/CLI -Zugriff mit SAML 2.0.
Der Prozess geht ungefähr so:
saml2aws scriptsaml2aws execAbgesehen von Okta verwenden die meisten Anbieter in diesem Projekt Bildschirm, um Benutzer in SAML zu protokollieren. Dies ist nicht ideal und hoffentlich erleichtern die Anbieter dies in Zukunft. Zusätzlich dazu müssen Sie einige Dinge wissen:
--session-duration Flaggen konfiguriert werden.AWS_STS_REGIONAL_ENDPOINTS um regional einstellen, wenn Sie saml2aws aufrufen, damit AWS-SDK-go einen regionalen STS-Endpunkt anstelle des globalen Gebrauchs verwendet. Siehe die Notiz am unteren Rand der AWS -API -Anfragen und AWS STS -regionalisierten Endpunkte. Wenn Sie auf MacOS sind, können Sie SAML2AWs mit Homebrew installieren!
brew install saml2aws
saml2aws --version
Wenn Sie unter Windows sind, können Sie SAML2AWs mit Chocolatey installieren!
choco install saml2aws
saml2aws --version
Während Brew für Linux erhältlich ist, können Sie auch die folgenden Ausführungen ausführen, ohne einen Paketmanager zu verwenden.
Einige Benutzer von Ubuntu haben Probleme mit den anderen gemeldet, die den Anweisungen installieren und die folgenden Arbeiten gemeldet haben (Mai erforderlich, um den SUDO -Befehl wie für die "MV" -Funktion zu verwenden).
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
Ersetzen Sie für U2F-Unterstützung die WGet-Zeile oben durch wget https://github.com/Versent/saml2aws/releases/download/v${CURRENT_VERSION}/saml2aws-u2f_${CURRENT_VERSION}_linux_amd64.tar.gz <Current_version }_Lux_amd64.tar.gzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzs
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
Wenn saml2aws --version nicht wie beabsichtigt funktioniert, müssen Sie möglicherweise Ihre Terminal -Konfigurationsdatei (wie ~/.bashrc, ~/.profile, ~/.zshrc) aktualisieren, um export PATH="$PATH:$HOME/.local/bin/" am Ende der Datei einzuschließen.
Für U2F -Unterstützung ersetzen Sie die WGet -Zeile oben durch 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
Sie benötigen GO -Tools (Sie können auch Ihren Paketbetrieb überprüfen) installiert und das Go -Lint -Tool
Klonen Sie dieses Repo in Ihr $GOPATH/src -Verzeichnis
Jetzt können Sie durch Ausführen installieren
make
make install
Das saml2aws Tool ist in AUR (SAML2AWS-BIN) erhältlich, sodass Sie es mit einem verfügbaren AUR-Helfer installieren können:
$ pamac build saml2aws-bin Wenn Sie unter void Linux sind, können Sie XBPS verwenden, um das SAML2AWS -Paket zu installieren!
xbps-install saml2aws
saml2aws können Fertigstellungsskripte generieren.
Fügen Sie Ihrem .bash_profile (oder gleichwertig) die folgende Zeile hinzu:
eval " $( saml2aws --completion-script-bash ) " Fügen Sie Ihrem .zshrc (oder gleichwertig) die folgende Zeile hinzu:
eval " $( saml2aws --completion-script-zsh ) " Installieren Sie die AWS CLI Siehe in unserem Fall verwenden wir Homebrew auf 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 Wenn der script -Unterbefehl aufgerufen wird, gibt saml2aws die folgenden temporären Sicherheitsanmeldeinformationen aus:
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 und Fischschalen werden ebenfalls unterstützt. ENV ist nützlich für alle AWS -SDK -kompatiblen Tools, mit denen eine Env -Datei beschrieben werden kann. Es ist eine leistungsstarke Kombination mit Docker und dem Parameter --env-file .
Wenn Sie häufig eval $(saml2aws script) verwenden, möchten Sie möglicherweise einen Alias dafür erstellen:
ZSH:
alias s2a="function(){eval $( $(command saml2aws) script --shell=bash --profile=$@);}"
Bash:
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 Wenn der exec Sub-Command aufgerufen wird, führt saml2aws den als Argument angegebenen Befehl aus: Standardmäßig werden SAML2AWs den Befehl mit TEMP-Anmeldeinformationen ausführen, die über saml2aws login generiert werden.
Das Flag --exec-profile Flag ermöglicht einen Befehl, mithilfe eines AWS-Profils auszuführen, das möglicherweise die Aktionen "Annahme von Rollen" verkettet hat. (über 'Source_Profile' in ~/.aws/config)
options:
--exec-profile Execute the given command utilizing a specific profile from your ~/.aws/config file
Dies ist die neue Methode zum Hinzufügen von IDP -Anbieterkonten. Sie können Konten mit allen Einstellungen, die Ihnen mögen, benannt haben und unterstützt ein Standardkonto , das verwendet wird, wenn Sie das Konto -Flag weglassen. Dies ersetzt das Flag- und die alte Konfigurationsdatei -Provider in 1.x.
So fügen Sie SAML2AWs ein Standard -IDP -Konto hinzu, das den folgenden Befehl ausführen und die Eingabeaufforderungen befolgen.
$ 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
Dann mit diesem Konto anmelden.
saml2aws login
Sie können auch benannte Konten hinzufügen. Im Folgenden finden Sie ein Beispiel, in dem ich ein Konto unter dem wolfeidau -Alias eingerichte, und folgen Sie erneut den Eingabeaufforderungen.
saml2aws configure -a wolfeidau
Sie können den Alias des Kontos auch ohne Eingabeaufforderungen konfigurieren.
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
Dann sind Sie bereit, SAML2AWs zu verwenden.
Melden Sie sich in einem Dienst an (ohne 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).
Melden Sie sich in einen Dienst an (mit 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).
Wenn Sie WSL1 oder WSL2 verwenden, erhalten Sie möglicherweise den folgenden Fehler, wenn Sie versuchen, die Anmeldeinformationen in den Schlüsselbund zu speichern
No such interface “org.freedesktop.DBus.Properties” on object at path /
Dies geschieht, weil das bevorzugte Schlüsselring -Back -End die gnome-keyring standardmäßig verwendet - für X11 - und wenn Sie Windows 11 nicht mit Unterstützung für Linux -GUI -Anwendungen verwenden - kann dies schwierig sein, ohne einen X11 -Vorwärts zu konfigurieren.
Es gibt 2 bevorzugte Ansätze zur Problemumgehung dieses Problems:
Sie können das Flag --disable-keychain Flag anwenden, wenn Sie sowohl die configure als auch die login verwenden. Wenn Sie dieses Flag verwenden, werden Ihre Anmeldeinformationen (z. B. Ihr Passwort zu Ihrem IDP oder bei Okta the Okta Session -Token) nicht in Ihrem Schlüsselbund gespeichert - und werden verlockend übersprungen. Dies bedeutet, dass Sie Ihr Benutzername und Ihr Passwort jedes Mal eingeben müssen, wenn Sie den login aufrufen.
Mit dieser Option sind einige Schritte involviert. Diese Option speichert jedoch Ihre Anmeldeinformationen (z. B. Ihr Passwort für Ihr IDP und Sitzungstoken usw.) in den pass [https://www.passwordstore.org/]. Der pass -Schlüsselring ist der Standard -UNIX -Passwort -Manager. Diese Option war stark von einem ähnlichen Problem in AWS-Vault inspiriert
Um Pass als Standardschlüssel zu konfigurieren, müssen die folgenden Schritte ausgeführt werden (vorausgesetzt, Sie verwenden Ubuntu 20.04 LTS):
sudo apt-get update && sudo apt-get install -y pass gnupggpg --gen-keyDie Ausgabe des GPG -Befehls gibt das ähnliche Ausgang wie folgt aus:
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 > Während des init -Vorgangs werden Sie aufgefordert, die in Schritt 2 bereitgestellte Passphrase einzugeben
saml2aws , um den pass -Schlüsselring zu verwenden. Dies kann durch Einstellen der Umgebungsvariablen SAML2AWS_KEYRING_BACKEND pass . Sie müssen auch die GPG_TTY auf Ihr aktuelles TTY einstellen, sodass Sie die Variable auf "$( tty )" festlegen können.Dies bedeutet, dass das Folgende in Ihr Profil hinzugefügt werden kann
export SAML2AWS_KEYRING_BACKEND=pass
export GPG_TTY="$( tty )"
Konfigurieren mehrerer Konten mit benutzerdefinierter Rolle und Profil in ~/.aws/config Das Ziel ist die Isolierung zwischen Infra -Code bei der Bereitstellung für diese Umgebungen. Dieses Setup geht davon aus, dass Sie separate Rollen verwenden und wahrscheinlich AWS -Konten für dev und test und Tests dabei helfen, den Mitarbeitern von Betrieben zu helfen, versehentlich in komplexen Umgebungen auf das falsche AWS -Konto einzusetzen. Beachten Sie, dass diese Methode die SAML -Authentifizierung in jedem AWS -Konto direkt konfiguriert (in diesem Fall verschiedene AWS -Konten). Im folgenden Beispiel werden separate Authentifizierungswerte für AWS-Konten 'Profil = Customer-dev/awsAccount = war 121234567890' und 'Profil = Customer-Test/AWSAccount = 121234567891' konfiguriert.
Um das Dev -Konto einzurichten, führen Sie die folgenden URL, Benutzernamen und Kennwort ein und weisen Sie eine Standardrolle zu, die automatisch bei der Anmeldung ausgewählt werden kann.
saml2aws configure -a customer-dev --role=arn:aws:iam::121234567890:role/customer-admin-role -p customer-dev
Dies führt zu der folgenden Konfiguration in ~/.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
Um dies zu verwenden, müssen Sie AWS_DEFAULT_PROFILE=customer-dev -Umgebungsvariable in Target dev exportieren.
Um das Testkonto einzurichten, führen Sie die folgenden Ausführungen aus und geben Sie URL, Benutzername und Passwort ein.
saml2aws configure -a customer-test --role=arn:aws:iam::121234567891:role/customer-admin-role -p customer-test
Dies führt zu der folgenden Konfiguration in ~/.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
Um dies zu verwenden, müssen Sie AWS_DEFAULT_PROFILE=customer-test Umgebungsvariable für test exportieren.
Wenn Sie den Browser-Identitätsanbieter verwenden, müssen Sie beim ersten Aufruf von saml2aws login daran denken, die Browser-Treiber zu installieren, damit Dramatiker arbeiten können. Andernfalls werden die folgenden Fehlermeldungen angezeigt:
Error authenticating to IDP.: please install the driver (vx.xx) and browsers first: %!w(<nil>)
Um die Treiber zu installieren, können Sie:
--download-browser-driver zum saml2aws loginSAML2AWS_AUTO_BROWSER_DOWNLOAD=truedownload_browser_driver = true in Ihrer SAML2AWS -Konfigurationsdatei, dh ~/.saml2aws Beispiel: (authentifizieren Sie mein SSO -AWS -Konto. Mit diesem Setup müssen Sie sich nicht erneut authentifizieren. Wir können uns jetzt auf IAM verlassen, um ein Rollenkonto zu übernehmen.
~/.aws/Anmeldeinformationen: #(diese werden von saml2aws login generiert. Legt die SAML -Authentifizierung in das SSO -Konto meiner AWS ein)
[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
(Verwenden Sie AWS-Profile, um eine AWS-Rolle zu übernehmen.
~/.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
SAML2AWs ohne Flagge ausführen:
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)
}
Ausführen von SAML2AWs mit-exec-profile Flag:
Wenn ich '-exec-profile' verwendet, kann ich die Role in ein anderes AWS-Konto einnehmen, ohne neu authentifiziert zu werden. Beachten Sie, dass es nicht neu authentifiziert ist, da wir bereits über das SSO-Konto authentifiziert sind.
saml2aws exec --exec-profile roleIn2ndAwsAccount aws sts get-caller-identity
{
"UserId": "YOOYOOYOOYOOYOOA:/myAccountName",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/myAccountName"
}
Als Beispiel
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"
]
}
}
Es gibt nur wenige zusätzliche Parameter, mit denen die SAML2AWS -Konfiguration angepasst werden kann. Verwenden Sie die folgenden Parameter in der Datei ~/.saml2aws :
http_attempts_count - Konfiguriert die Anzahl der Versuche, HTTP -Anforderungen zu senden, um mit dem SAML -Anbieter zu autorisieren. Standardmäßig 1http_retry_delay - Konfiguriert die Dauer (in Sekunden) der Zeitüberschreitung zwischen Versuchen, HTTP -Anforderungen an den SAML -Anbieter zu senden. Standardmäßig 1region - Konfiguriert, welche Regionendpunkte zu verwenden sind, siehe Publikum und Partitiontarget_url - Suchen Sie nach einem anderen Zielendpunkt als signin.aws.amazon.com/saml. Die OKTA-, Pingfed-, Pingon- und Shibboleth -ECP -Anbieter müssen diese URL entweder explizit in einer Antwort senden oder suchen, um eine geeignete Authentifizierungsantwort zu erhalten oder zu identifizieren. Dies kann hier überschrieben werden, wenn Sie sich für etwas anderes als AWS authentifizieren möchten.Beispiel: Typische Konfiguration mit solchen Parametern würde folgendermaßen aussehen:
[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
Für Keycloak stehen 2 weitere Parameter zur Verfügung, um einen fehlgeschlagenen Authentifizierungsprozess zu beenden.
kc_auth_error_element - Konfiguriert, was das HTTP -Element SAML2AWs in der Authentifizierungsfehlerantworten sucht. Standardmäßig "span#input-eRor" und sucht nach <span id=input-error>xxx</span> . GoQuery wird verwendet. "span#id-name" sucht nach <span id=id-name>xxx</span> . "span.class-name" sucht nach <span class=class-name>xxx</span> .kc_auth_error_message - Funktioniert mit der kc_auth_error_element und konfiguriert, was die HTTP -Nachricht SAML2AWs in Authentifizierungsfehlerantworten sucht. Standardmäßig "Ungültiger Benutzername oder Passwort". und sucht nach <xxx>Invalid username or password.</xxx> . Regelmäßige Ausdrücke werden akzeptiert. Beispiel: Wenn Ihr KeyCloak -Server die Authentifizierungsfehlermeldung "Ungültiger Benutzername oder Kennwort" zurückgibt. In einer anderen Sprache in der <span class=kc-feedback-text>xxx</span> sind diese Parameter wie:
[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."
Wenn Ihr KeyCloak -Server je nach Authentifizierungsfehlertyp eine andere Fehlermeldung zurückgibt, verwenden Sie eine Pipe als Trennzeichen und fügen Sie der kc_auth_error_message mehrere Nachrichten hinzu:
[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."
Um diese Software auf macOS zu erstellen, klonen Sie das Repo auf $GOPATH/src/github.com/versent/saml2aws und stellen Sie sicher, dass Sie $GOPATH/bin in Ihrem $PATH haben. Sie müssen auch Goreleaser installiert.
make mod
Installieren Sie die Binärdatei $GOPATH/bin .
make install
Dann testen Sie die Software einfach aus.
make test
Bevor Sie eine PR anheben, laufen Sie bitte den Linter.
make lint-fix
Um diese Software auf Debian/Ubuntu zu erstellen, müssen Sie eine Build -Abhängigkeit installieren:
sudo apt install libudev-dev
Sie benötigen auch Goreleaser und den binären (oder einen Symlink) in bin/goreleaser .
ln -s $(command -v goreleaser) bin/goreleaser
Dann können Sie bauen:
make build
Der Exec -Subbefehl exportiert die folgenden Umgebungsvariablen.
Hinweis: Diese Profilumgebungsvariablen ermöglichen es Ihnen, exec mit einem Skript oder Befehl zu verwenden, für das ein explizites Profil erforderlich ist.
Dieses Tool wäre ohne einige großartige OpenSource -Bibliotheken nicht möglich.
git tag -as vX.XXmake builddist/ des Projektwurzelverzeichnissesgit push origin vX.XXEs gibt zwei Debugging -Ebenen, emittiert zunächst Debug -Informationen und die URL / Methode / Status -Anforderungen.
saml2aws login --verbose
Der zweite gibt den Inhalt von Anfragen und Antworten aus. Dies enthält mit authentifizierungsbezogenen Informationen. Kopieren Sie sie also nicht und fügen Sie sie in Chat oder Tickets ein!
DUMP_CONTENT=true saml2aws login --verbose
Der Anmeldeinformationsprozess ist eine bequeme Möglichkeit, Anmeldeinformationen mit der AWS CLI zu verbinden.
Sie können saml2aws als Anmeldeinformationsanbieter verwenden, indem Sie es einfach konfigurieren und dann ein Profil zur AWS -Konfiguration hinzufügen. saml2aws verfügt über ein Flag --credential-process das eine Ausgabe mit dem rechten JSON-Format sowie eine --quiet erzeugt, die die Protokollierung von der angezeigten Protokollierung blockiert. Die AWS -Anmeldeinformatdatei (normalerweise ~/.AWs/Anmeldeinformationen) hat Vorrang vor dem Anbieter von Anmeldeinformationen. Das heißt, wenn Anmeldeinformationen in der Datei vorhanden sind, wird der Anmeldeinformationsvorgang nicht ausgelöst. Um zu entgegenzuwirken, können Sie den AWS-Anmeldeinformationsort von saml2aws mit --credential-file oder beim configure in eine andere Datei überschreiben.
Die AWS -Anmeldeinformatdatei (normalerweise ~/.AWs/Anmeldeinformationen) hat Vorrang vor dem Anbieter von Anmeldeinformationen. Das heißt, wenn Anmeldeinformationen in der Datei vorhanden sind, wird der Anmeldeinformationsvorgang nicht ausgelöst.
Ein Beispiel für die AWS -Konfiguration ( ~/.aws/config ):
[profile mybucket]
region = us-west-1
credential_process = saml2aws login --credential-process --role <ROLE> --profile mybucket
Sie können dies manuell oder über die AWSCLI hinzufügen, dh
aws configure set credential_process "saml2aws login --credential-process --role <ROLE> --profile mybucket"
Bei der Verwendung der AWS CLI mit dem mybucket -Profil wird der Authentifizierungsprozess ausgeführt und die AWS wird dann basierend auf den zurückgegebenen Anmeldeinformationen ausgeführt.
Sie können das Flag --cache-saml verwenden, um die SAML-Behauptung zur Authentifizierungszeit zwischenzuspeichern. Der SAML -Assertion -Cache hat eine sehr kurze Gültigkeit (5 min) und kann verwendet werden, um mit einer einzelnen MFA -Validierung mehrere Rollen zu authentifizieren.
Es gibt eine Datei pro SAML2AWS -Profil. Das Cache -Verzeichnis wird als saml2aws bezeichnet und befindet sich in Ihrem .aws -Verzeichnis in Ihrem Benutzer homedir.
Sie können während login oder während list-roles --cache-saml umschalten, und können es während configure einmal festlegen und implizit verwenden.
Dies erfordert die Verwendung des Schlüsselbundes (lokale Anmeldeinformationen Store). Wenn Sie den Schlüsselbund mithilfe von --disable-keychain deaktiviert haben, werden auch Okta-Sitzungen deaktiviert.
Okta -Sitzungen sind standardmäßig aktiviert. Dadurch speichert die OKTA -Sitzung lokal und speichert Ihr Gerät für MFA. Dies bedeutet, dass Sie für MFA nicht aufgefordert werden, wenn die Sitzung noch nicht abgelaufen ist.
--disable-remember-device an das Gerät zu deaktivieren, können Sie während login oder configure Befehle umschalten.--disable-sessions Sitzungen zu deaktivieren, können Sie während login oder configure Befehle umschalten. Verwenden Sie das Flag --force -Flag während login , um die AWS -Rollenauswahl fordern.
Wenn Okta -Sitzungen über eine der oben genannten Methoden deaktiviert werden, stand der Anmeldungsprozess standardmäßig mit dem Standardauthentifizierungsprozess (ohne Sitzungen).
Bitte beachten Sie, dass Ihre OKTA -Sitzungsdauer und Ihre MFA -Richtlinien von Ihrer Okta -Host -Organisation geregelt werden.
Dieser Code ist das Copyright (C) 2024 vergleichbar und veröffentlicht unter der MIT -Lizenz. Alle Rechte, die nicht ausdrücklich in der MIT -Lizenz gewährt werden, sind vorbehalten. Weitere Informationen finden Sie in der mitgelieferten Lizenz.MD -Datei.