
Herramienta CLI que le permite iniciar sesión y recuperar las credenciales temporales de AWS utilizando con ADF o proveedores de identidad de Pingfederado.
Esto se basa en el código de Python desde cómo implementar una solución general para el acceso API/CLI federado utilizando SAML 2.0.
El proceso es algo como esto:
saml2aws scriptsaml2aws execAdemás de Okta, la mayoría de los proveedores en este proyecto están utilizando el raspado de pantalla para registrar a los usuarios en SAML, esto no es ideal y, con suerte, los proveedores lo hacen más fácil en el futuro. Además de esto, hay algunas cosas que debes saber:
--session-duration .AWS_STS_REGIONAL_ENDPOINTS a regional cuando llame saml2aws para que AWS-SDK-Go use un punto final Regional STS en lugar del global. Vea la nota en la parte inferior de la firma de solicitudes AWS API y los puntos finales regionalizados de AWS STS. ¡Si estás en macOS, puedes instalar SamL2AWS usando HomeBrew!
brew install saml2aws
saml2aws --version
¡Si está en Windows, puede instalar SamL2AWS con Chocolatey!
choco install saml2aws
saml2aws --version
Mientras Brew está disponible para Linux, también puede ejecutar lo siguiente sin usar un Administrador de paquetes.
Algunos usuarios de Ubuntu han informado de problemas con la instrucción de instalación de otros e informaron lo siguiente a trabajar (puede requerirse usando el comando sudo como para la función "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
Para el soporte U2F, reemplace la línea WGet arriba con 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 no funciona según lo previsto, es posible que deba actualizar su archivo de configuración de terminal (como ~/.bashrc, ~/.profile, ~/.zshrc) para incluir export PATH="$PATH:$HOME/.local/bin/" al final del archivo.
Para el soporte U2F, reemplace la línea WGET arriba con 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
Necesitará herramientas GO (también puede verificar su mantenedor de paquetes) y la herramienta GO Lint Lint
Clone este repositorio a su directorio $GOPATH/src
Ahora puedes instalar ejecutando
make
make install
La herramienta saml2aws está disponible en AUR (SAML2AWS-Bin), por lo que puede instalarla utilizando un Aur Helper disponible:
$ pamac build saml2aws-bin ¡Si está en Void Linux, puede usar XBPS para instalar el paquete Saml2AWS!
xbps-install saml2aws
saml2aws puede generar scripts de finalización.
Agregue la siguiente línea a su .bash_profile (o equivalente):
eval " $( saml2aws --completion-script-bash ) " Agregue la siguiente línea a su .zshrc (o equivalente):
eval " $( saml2aws --completion-script-zsh ) " Instale el AWS CLI ver, en nuestro caso, estamos usando Homebrew en 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 se llama al submand script , saml2aws generará las siguientes credenciales de seguridad temporales:
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 y Fish Shells también son soportados. Env es útil para todas las herramientas compatibles con AWS SDK que pueden obtener un archivo ENV. Es un combo poderoso con Docker y el parámetro --env-file .
Si usa eval $(saml2aws script) con frecuencia, es posible que desee crear un alias para ello:
ZSH:
alias s2a="function(){eval $( $(command saml2aws) script --shell=bash --profile=$@);}"
intento:
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 se llama al sub-comando exec , saml2aws ejecutará el comando dado como un argumento: por defecto, SAML2AWS ejecutará el comando con credenciales TEMP generadas a través del saml2aws login .
El indicador --exec-profile permite que un comando ejecute usando un perfil de AWS que puede haber encadenado las acciones de "asumir el rol". (a través de 'Source_Profile' en ~/.aws/config)
options:
--exec-profile Execute the given command utilizing a specific profile from your ~/.aws/config file
Esta es la nueva forma de agregar cuentas del proveedor IDP, le permite haber nombrado cuentas con cualquier configuración que desee y admite tener una cuenta predeterminada que se usa si omite el indicador de la cuenta. Esto reemplaza el indicador --Provider y el archivo de configuración anterior en 1.x.
Para agregar una cuenta IDP predeterminada a SAML2AWS, simplemente ejecute el siguiente comando y siga las indicaciones.
$ 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
Luego para iniciar sesión usando esta cuenta.
saml2aws login
También puede agregar cuentas con nombre, a continuación se muestra un ejemplo en el que estoy configurando una cuenta bajo el alias wolfeidau , nuevamente, solo siga las indicaciones.
saml2aws configure -a wolfeidau
También puede configurar el alias de cuenta sin indicaciones.
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
Entonces estás listo para usar saml2aws.
Inicie sesión en un servicio (sin 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).
Inicie sesión en un servicio (con 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 está utilizando WSL1 o WSL2, puede obtener el siguiente error al intentar guardar las credenciales en el llavero
No such interface “org.freedesktop.DBus.Properties” on object at path /
Esto sucede porque el back -end preferido de Keyring, utiliza el gnome-keyring de forma predeterminada, que requiere X11, y si no está utilizando Windows 11 con soporte para aplicaciones GUI de Linux, esto puede ser difícil sin configurar un X11 hacia adelante.
Hay 2 enfoques preferidos para solucionar este problema:
Puede aplicar el indicador --disable-keychain cuando use los comandos configure e login . Usar este indicador significa que sus credenciales (como su contraseña a su IDP, o en el caso de OKTA, el token de sesión de OKTA) no se guardará en su llavero, y se omitirá de manera entera. Esto significa que deberá ingresar su nombre de usuario y contraseña cada vez que invoca el comando login .
Hay algunos pasos involucrados con esta opción: sin embargo, esta opción guardará sus credenciales (como su contraseña a su IDP y tokens de sesión, etc.) en la tecla pass [https://www.passwordstore.org/]. La llave pass es el administrador de contraseñas UNIX estándar. Esta opción se inspiró fuertemente en un problema similar en AWS-Vault
Para configurar el pase para ser el llavero predeterminado, deberán completarse los siguientes pasos (suponiendo que esté utilizando Ubuntu 20.04 LTS):
sudo apt-get update && sudo apt-get install -y pass gnupggpg --gen-keyLa salida del comando GPG emitirá algo similar a lo siguiente:
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 > Durante el proceso init se le solicitará que ingrese la frase de pases proporcionada en el paso 2
saml2aws para usar la llave pass . Esto se puede hacer configurando la variable de entorno SAML2AWS_KEYRING_BACKEND para ser pass . También deberá establecer el GPG_TTY en su TTY actual, lo que significa que puede establecer la variable en "$( tty )"lo que significa que lo siguiente se puede agregar a su perfil
export SAML2AWS_KEYRING_BACKEND=pass
export GPG_TTY="$( tty )"
Configuración de múltiples cuentas con rol y perfil personalizados en ~/.aws/config con objetivo es el aislamiento entre el código infra cuando se implementa en estos entornos. Esta configuración supone que está utilizando roles separados y probablemente AWS cuentas para dev y test y está diseñado para ayudar al personal de operaciones a evitar implementar accidentalmente la cuenta de AWS incorrecta en entornos complejos. Tenga en cuenta que este método configura directamente la autenticación SAML en cada cuenta de AWS (en este caso, diferentes cuentas de AWS). En el siguiente ejemplo, los valores de autenticación separados se configuran para el perfil de las cuentas de AWS = Customer-Dev/AWSACCount = fue 121234567890 'y' perfil = Customer-test/awsacCount = 121234567891 '
Para configurar la cuenta de desarrollo, ejecute lo siguiente e ingrese URL, nombre de usuario y contraseña, y asigne un rol estándar que se seleccione automáticamente al inicio de sesión.
saml2aws configure -a customer-dev --role=arn:aws:iam::121234567890:role/customer-admin-role -p customer-dev
Esto dará como resultado la siguiente configuración en ~/.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
Para usar esto, necesitará exportar AWS_DEFAULT_PROFILE=customer-dev Environment Variable a Target dev .
Para configurar la cuenta de prueba, ejecute lo siguiente e ingrese URL, nombre de usuario y contraseña.
saml2aws configure -a customer-test --role=arn:aws:iam::121234567891:role/customer-admin-role -p customer-test
Esto da como resultado la siguiente configuración en ~/.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
Para usar esto, necesitará exportar AWS_DEFAULT_PROFILE=customer-test Environment Variable a Target test .
Si está utilizando el proveedor de identidad del navegador, en la primera invocación del saml2aws login , debe recordar instalar los controladores del navegador para que el dramaturgo-go funcione. De lo contrario, verá el siguiente mensaje de error:
Error authenticating to IDP.: please install the driver (vx.xx) and browsers first: %!w(<nil>)
Para instalar los controladores, puede:
--download-browser-driver a saml2aws loginSAML2AWS_AUTO_BROWSER_DOWNLOAD=truedownload_browser_driver = true en su archivo de configuración Saml2aws, es decir, ~/.saml2aws Ejemplo: (autenticar en mi cuenta de AWS 'SSO'. Con esta configuración, no hay necesidad de autenticarse nuevamente. Ahora podemos confiar en IAM para asumir una cuenta cruzada de roles)
~/.aws/credenciales: #(estos son generados por saml2aws login . Establece la autenticación SAML en la cuenta de mi AWS 'SSO')
[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
(Use los perfiles de AWS para asumir una cuenta cruzada de rol de AWS) (tenga en cuenta que el "Source_Profile" está configurado en SAML, que es mi cuenta SSO AWS ya que ya está autenticada)
~/.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
Ejecutando Saml2AWS sin la bandera de perfil-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)
}
Ejecutando Saml2AWS con la bandera --exec-Profile:
Al usar '--exec-perfil', puedo asumir el rol en una cuenta de AWS diferente sin volver a autorizar. Tenga en cuenta que no vuelve a autorenticar ya que ya estamos autenticados a través de la cuenta SSO.
saml2aws exec --exec-profile roleIn2ndAwsAccount aws sts get-caller-identity
{
"UserId": "YOOYOOYOOYOOYOOA:/myAccountName",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/myAccountName"
}
Como ejemplo
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"
]
}
}
Hay pocos parámetros adicionales que permitan personalizar la configuración de SAML2AWS. Use los siguientes parámetros en el archivo ~/.saml2aws :
http_attempts_count : configura el número de intentos de enviar solicitudes HTTP para autorizar con el proveedor SAML. Predeterminado a 1http_retry_delay : configura la duración (en segundos) del tiempo de espera entre los intentos de enviar solicitudes HTTP al proveedor SAML. Predeterminado a 1region : configura qué puntos finales de región usar, ver audiencia y particióntarget_url : busque un punto final de destino que no sea Signin.aws.amazon.com/saml. Los proveedores OKTA, Pingfed, Pingone y Shibboleth ECP deben enviar explícitamente o buscar esta URL en una respuesta para obtener o identificar una respuesta de autenticación adecuada. Esto se puede anular aquí si desea autenticarse para algo más que AWS.Ejemplo: la configuración típica con tales parámetros se vería a continuación:
[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
Para KeyCloak, hay 2 parámetros más disponibles para finalizar un proceso de autenticación fallido.
kc_auth_error_element - Configura lo que el elemento HTTP SAML2AWS busca en las respuestas de error de autenticación. El valor predeterminado es "Span#Input-error" y busca <span id=input-error>xxx</span> . Se usa la amante. "Span#id-name" busca <span id=id-name>xxx</span> . "span.class-name" busca <span class=class-name>xxx</span> .kc_auth_error_message : funciona con kc_auth_error_element y configura lo que el mensaje HTTP Saml2aWs busca en las respuestas de error de autenticación. El valor predeterminado es "nombre de usuario o contraseña no válidos". y busca <xxx>Invalid username or password.</xxx> . Se aceptan expresiones regulares. Ejemplo: si su servidor KeyCloak devuelve el mensaje de error de autenticación "Nombre de usuario o contraseña no válidos". En un lenguaje diferente en el elemento <span class=kc-feedback-text>xxx</span> , estos parámetros se verían como:
[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 su servidor KeyCloak devuelve un mensaje de error diferente dependiendo de un tipo de error de autenticación, use una tubería como separador y agregue múltiples mensajes al 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."
Para construir este software en MacOS, clone el repositorio a $GOPATH/src/github.com/versent/saml2aws y asegúrese de tener $GOPATH/bin en su $PATH . También necesitará instalado Gorelease.
make mod
Instale el binario a $GOPATH/bin .
make install
Luego para probar el software simplemente se ejecuta.
make test
Antes de elevar un PR, ejecute el enlace.
make lint-fix
Para construir este software en Debian/Ubuntu, debe instalar una dependencia de compilación:
sudo apt install libudev-dev
También necesita instalación de Goreleaser, y el binario (o un enlace simbólico) en bin/goreleaser .
ln -s $(command -v goreleaser) bin/goreleaser
Entonces puedes construir:
make build
El comando Sub Exec exportará las siguientes variables de entorno.
Nota: que las variables de entorno de perfil le permiten usar exec con un script o comando que requiere un perfil explícito.
Esta herramienta no sería posible sin algunas grandes bibliotecas de OpenSource.
git tag -as vX.XXmake builddist/ del Directorio Root del Proyectogit push origin vX.XXHay dos niveles de depuración, primero emite información de depuración y la línea de solicitudes de URL / Método / Estado.
saml2aws login --verbose
El segundo emite el contenido de solicitudes y respuestas, esto incluye información relacionada con la autenticación, ¡así que no lo copie y pegue en chat o boletos!
DUMP_CONTENT=true saml2aws login --verbose
El proceso de credencial es una forma conveniente de interactuar a los proveedores de credenciales con la AWS CLI.
Puede usar saml2aws como proveedor de credenciales simplemente configurándolo y luego agregando un perfil a la configuración de AWS. saml2aws tiene un indicador --credential-process que genera una salida con el formato JSON correcto, así como un --quiet que bloqueará el registro de que se muestre. El archivo de credencial de AWS (típicamente ~/.aws/credenciales) tiene prioridad sobre el proveedor Credential_Process. Eso significa que si las credenciales están presentes en el archivo, el proceso de credencial no se activará. Para contrarrestar que puede anular la ubicación de la credencial de AWS de saml2aws a otro archivo utilizando: --credential-file o especificándolo durante configure .
El archivo de credencial de AWS (típicamente ~/.aws/credenciales) tiene prioridad sobre el proveedor Credential_Process. Eso significa que si las credenciales están presentes en el archivo, el proceso de credencial no se activará.
Un ejemplo de la configuración de AWS ( ~/.aws/config ):
[profile mybucket]
region = us-west-1
credential_process = saml2aws login --credential-process --role <ROLE> --profile mybucket
Puedes agregar esto manualmente o a través del awscli, es decir
aws configure set credential_process "saml2aws login --credential-process --role <ROLE> --profile mybucket"
Al usar la AWS CLI con el perfil mybucket , el proceso de autenticación se ejecutará y el AWS se ejecutará en función de las credenciales devueltas.
Puede usar la bandera --cache-saml para almacenar en caché de la afirmación SAML en el momento de la autenticación. El caché de afirmación SAML tiene una validez muy corta (5 min) y puede usarse para autenticarse con varios roles con una sola validación de MFA.
Hay un archivo por perfil SAML2AWS, el directorio de caché se llama saml2aws y se encuentra en su directorio .aws en su usuario Homedir.
Puede alternar --cache-saml durante login o durante list-roles , y puede configurarlo una vez durante configure y usarlo implícitamente.
Esto requiere el uso del llavero (tienda de credenciales locales). Si deshabilitó el llavero usando --disable-keychain , Okta Sessions también se deshabilitará.
Las sesiones OKTA están habilitadas de forma predeterminada. Esto almacenará la sesión OKTA localmente y guardará su dispositivo para MFA. Esto significa que si la sesión aún no ha expirado, no se le solicitará MFA.
--disable-remember-device durante login o configure los comandos.--disable-sessions durante login o configure los comandos. Use el indicador --force durante el comando login para solicitar la selección de roles de AWS.
Si las sesiones de OKTA se deshabilitan a través de cualquiera de los métodos mencionados anteriormente, el proceso de inicio de sesión predeterminará el proceso de autenticación estándar (sin usar sesiones).
Tenga en cuenta que sus políticas de duración de la sesión de OKTA y MFA se rigen por su organización anfitriona de OKTA.
Este código es Copyright (C) 2024 Versent y publicado bajo la licencia MIT. Todos los derechos no se otorgan explícitamente en la licencia MIT están reservados. Consulte el archivo License.md incluido para obtener más detalles.