gimme-aws-creds ist eine CLI, die einen Okta-IdP über SAML nutzt, um temporäre AWS-Anmeldeinformationen über AWS STS zu erhalten.
Okta ist ein SAML-Identitätsanbieter (IdP), der einfach für SSO mit Ihrer AWS-Konsole eingerichtet werden kann. Okta bietet zwar ein OSS-Java-CLI-Tool an, um temporäre AWS-Anmeldeinformationen zu erhalten, aber ich habe festgestellt, dass es mehr Informationen benötigt, als der durchschnittliche Okta-Benutzer haben würde, und sich nicht gut skalieren lässt, wenn er mehr als eine Okta-App hat.
Bei gimme-aws-creds müssen Sie lediglich Ihren Benutzernamen, Ihr Passwort, Ihre Okta-URL und Ihr MFA-Token kennen, sofern MFA aktiviert ist. gimme-aws-creds bietet Ihnen die Möglichkeit auszuwählen, für welche Okta AWS-Anwendung und -Rolle Sie Anmeldeinformationen benötigen. Alternativ können Sie die App und den Rollennamen vorkonfigurieren, indem Sie -c übergeben oder die Konfigurationsdatei bearbeiten. Dies alles wird im Abschnitt „Nutzung“ behandelt.
Okta ist eine eingetragene Marke von Okta, Inc. und dieses Tool steht in keiner Verbindung zu oder wird von Okta, Inc. gesponsert.
Okta SAML-Integration in AWS mithilfe der AWS-App
Python 3.7+
gimme-aws-creds
ist für die WebAuthn-Unterstützung auf die Bibliothek ctap-keyring-device angewiesen. Alle veröffentlichten Versionen von ctap-keyring-device erfordern winRT unter Windows, das nur unter Python 3.9 und niedriger funktioniert und nicht mehr gepflegt wird. Bis eine Version von ctap-keyring-device, die winSDK
(den Ersatz für winRT) unterstützt, für PyPi veröffentlicht wird oder eine andere Lösung gefunden wird, ist die WebAuthn-Unterstützung für Benutzer, die Python 3.10+ unter Windows ausführen, nicht verfügbar.
Gimme-creds-lambda kann als Proxy für die von gimme-aws-creds benötigten Okta-APIs verwendet werden. Dadurch entfällt die Anforderung eines Okta-API-Schlüssels. Gimme-aws-creds authentifiziert sich bei gimme-creds-lambda mithilfe von OpenID Connect und das Lambda verarbeitet alle Interaktionen mit den Okta-APIs. Alternativ können Sie die Umgebungsvariable OKTA_API_KEY
und den Konfigurationswert gimme_creds_server
auf „internal“ setzen, um die Okta-APIs direkt von gimme-aws-creds aus aufzurufen.
Dies ist ein Python 3-Projekt.
Installation/Upgrade von PyPi:
pip3 install --upgrade gimme-aws-creds
ODER
Installieren/aktualisieren Sie das neueste gimme-aws-creds-Paket direkt von GitHub:
pip3 install --upgrade git+git://github.com/Nike-Inc/gimme-aws-creds.git
ODER
Installieren Sie das Paket gimme-aws-creds, wenn Sie die Quelle bereits geklont haben:
python -m pip install .
ODER
Verwenden Sie Homebrew
brew install gimme-aws-creds
ODER
Mit Nix-Flocken verwenden
# flake.nix
# Use by running `nix develop`
{
description = " Shell example " ;
inputs.flake-utils.url = " github:numtide/flake-utils " ;
inputs.nixpkgs.url = " github:nixos/nixpkgs/nixos-unstable " ;
inputs.gimme-aws-creds.url = " github:Nike-Inc/gimme-aws-creds " ;
outputs = {
self,
nixpkgs,
flake-utils,
gimme-aws-creds,
...
} @ inputs:
flake-utils.lib.eachDefaultSystem
(
system: let
pkgs = nixpkgs.legacyPackages. ${system} ;
in {
devShells.default = pkgs.mkShell {
packages = [pkgs.bash gimme-aws-creds.defaultPackage. ${system} ] ;
} ;
}
) ;
}
ODER
Verwendung mit Original-Nix
# shell.nix
# Use by running `nix-shell`
{pkgs ? import < nixpkgs > {}, ...}:
with pkgs ; let
gimme-src = fetchgit {
name = " gimme-aws-creds " ;
url = " https://github.com/Nike-Inc/gimme-aws-creds " ;
branchName = " master " ;
sha256 = " " ; # nix-prefetch-url --unpack https://github.com/Nike-Inc/gimme-aws-creds/archive/master.tar.gz
} ;
gimme-aws-creds = import gimme-src ;
in
mkShell rec {
name = " gimme-aws-creds " ;
buildInputs = [
bash
(gimme-aws-creds.default)
] ;
}
ODER
Erstellen Sie das Docker-Image lokal:
docker build -t gimme-aws-creds .
Zur Vereinfachung können Sie mit Docker auch einen Alias für den Befehl gimme-aws-creds erstellen:
# make sure you have the "~/.okta_aws_login_config" locally first!
touch ~ /.okta_aws_login_config &&
alias gimme-aws-creds= " docker run -it --rm
-v ~/.aws/credentials:/root/.aws/credentials
-v ~/.okta_aws_login_config:/root/.okta_aws_login_config
gimme-aws-creds "
Mit dieser Konfiguration können Sie weitere Befehle nahtlos ausführen!
Wenn Sie Bash oder Zsh verwenden, können Sie eine automatische Vervollständigung für die Befehlszeilenoptionen und Profilnamen von gimme-aws-creds hinzufügen. Um die Autovervollständigungskonfiguration hinzuzufügen, fügen Sie am Ende Ihrer .bashrc- oder .zshrc-Datei Folgendes hinzu:
.bashrc
INSTALL_DIR= $( dirname $( which gimme-aws-creds ) )
source ${INSTALL_DIR} /gimme-aws-creds-autocomplete.sh "
.zshrc
INSTALL_DIR= $( dirname $( which gimme-aws-creds ) )
autoload bashcompinit
bashcompinit
source ${INSTALL_DIR} /gimme-aws-creds-autocomplete.sh
Es gibt zwei Möglichkeiten, gimme-aws-creds mit einer OIE-Domain zu verwenden:
Dies ist die empfohlene Methode zur Authentifizierung mit OIE. Es entspricht dem vom AWS-Client von Okta verwendeten Ablauf. Wenn Sie gimme-aws-creds mit dem Geräteautorisierungsablauf verwenden, authentifizieren Sie sich über Ihren Browser. Das Speichern von Anmeldeinformationen im Schlüsselbund oder die Weitergabe von MFA-Codes über die Befehlszeile ist NICHT MÖGLICH.
Um gimme-aws-creds mit einer Okta Identity Engine (OIE)-Domäne zu verwenden, müssen Sie eine neue native OIDC-Anwendung erstellen und diese mit Ihren AWS-Integrations-App(s) verbinden.
Die native OIDC-Anwendung erfordert die Grant-Typen Authorization Code
, Device Authorization
und Token Exchange
. Diese Einstellungen finden Sie in der Okta-Admin-Benutzeroberfläche unter Applications > [the OIDC app] > General Settings > Grant type
.
Die Kopplung mit der AWS Federation-Anwendung erfolgt in den Anmeldeeinstellungen der Fed-App. Diese Einstellungen finden Sie in der Okta-Admin-Benutzeroberfläche unter Applications > [the AWS Fed app] > Sign On
. Stellen Sie sicher, dass der Wert „ Allowed Web SSO Client
auf die Client-ID der nativen OIDC-Anwendung festgelegt ist. Wiederholen Sie diese Einstellung für jede AWS-Anwendung, auf die Sie mit gimme-aws-creds zugreifen möchten.
Legen Sie abschließend die Client-ID in gimme-aws-creds fest ( gimme-aws-creds --action-configure
oder aktualisieren Sie den Parameter client_id
in Ihrer Konfigurationsdatei).
Stellen Sie sicher, dass Sie für die AWS Federation-Anwendung und die OIDC-Anwendung dieselbe Authentifizierungsrichtlinie verwenden (oder verwenden Sie zumindest für beide gleichwertige Richtlinienregeln). Wenn nicht, erhalten Sie beim Anfordern des Web-SSO-Tokens die Antwort 400 Bad Request
.
Der in Okta Classic verwendete Anmeldeablauf funktioniert derzeit noch mit Okta Identity Engine-Domänen, ABER es gibt ein paar Einschränkungen:
stateToken
Parameter, wenn er eine „Step-Up“-Authentifizierung anfordert. Diese Funktion wurde in OIE entfernt. Wenn also die Authentifizierungsrichtlinie Ihrer AWS-App(s) MFA erfordert, die globale Sitzungsrichtlinie jedoch nicht (oder wenn für den Zugriff auf AWS ein höherer MFA-Faktor erforderlich ist), können Sie sich nicht mit der klassischen Authentifizierung authentifizieren Anmeldefluss.So richten Sie den Konfigurationslauf ein:
gimme-aws-creds --action-configure
Sie können auch verschiedene Okta-Konfigurationsprofile einrichten. Dies ist nützlich, wenn Sie über mehrere Okta-Konten oder Umgebungen verfügen, für die Sie Anmeldeinformationen benötigen. Sie können den Konfigurationsassistenten verwenden oder Folgendes ausführen:
gimme-aws-creds --action-configure --profile profileName
Ein Konfigurationsassistent fordert Sie auf, die notwendigen Konfigurationsparameter einzugeben, damit das Tool ausgeführt werden kann. Der einzige erforderliche Parameter ist okta_org_url
. Die Konfigurationsdatei wird in ~/.okta_aws_login_config
geschrieben, aber Sie können den Speicherort mit der Umgebungsvariablen OKTA_CONFIG
ändern.
https://companyname.okta.com
lautet.OKTA_API_KEY
erforderlich)~/.aws/credentials
geschrieben, andernfalls werden sie in stdout geschrieben.role
verwendet die Namenskomponente der Rolle „arn“ als Profilnamen. Das heißt, arn:aws:iam::123456789012:role/okta-1234-role wird zum Abschnitt [okta-1234-role] in der AWS-Anmeldeinformationsdateiacc
verwendet die Kontonummer (oder den Alias, wenn resolve_aws_alias
auf „y“ gesetzt ist) als Profilnamen. Das heißt, arn:aws:iam::123456789012:role/okta-1234-role wird zum Abschnitt [arn:aws:iam::123456789012] oder wenn resolve_aws_alias
[okta-1234-role] in der AWS-Anmeldeinformationsdatei.acc-role
verwendet die Namenskomponente der Rolle „arn“ mit vorangestellter Kontonummer (oder einen Alias, wenn resolve_aws_alias
auf „y“ gesetzt ist), um Kollisionen zu vermeiden, z. B. „arn:aws:iam::123456789012:role/okta-1234-role“. wird zum Abschnitt [123456789012-okta-1234-role], oder wenn resolve_aws_alias
[okta-1234-role] in der AWS-Anmeldeinformationsdateidefault
werden die temporären Anmeldedaten im Standardprofil gespeichertdefault
ausgewählt ist, wird sie mehrmals überschrieben und die letzte Rolle hat Vorrang. Das Gleiche passiert, wenn role
ausgewählt ist und Sie viele Konten mit denselben Rollennamen haben. Erwägen Sie in diesem Fall die Verwendung von acc-role
.OKTA_MFA_CODE
oder --mfa-code
, falls festgelegt, oder fordert den Benutzer zur Eingabe des Passcodes (OTP) auf.Duo Push
(Standard)Passcode
Phone Call
-r
oder --resolve
festgelegt werdeny
: -/some/path/administrator
. Wenn n
: -administrator
-m
oder --remember-device
gesetzt werdenjson
, export
oder windows
, bestimmt das Standard-Ausgabeformat für Anmeldeinformationen, kann auch durch --output-format FORMAT
und -o FORMAT
angegeben werden.Die Konfigurationsdatei folgt einem Konfigurationsdateiformat. Standardmäßig befindet es sich in $HOME/.okta_aws_login_config
Beispieldatei:
[myprofile]
client_id = myclient_id
Konfigurationen können von anderen Konfigurationen erben, um gemeinsame Konfigurationsparameter zu nutzen.
[my-base-profile]
client_id = myclient_id
[myprofile]
inherits = my-base-profile
aws_rolename = my-role
Wenn Sie weder gimme-creds-lambda noch appurl-Einstellungen verwenden, stellen Sie sicher, dass Sie die Umgebungsvariable OKTA_API_KEY festlegen.
Führen Sie nach dem Ausführen von --action-configure einfach gimme-aws-creds aus. Sie werden zur Eingabe der erforderlichen Informationen aufgefordert.
$ ./gimme-aws-creds
Username: [email protected]
Password for [email protected]:
Authentication Success ! Calling Gimme-Creds Server...
Pick an app:
[ 0 ] AWS Test Account
[ 1 ] AWS Prod Account
Selection: 1
Pick a role:
[ 0 ]: OktaAWSAdminRole
[ 1 ]: OktaAWSReadOnlyRole
Selection: 1
Multi-factor Authentication required.
Pick a factor:
[ 0 ] Okta Verify App: SmartPhone_IPhone: iPhone
[ 1 ] token:software:totp: [email protected]
Selection: 0
Okta Verify push sent...
export AWS_ACCESS_KEY_ID=AQWERTYUIOP
export AWS_SECRET_ACCESS_KEY=T ! # $JFLOJlsoddop1029405-P
Sie können die Erstellung von Umgebungsvariablen automatisieren, indem Sie $(gimme-aws-creds)
unter Linux oder gimme-aws-creds | iex
ausführen gimme-aws-creds | iex
mit Windows Powershell
Sie können ein bestimmtes Konfigurationsprofil mit dem Parameter --profile
ausführen:
./gimme-aws-creds --profile profileName
Der Benutzername und das Passwort, nach denen Sie gefragt werden, sind diejenigen, mit denen Sie sich bei Okta anmelden. Sie können Ihren Benutzernamen vordefinieren, indem Sie die Umgebungsvariable OKTA_USERNAME
festlegen oder den Parameter -u username
verwenden.
Wenn Sie keine Okta-App oder -Rolle konfiguriert haben, werden Sie aufgefordert, eine auszuwählen.
Wenn alles gut geht, erhalten Sie Ihren temporären AWS-Zugriff, den geheimen Schlüssel und das Token. Diese werden entweder nach stdout oder ~/.aws/credentials
geschrieben.
Sie können jederzeit gimme-aws-creds --help
für alle verfügbaren Optionen ausführen.
Alternativ können Sie Werte im Konfigurationsabschnitt mit Umgebungsvariablen überschreiben, wenn Sie beispielsweise die Gültigkeitsdauer Ihres Tokens ändern möchten. Eine Liste der Werte, die mit Umgebungsvariablen geändert werden sollen, ist:
AWS_DEFAULT_DURATION
– entspricht der aws_default_duration
KonfigurationAWS_SHARED_CREDENTIALS_FILE
– Datei, in die Anmeldeinformationen geschrieben werden sollen, verweist standardmäßig auf ~/.aws/credentials
GIMME_AWS_CREDS_CLIENT_ID
– entspricht der client_id
KonfigurationGIMME_AWS_CREDS_CRED_PROFILE
– entspricht der cred_profile
-KonfigurationGIMME_AWS_CREDS_OUTPUT_FORMAT
– entspricht der Konfiguration output_format
und der CLI-Option --output-format
.OKTA_AUTH_SERVER
– entspricht der okta_auth_server
-KonfigurationOKTA_DEVICE_TOKEN
– entspricht der device_token
Konfiguration, kann in CI verwendet werdenOKTA_MFA_CODE
– entspricht der CLI-Option --mfa-code
OKTA_PASSWORD
– stellt das Passwort während der Authentifizierung bereit, kann in CI verwendet werdenOKTA_USERNAME
– entspricht der okta_username
-Konfiguration und der CLI-Option --username
AWS_STS_REGION
– erzwingt die Verwendung des STS in einer bestimmten Region ( us-east-1
, eu-north-1
usw.) Beispiel: GIMME_AWS_CREDS_CLIENT_ID='foobar' AWS_DEFAULT_DURATION=12345 gimme-aws-creds
Um darüber hinausgehende Variablen zu ändern, müssten Sie mit gimme-aws-creds --action-configure --profile profileName
ein separates Profil erstellen
gimme-aws-creds --action-list-profiles
geht zu Ihrer Okta-Konfigurationsdatei und druckt alle erstellten Profile und ihre Einstellungen aus.
gimme-aws-creds --action-list-roles
gibt alle verfügbaren Rollen auf STDOUT aus, ohne ihre Anmeldeinformationen abzurufen.
Beim Schreiben in die AWS-Anmeldeinformationsdatei wird der Wert x_security_token_expires
im RFC3339-Format enthalten. Dadurch können Tools überprüfen, ob die Anmeldeinformationen ablaufen oder bald ablaufen, und den Benutzer warnen oder eine Aktualisierung auslösen.
gimme-aws-creds -o json
druckt Anmeldeinformationen im JSON-Format aus – 1 Eintrag pro Zeile
gimme-aws-creds --action-store-json-creds
speichert JSON-formatierte Anmeldeinformationen von stdin
in der AWS-Anmeldeinformationsdatei, z. B.: gimme-aws-creds -o json | gimme-aws-creds --action-store-json-creds
. Daten können unterwegs durch Skripte geändert werden.
Konfiguration und Interaktionen können mit gimme_aws_creds.ui
konfiguriert werden. UserInterfaces unterstützen alle Arten von Interaktionen innerhalb der Bibliothek, einschließlich: Eingabeaufforderung, sys.argv
und os.environ
-Überschreibungen.
import sys
import gimme_aws_creds . main
import gimme_aws_creds . ui
account_ids = sys . argv [ 1 :] or [
'123456789012' ,
'120123456789' ,
]
pattern = "|" . join ( sorted ( set ( account_ids )))
pattern = '/:({}):/' . format ( pattern )
ui = gimme_aws_creds . ui . CLIUserInterface ( argv = [ sys . argv [ 0 ], '--roles' , pattern ])
creds = gimme_aws_creds . main . GimmeAWSCreds ( ui = ui )
# Print out all selected roles:
for role in creds . aws_selected_roles :
print ( role )
# Generate credentials overriding profile name with `okta-`
for data in creds . iter_selected_aws_credentials ():
arn = data [ 'role' ][ 'arn' ]
account_id = None
for piece in arn . split ( ':' ):
if len ( piece ) == 12 and piece . isdigit ():
account_id = piece
break
if account_id is None :
raise ValueError ( "Didn't find aws_account_id (12 digits) in {}" . format ( arn ))
data [ 'profile' ][ 'name' ] = 'okta-{}' . format ( account_id )
creds . write_aws_creds_from_data ( data )
gimme-aws-creds funktioniert sowohl auf FIDO1-aktivierten Organisationen als auch auf WebAuthN-aktivierten Organisationen
Beachten Sie, dass FIDO1 wahrscheinlich in naher Zukunft veraltet sein wird, da die Standards auf WebAuthN umgestellt werden
WebAuthN-Unterstützung ist für USB-Sicherheitsschlüssel verfügbar (gimme-aws-creds basiert auf der Yubico Fido2-Bibliothek).
Um Ihren lokalen Computer zusammen mit Touch ID oder Windows Hello (falls verfügbar) als Authentifikator zu verwenden, müssen Sie einen neuen Authentifikator über gimme-aws-creds registrieren, indem Sie Folgendes verwenden:
gimme-aws-creds --action-setup-fido-authenticator
Anschließend können Sie den neu registrierten Authentifikator aus der Faktorenliste auswählen.
Sie können alle Komponententests mit Pytest ausführen. Bei den meisten Tests handelt es sich um Spott.
pytest -vv tests
Dieses Projekt wird von Eric Pierce betreut
Ich bin auf okta_aws_login von Joe Keegan gestoßen, als ich nach einem CLI-Tool suchte, das AWS-Tokens über Okta generiert. Leider wurde es seit 2015 nicht mehr aktualisiert und schien mit der aktuellen Okta-Version nicht zu funktionieren. Aber es gab immer noch großartigen Code, den ich unter der MIT-Lizenz für gimme-aws-creds wiederverwenden konnte. Ich habe in den Kommentaren vermerkt, wo ich seinen Code verwendet habe, um sicherzustellen, dass er die richtige Anerkennung erhält.
okta-aws-cli
okta-aws-cli-assume-role
AWS – So implementieren Sie Federated API und CLI-Zugriff mithilfe von SAML 2.0 und AD FS
Gimme AWS Creds wird unter der Apache-Lizenz, Version 2.0, veröffentlicht