
Ferramenta CLI, que permite fazer login e recuperar credenciais temporárias da AWS usando com o ADFS ou os provedores de identidade Pingfederate.
Isso é baseado no código Python de como implementar uma solução geral para acesso federado para API/CLI usando o SAML 2.0.
O processo vai algo assim:
saml2aws scriptsaml2aws execAlém de Okta, a maioria dos provedores deste projeto está usando a raspagem da tela para registrar os usuários no SAML, isso não é ideal e, esperançosamente, os fornecedores facilitam isso no futuro. Além disso, há algumas coisas que você precisa saber:
--session-duration .AWS_STS_REGIONAL_ENDPOINTS para regional ao ligar para saml2aws para que o AWS-SDK-GO use um endpoint regional do STS em vez do global. Veja a nota na parte inferior da assinatura da AWS API Solicys and AWS STS Regionalized Endpoints. Se você estiver no macOS, você pode instalar o saml2aws usando o homebrew!
brew install saml2aws
saml2aws --version
Se você estiver no Windows, pode instalar o SAML2AWS usando o Chocolatey!
choco install saml2aws
saml2aws --version
Enquanto o Brew estiver disponível para o Linux, você também pode executar o seguinte sem usar um gerenciador de pacotes.
Alguns usuários do Ubuntu relataram problemas com os outros Instruções de instalação e relataram o seguinte ao funcionamento (pode ser necessário usar o comando sudo como para a função "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 suporte a U2F, substitua a linha WGET acima por wget https://github.com/Versent/saml2aws/releases/download/v${CURRENT_VERSION}/saml2aws-u2f_${CURRENT_VERSION}_linux_amd64.tar.gz }_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
Se saml2aws --version não funcionar como pretendido, pode ser necessário atualizar seu arquivo de configuração de terminal (como ~/.bashrc, ~/.profile, ~/.zshrc) para incluir export PATH="$PATH:$HOME/.local/bin/" no final do arquivo.
Para suporte a U2F, substitua a linha wget acima por 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
Você precisará de ferramentas Go Go (você pode verificar seu mantenedor de pacotes) instalado e a ferramenta Go Lint
Clone este repositório para o seu diretório $GOPATH/src
Agora você pode instalar executando
make
make install
A ferramenta saml2aws está disponível no AUR (SAML2AWS-BIN), para que você possa instalá-lo usando um Aur Aurper disponível:
$ pamac build saml2aws-bin Se você estiver no Void Linux, poderá usar o XBPS para instalar o pacote SAML2AWS!
xbps-install saml2aws
saml2aws pode gerar scripts de conclusão.
Adicione a seguinte linha ao seu .bash_profile (ou equivalente):
eval " $( saml2aws --completion-script-bash ) " Adicione a seguinte linha ao seu .zshrc (ou equivalente):
eval " $( saml2aws --completion-script-zsh ) " Instale o AWS CLI Veja, no nosso caso, estamos usando o homebrew no 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 Se o subcomando script for chamado, saml2aws gerará as seguintes credenciais de segurança temporárias:
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
As conchas de Powershell, Sh e Peixe também são apoiadas. O ENV é útil para todas as ferramentas compatíveis com AWS SDK que podem obter um arquivo Env. É uma combinação poderosa com o Docker e o parâmetro --env-file .
Se você usar eval $(saml2aws script) com frequência, convém criar um alias para ele:
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 Se o subcomando exec for chamado, saml2aws executará o comando dado como um argumento: por padrão, o SAML2AWS executará o comando com credenciais de temperatura geradas pelo saml2aws login .
O sinalizador --exec-profile permite que um comando seja executado usando um perfil da AWS que pode ter encadeado ações "assumir função". (via 'fonte_profile' em ~/.aws/config)
options:
--exec-profile Execute the given command utilizing a specific profile from your ~/.aws/config file
Essa é a nova maneira de adicionar contas de provedor de IDP, ele permite que você tenha contas nomeadas com as configurações que você quiser e suporta ter uma conta padrão usada se você omitir o sinalizador da conta. Isso substitui o sinalizador -Provider e o arquivo de configuração antigo em 1.x.
Para adicionar uma conta IDP padrão ao SAML2AWS, execute o seguinte comando e siga os prompts.
$ 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
Depois para fazer login usando esta conta.
saml2aws login
Você também pode adicionar contas nomeadas, abaixo está um exemplo em que estou configurando uma conta sob o pseudônimo de wolfeidau ; novamente, basta seguir os prompts.
saml2aws configure -a wolfeidau
Você também pode configurar o alias da conta sem avisos.
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
Então você está pronto para usar o SAML2AWS.
Faça login em um serviço (sem 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).
Faça login em um serviço (com 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).
Se você estiver usando WSL1 ou WSL2, poderá obter o seguinte erro ao tentar salvar as credenciais no chaveiro
No such interface “org.freedesktop.DBus.Properties” on object at path /
Isso acontece porque o back -end preferido do chaveiro - usa o gnome-keyring por padrão - que requer X11 - e se você não estiver usando o Windows 11 com suporte para aplicativos Linux GUI - isso pode ser difícil sem configurar um X11 para a frente.
Existem 2 abordagens preferidas para alternância nesta questão:
Você pode aplicar o sinalizador --disable-keychain ao usar os comandos configure e login . Usar esse sinalizador significa que suas credenciais (como sua senha no seu IDP ou no caso de Okta the Okta Session Token) não salvarão no seu chaveiro - e serão ignoradas inteiramente. Isso significa que você será obrigado a inserir seu nome de usuário e senha sempre que invocar o comando login .
Existem algumas etapas envolvidas nessa opção - no entanto, esta opção salvará suas credenciais (como sua senha no seu IDP e tokens de sessão etc.) no pass [https://www.passwordstore.org/] keyring. O Keyring pass é o gerenciador de senhas do UNIX padrão. Esta opção foi fortemente inspirada por um problema semelhante no AWS-Vault
Para configurar o passe para ser o chaveiro padrão, as seguintes etapas precisarão ser concluídas (supondo que você esteja usando o Ubuntu 20.04 LTS):
sudo apt-get update && sudo apt-get install -y pass gnupggpg --gen-keyA saída do comando gpg produzirá algo semelhante ao seguinte:
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 o processo init , você será solicitado para entrar na senha fornecida na etapa 2
saml2aws para usar o chaveiro pass . Isso pode ser feito configurando a variável SAML2AWS_KEYRING_BACKEND AMBIENFORY a ser pass . Você também precisará definir o GPG_TTY para o seu TTY atual, o que significa que você pode definir a variável como "$( tty )"o que significa que o seguinte pode ser adicionado ao seu perfil
export SAML2AWS_KEYRING_BACKEND=pass
export GPG_TTY="$( tty )"
Configurando várias contas com função e perfil personalizados em ~/.aws/config com o isolamento de metas entre o Código de Infrações ao implantar para esses ambientes. Essa configuração pressupõe que você esteja usando funções separadas e provavelmente as contas da AWS para dev e test e foi projetado para ajudar a equipe de operações a evitar implantar acidentalmente na conta AWS errada em ambientes complexos. Observe que este método configura a autenticação SAML para cada conta AWS diretamente (neste caso, diferentes contas da AWS). No exemplo abaixo, os valores de autenticação separados são configurados para as contas da AWS 'perfil = cliente-dev/awsaccount = foi 121234567890' e 'perfil = cliente-teste/awsaccount = 121234567891'
Para configurar a conta de desenvolvimento, execute o seguinte e insira URL, nome de usuário e senha e atribua uma função padrão a ser selecionada automaticamente no login.
saml2aws configure -a customer-dev --role=arn:aws:iam::121234567890:role/customer-admin-role -p customer-dev
Isso resultará na seguinte configuração em ~/.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 isso, você precisará exportar AWS_DEFAULT_PROFILE=customer-dev para segmentar dev .
Para configurar a conta de teste, execute o seguinte e insira URL, nome de usuário e senha.
saml2aws configure -a customer-test --role=arn:aws:iam::121234567891:role/customer-admin-role -p customer-test
Isso resulta na seguinte configuração em ~/.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 isso, você precisará exportar AWS_DEFAULT_PROFILE=customer-test para test de destino.
Se você estiver usando o provedor de identidade do navegador, na primeira invocação do saml2aws login você precisa se lembrar de instalar os drivers do navegador para que o dramaturgo-vá funcione. Caso contrário, você verá a seguinte mensagem de erro:
Error authenticating to IDP.: please install the driver (vx.xx) and browsers first: %!w(<nil>)
Para instalar os drivers, você pode:
--download-browser-driver para saml2aws loginSAML2AWS_AUTO_BROWSER_DOWNLOAD=truedownload_browser_driver = true em seu arquivo de configuração SAML2AWS, ou seja, ~/.saml2aws Exemplo: (Autentique na minha conta 'SSO' AWS. Com essa configuração, não há necessidade de autenticar novamente. Agora podemos confiar no IAM para assumir o papel de conta cruzada)
~/.aws/credenciais: #(estes são gerados pelo saml2aws login . configura a autenticação SAML na conta 'SSO' da minha 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
(Use perfis da AWS para assumir uma função da AWS Cross-conta) (observe que o "fonte_profile" está definido como SAML, que é minha conta SSO AWS, pois já está autenticado)
~/.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
Executando o saml2aws sem-sinalizador de perfilexil:
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)
}
Executando o SAML2AWS com-Sinalizador de Profileos:
Ao usar '--exec-profile', posso assumir o solo em uma conta AWS diferente sem re-autenticar. Observe que ele não re-autentique, pois já somos autenticados pela conta 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 exemplo
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"
]
}
}
Existem poucos parâmetros adicionais que permitem personalizar a configuração SAML2AWS. Use os seguintes parâmetros no arquivo ~/.saml2aws :
http_attempts_count - configura o número de tentativas de enviar solicitações HTTP para autorizar com o provedor SAML. Padrões para 1http_retry_delay - configura a duração (em segundos) do tempo limite entre as tentativas de enviar solicitações HTTP ao provedor SAML. Padrões para 1region - configura quais pontos de extremidade da região para usar, consulte o público e a partiçãotarget_url - Procure um ponto de extremidade de destino que não seja Signin.aws.amazon.com/saml. Os provedores de ECP Okta, Pingfed, Pingone e Shibboleth precisam enviar ou procurar explicitamente esse URL em uma resposta para obter ou identificar uma resposta de autenticação apropriada. Isso pode ser substituído aqui se você deseja autenticar algo diferente da AWS.Exemplo: a configuração típica com esses parâmetros seria seguinte:
[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, mais 2 parâmetros estão disponíveis para encerrar um processo de autenticação com falha.
kc_auth_error_element - configura o que o elemento HTTP SAML2AWS procura nas respostas de erro de autenticação. Padrões para "span#input-error" e procura <span id=input-error>xxx</span> . Cargo é usado. "span#id-name" procura <span id=id-name>xxx</span> . "span.class-name" procura <span class=class-name>xxx</span> .kc_auth_error_message - funciona com o kc_auth_error_element e configura o que a mensagem http saml2aws procura nas respostas de erro de autenticação. Padrões de "nome de usuário ou senha inválidos". e procura <xxx>Invalid username or password.</xxx> . Expressões regulares são aceitas. Exemplo: se o seu servidor keycloak retornar a mensagem de erro de autenticação "Nome de usuário ou senha inválidos". Em um idioma diferente no elemento <span class=kc-feedback-text>xxx</span> , esses parâmetros seriam:
[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."
Se o seu servidor keycloak retornar uma mensagem de erro diferente, dependendo de um tipo de erro de autenticação, use um tubo como um separador e adicione várias mensagens ao 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 no macOS, clone o repositório para $GOPATH/src/github.com/versent/saml2aws e verifique se você possui $GOPATH/bin no seu $PATH . Você também precisará de goreleaser instalado.
make mod
Instale o binário para $GOPATH/bin .
make install
Então, para testar o software, basta executar.
make test
Antes de criar um PR, execute o linhador.
make lint-fix
Para construir este software no Debian/Ubuntu, você precisa instalar uma dependência de compilação:
sudo apt install libudev-dev
Você também precisa do GORELEASER instalado e o binário (ou um symlink) em bin/goreleaser .
ln -s $(command -v goreleaser) bin/goreleaser
Então você pode construir:
make build
O comando do sub -sub exportará as seguintes variáveis de ambiente.
Nota: que as variáveis de ambiente de perfil permitem usar exec com um script ou comando que requer um perfil explícito.
Essa ferramenta não seria possível sem algumas ótimas bibliotecas OpenSource.
git tag -as vX.XXmake builddist/ do diretório raiz do projetogit push origin vX.XXExistem dois níveis de depuração, primeiro emite informações de depuração e a linha de solicitações de URL / método / status.
saml2aws login --verbose
O segundo emite o conteúdo de solicitações e respostas, isso inclui informações relacionadas à autenticação, para que não copie e coloque -as em bate -papo ou ingressos!
DUMP_CONTENT=true saml2aws login --verbose
O processo de credencial é uma maneira conveniente de interface os provedores de credenciais com a CLI da AWS.
Você pode usar saml2aws como um provedor de credenciais simplesmente configurando -o e adicionando um perfil à configuração da AWS. saml2aws possui um --credential-process crédito gerando uma saída com o formato JSON direito, bem como um sinalizador --quiet que bloqueará o registro de ser exibido. O arquivo de credencial da AWS (normalmente ~/.aws/credenciais) tem precedência sobre o provedor CREDENCIAL_PROCESS. Isso significa que, se as credenciais estiverem presentes no arquivo, o processo de credencial não será acionado. Para combater isso, você pode substituir a localização da AWS Credencial do saml2aws para outro arquivo usando --credential-file ou especificando-o durante configure .
O arquivo de credencial da AWS (normalmente ~/.aws/credenciais) tem precedência sobre o provedor CREDENCIAL_PROCESS. Isso significa que, se as credenciais estiverem presentes no arquivo, o processo de credencial não será acionado.
Um exemplo da configuração da AWS ( ~/.aws/config ):
[profile mybucket]
region = us-west-1
credential_process = saml2aws login --credential-process --role <ROLE> --profile mybucket
Você pode adicionar isso manualmente ou através do awscli, ou seja,
aws configure set credential_process "saml2aws login --credential-process --role <ROLE> --profile mybucket"
Ao usar a AWS CLI com o perfil mybucket , o processo de autenticação será executado e a AWS será executada com base nas credenciais retornadas.
Você pode usar o sinalizador --cache-saml para armazenar em cache a asserção SAML no momento da autenticação. O cache de asserção SAML possui uma validade muito curta (5 min) e pode ser usada para se autenticar para várias funções com uma única validação de MFA.
Há um arquivo por perfil SAML2AWS, o diretório de cache é chamado saml2aws e está localizado no seu diretório .aws em seu usuário Homedir.
Você pode alternar --cache-saml durante login ou durante list-roles , e pode defini-lo uma vez durante configure e usá-lo implicitamente.
Isso requer o uso do chaveiro (armazenamento de credenciais locais). Se você desativou o chaveiro usando --disable-keychain , as sessões da OKTA também serão desativadas.
As sessões da OKTA são ativadas por padrão. Isso armazenará a sessão OKTA localmente e salvará seu dispositivo para o MFA. Isso significa que, se a sessão ainda não expirar, você não será solicitado ao MFA.
--disable-remember-device durante os comandos login ou configure .--disable-sessions durante os comandos login ou configure . Use o sinalizador --force durante o comando login para solicitar a seleção de função da AWS.
Se as sessões da OKTA forem desativadas por meio de qualquer um dos métodos mencionados acima, o processo de login padrão no processo de autenticação padrão (sem usar sessões).
Observe que a duração da sessão do OKTA e as políticas de MFA são governadas pela sua organização host da OKTA.
Este código é copyright (c) 2024 Versent e lançado sob a licença do MIT. Todos os direitos não concedidos explicitamente na licença do MIT são reservados. Consulte o arquivo License.md incluído para obter mais detalhes.