
CLI Tool, который позволяет вам входить в систему и извлекать временные учетные данные AWS с помощью ADFS или поставщиков идентификаций Pingfederate.
Это основано на коде Python от того, как реализовать общее решение для Federated API/CLI с использованием SAML 2.0.
Процесс идет примерно так:
saml2aws scriptsaml2aws execПомимо Okta, большинство поставщиков в этом проекте используют скребевание экрана для регистрации пользователей в SAML, это не идеально, и, как мы надеемся, поставщики облегчают это в будущем. В дополнение к этому есть некоторые вещи, которые вам нужно знать:
--session-duration .AWS_STS_REGIONAL_ENDPOINTS для regional призывы saml2aws , чтобы AWS-SDK-GO использует региональную конечную точку STS вместо глобальной. См. Примечание внизу подписания запросов AWS API и региональных конечных точек AWS STS. Если вы находитесь в MacOS, вы можете установить SAML2AW, используя HomeBrew!
brew install saml2aws
saml2aws --version
Если вы на Windows, вы можете установить SAML2AW, используя Chocolatey!
choco install saml2aws
saml2aws --version
В то время как Brew доступен для Linux, вы также можете запустить следующее, не используя диспетчер пакетов.
Некоторые пользователи Ubuntu сообщили о проблеме с инструкцией по установке других и сообщили о следующей работе (может потребоваться использование команды SUDO, как для функции «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
Для поддержки U2F замените линию WGET выше на 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
Если saml2aws --version не работает так, как предполагалось, вам может потребоваться обновить файл конфигурации терминала (например, ~/.bashrc, ~/.Profile, ~/.ZSHRC), чтобы включить export PATH="$PATH:$HOME/.local/bin/" в конце файла.
Для поддержки U2F, замените линию WGET выше 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
Вам понадобятся инструменты GO (вы также можете проверить обслуживание пакета) и инструмент Go Lint
Клонировать это репо в свой каталог $GOPATH/src
Теперь вы можете установить, работая
make
make install
Инструмент saml2aws доступен в AUR (SAML2AWS-BIN), так что вы можете установить его, используя доступный помощник AUR:
$ pamac build saml2aws-bin Если вы находитесь на void Linux, вы можете использовать XBPS для установки пакета SAML2AWS!
xbps-install saml2aws
saml2aws может генерировать сценарии завершения.
Добавьте следующую строку в свой .bash_profile (или эквивалент):
eval " $( saml2aws --completion-script-bash ) " Добавьте следующую строку в свой .zshrc (или эквивалент):
eval " $( saml2aws --completion-script-zsh ) " Установите CLI AWS, в нашем случае мы используем HomeBrew на 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 Если подкоманда script вызвана, saml2aws выведет следующие временные учетные данные безопасности:
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 и Fish Sherks также поддерживаются. ENV полезен для всех совместимых с AWS SDK инструментов, которые могут получить файл ENV. Это мощная комбинация с Docker и параметром --env-file .
Если вы часто используете eval $(saml2aws script) , вы можете создать псевдоним для него:
zsh:
alias s2a="function(){eval $( $(command saml2aws) script --shell=bash --profile=$@);}"
Бэш:
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 Если подкоманда exec вызывает, saml2aws выполнит команду, указанную в качестве аргумента: по умолчанию SAML2AWS выполнит команду с учетными средствами Temp, сгенерированными с помощью saml2aws login .
Флаг- --exec-profile позволяет выполнять команду, используя профиль AWS, который мог бы привязать действие «взять на себя роль». (через 'source_profile' в ~/.aws/config)
options:
--exec-profile Execute the given command utilizing a specific profile from your ~/.aws/config file
Это новый способ добавления учетных записей поставщиков IDP, он позволяет вам назвать учетные записи с любыми настройками, которые вам нравятся, и поддерживает одну учетную запись по умолчанию , которая используется, если вы опускаете флаг учетной записи. Это заменяет флаг -провален и старый файл конфигурации в 1.x.
Чтобы добавить учетную запись IDP по умолчанию в SAML2AWS, просто запустите следующую команду и следуйте подсказкам.
$ 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
Затем входить в систему, используя эту учетную запись.
saml2aws login
Вы также можете добавить именованные учетные записи, ниже приведен пример, в котором я настраиваю учетную запись под псевдонимом wolfeidau , опять же просто следуйте подсказкам.
saml2aws configure -a wolfeidau
Вы также можете настроить псевдоним учетной записи без подсказок.
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
Тогда вы готовы использовать SAML2AWS.
Войдите в службу (без 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).
Войдите в службу (с 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).
Если вы используете WSL1 или WSL2, вы можете получить следующую ошибку при попытке сохранить учетные данные в ключевой матче
No such interface “org.freedesktop.DBus.Properties” on object at path /
Это происходит потому, что предпочтительный конец Keyring - по умолчанию использует gnome-keyring - который требует X11 - и если вы не используете Windows 11 с поддержкой приложений Linux GUI - это может быть трудным без настройки X11.
Есть 2 предпочтительных подхода к обходному пути в этом вопросе:
Вы можете применить флаг --disable-keychain при использовании команд configure и login . Использование этого флага означает, что ваши учетные данные (такие как ваш пароль для вашего IDP или в случае с Октой токен сеанса Окта) не будут сохранять на ваш ключ -матч - и быть эллиером. Это означает, что вам потребуется вводить свое имя пользователя и пароль каждый раз, когда вы вызываете команду login .
Есть несколько шагов, связанных с этой опцией - однако эта опция сохранит ваши учетные данные (например, ваш пароль для вашего IDP, токены pass и т. Д.) pass Keyring - это стандартный диспетчер паролей Unix. Этот вариант был сильно вдохновлен аналогичной проблемой в AWS-Vault
Чтобы настроить Pass, чтобы быть Keyring по умолчанию, необходимо выполнить следующие шаги (при условии, что вы используете Ubuntu 20.04 LTS):
sudo apt-get update && sudo apt-get install -y pass gnupggpg --gen-keyВывод команды GPG выведет что -то похожее на следующее:
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 > Во время процесса init вам будет предложено ввести фразу PassFrase, представленную на шаге 2
saml2aws для использования pass Keyring. Это можно сделать, установив переменную среды SAML2AWS_KEYRING_BACKEND для pass . Вам также нужно также установить GPG_TTY на ваш текущий TTY, что означает, что вы можете установить переменную на "$( tty )"что означает, что следующее может быть добавлено в ваш профиль
export SAML2AWS_KEYRING_BACKEND=pass
export GPG_TTY="$( tty )"
Настройка нескольких учетных записей с пользовательской ролью и профилем в ~/.aws/config с целью изоляции между инфрадовым кодом при развертывании в этих средах. Эта настройка предполагает, что вы используете отдельные роли и, вероятно, учетные записи AWS для dev и test и предназначены для того, чтобы помочь сотрудникам операций избежать случайного развертывания в неправильную учетную запись AWS в сложных условиях. Обратите внимание, что этот метод напрямую настраивает аутентификацию SAML на каждую учетную запись AWS (в данном случае разные учетные записи AWS). В приведенном ниже примере, отдельные значения аутентификации настроены для учетных записей AWS 'Profile = Customer-DEV/AWSACCOUNT = был 121234567890' и 'Profile = Customer-test/awsaccount = 121234567891'
Чтобы настроить учетную запись Dev Запустите следующее и введите URL, имя пользователя и пароль, и назначьте стандартную роль, которая будет автоматически выбрана при входе в систему.
saml2aws configure -a customer-dev --role=arn:aws:iam::121234567890:role/customer-admin-role -p customer-dev
Это приведет к следующей конфигурации в ~/.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
Чтобы использовать это, вам нужно будет экспортировать AWS_DEFAULT_PROFILE=customer-dev для Target dev .
Для настройки тестовой учетной записи запустите следующее и введите URL, имя пользователя и пароль.
saml2aws configure -a customer-test --role=arn:aws:iam::121234567891:role/customer-admin-role -p customer-test
Это приводит к следующей конфигурации в ~/.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
Чтобы использовать это, вам нужно будет экспортировать AWS_DEFAULT_PROFILE=customer-test в целевой test .
Если вы используете поставщика идентификаций браузера, при первом вызове saml2aws login вам необходимо не забыть установить драйверы браузеров, чтобы Playwright-Go работал. В противном случае вы увидите следующее сообщение об ошибке:
Error authenticating to IDP.: please install the driver (vx.xx) and browsers first: %!w(<nil>)
Чтобы установить драйверы, вы можете:
--download-browser-driver в saml2aws loginSAML2AWS_AUTO_BROWSER_DOWNLOAD=truedownload_browser_driver = true в вашем файле конфигурации SAML2AWS, то есть ~/.saml2aws Пример: (аутентификация моей учетной записи SSO 'AWS. С помощью этой настройки нет необходимости снова аутентифицировать. Теперь мы можем полагаться на то, чтобы взять на себя учетную запись Roce Cross)
~/.AWS/учетные данные: #(они генерируются saml2aws login . Устанавливает аутентификацию SAML в мою учетную запись SSO AWS)
[saml]
aws_access_key_id = AAAAAAAAAAAAAAAAB
aws_secret_access_key = duqhdZPRjEdZPRjE=dZPRjEhKjfB
aws_session_token = #REMOVED#
aws_security_token = #REMOVED#
x_principal_arn = arn:aws:sts::000000000123:assumed-role/myInitialAccount
x_security_token_expires = 2019-08-19T15:00:56-06:00
(Используйте профили AWS, чтобы взять на себя роль AWS, перекрестно аккунт) (Обратите внимание, что «Source_Profile» установлен в SAML, которая является моей учетной записью SSO AWS, поскольку она уже аутентифицирована)
~/.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 без флага-EXEC-Profile:
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)
}
Запуск SAML2AWS с флагом-EXEC-Profile:
При использовании '-exec-profile' я могу принять рол в другую учетную запись AWS без повторной аутентификации. Обратите внимание, что это не повторно, поскольку мы уже аутентифицируются через учетную запись SSO.
saml2aws exec --exec-profile roleIn2ndAwsAccount aws sts get-caller-identity
{
"UserId": "YOOYOOYOOYOOYOOA:/myAccountName",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/myAccountName"
}
В качестве примера
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"
]
}
}
Есть несколько дополнительных параметров, позволяющих настроить конфигурацию SAML2AWS. Используйте следующие параметры в файле ~/.saml2aws :
http_attempts_count - настраивает количество попыток отправить HTTP -запросы, чтобы разрешить SAML Provider. По умолчанию 1http_retry_delay - настраивает продолжительность (в секундах) тайм -аута между попытками отправить HTTP -запросы поставщику SAML. По умолчанию 1region - настраивает, какие конечные точки региона использовать, см. Аудиторию и раздел.target_url - Ищите целевую конечную точку, отличную от signin.aws.amazon.com/saml. Поставщики поставщиков ECP по Okta, Pingfed, Pingone и Shibbaleth ECP должны либо явно отправлять, либо искать этот URL -адрес в ответе, чтобы получить или определить соответствующий ответ аутентификации. Это может быть переопределено здесь, если вы хотите проверить подлинность для чего -то другого, кроме AWS.Пример: типичная конфигурация с такими параметрами будет выглядеть как следующее:
[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
Для keyCloak доступны еще 2 параметра для прекращения процесса неисправной аутентификации.
kc_auth_error_element - Конфигурирует то, что HTTP -элемент SAML2AWS ищет в ответах на ошибку аутентификации. По умолчанию «Span#input-error» и ищет <span id=input-error>xxx</span> . Goquery используется. «Span#id-name» ищет <span id=id-name>xxx</span> . «Span.class-name» ищет <span class=class-name>xxx</span> .kc_auth_error_message - работает с kc_auth_error_element и настраивает то, что HTTP -сообщение SAML2AWS ищет в ответах на ошибку аутентификации. По умолчанию «недействительное имя пользователя или пароль». и ищет <xxx>Invalid username or password.</xxx> . Регулярные выражения принимаются. Пример: если ваш сервер KeyCloak возвращает сообщение об ошибке аутентификации «Неверное имя пользователя или пароль». На другом языке в элементе <span class=kc-feedback-text>xxx</span> эти параметры будут выглядеть как:
[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."
Если ваш сервер KeyCloak возвращает другое сообщение об ошибке в зависимости от типа ошибки аутентификации, используйте трубу в качестве разделителя и добавьте несколько сообщений в 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."
Чтобы построить это программное обеспечение на macOS, клонируйте репо в $GOPATH/src/github.com/versent/saml2aws и убедитесь, что у вас есть $GOPATH/bin в вашем $PATH . Вам также понадобится установлен Goreleaser.
make mod
Установите бинарную в $GOPATH/bin .
make install
Затем протестировать программное обеспечение.
make test
Прежде чем поднять пиар, запустите Linter.
make lint-fix
Чтобы построить это программное обеспечение на Debian/Ubuntu, вам нужно установить зависимость от сборки:
sudo apt install libudev-dev
Вам также нужен установщик GoreAser, а бинарный (или символ) в bin/goreleaser .
ln -s $(command -v goreleaser) bin/goreleaser
Тогда вы можете построить:
make build
Под командование EXEC экспортирует следующие переменные среды.
ПРИМЕЧАНИЕ. Эти переменные среды профиля позволяют использовать exec с помощью скрипта или команды, который требует явного профиля.
Этот инструмент был бы невозможным без каких -либо отличных библиотек OpenSource.
git tag -as vX.XXmake builddist/ Root Directory Projectgit push origin vX.XXСуществует два уровня отладки, сначала издает информацию отладки и строку запросов URL / метод / статус.
saml2aws login --verbose
Второй излучает содержание запросов и ответов, это включает информацию, связанную с аутентификацией, поэтому не копируйте и не вставляйте ее в чат или билеты!
DUMP_CONTENT=true saml2aws login --verbose
Процесс учетных данных - это удобный способ взаимодействия поставщиков учетных данных с AWS CLI.
Вы можете использовать saml2aws в качестве поставщика учетных данных, просто настраивая его, а затем добавив профиль в конфигурацию AWS. У saml2aws есть флаг --credential-process генерирующий вывод с правильным форматом JSON, а также --quiet , который заблокирует отображение регистрации. Файл учетных данных AWS (обычно ~/.AWS/учетные данные) имеет приоритет над поставщиком Credential_Process. Это означает, что если в файле присутствуют учетные данные, процесс учетных данных не будет запускаться. Чтобы противостоять тому, что вы можете переопределить местоположение учетных данных AWS saml2aws в другой файл, используя --credential-file или указать его во время configure .
Файл учетных данных AWS (обычно ~/.AWS/учетные данные) имеет приоритет над поставщиком Credential_Process. Это означает, что если в файле присутствуют учетные данные, процесс учетных данных не будет запускаться.
Пример конфигурации AWS ( ~/.aws/config ):
[profile mybucket]
region = us-west-1
credential_process = saml2aws login --credential-process --role <ROLE> --profile mybucket
Вы можете добавить это вручную или через AWSCLI, т.е.
aws configure set credential_process "saml2aws login --credential-process --role <ROLE> --profile mybucket"
При использовании AWS CLI с профилем mybucket процесс аутентификации будет запущен, а затем AWS будет выполнен на основе возвращенных учетных данных.
Вы можете использовать флаг --cache-saml , чтобы кэшировать утверждение SAML во время аутентификации. Кэш утверждения SAML имеет очень короткую достоверность (5 мин) и может использоваться для аутентификации в нескольких ролях с одной проверкой MFA.
Существует файл в соответствии с профилем SAML2AWS, каталог кэша называется saml2aws и расположен в вашем каталоге .aws в вашем пользовательском Homedir.
Вы можете переключать --cache-saml во время login или во время list-roles , и вы можете установить его один раз во время configure и использовать его неявно.
Это требует использования ключей (локальный магазин учетных данных). Если вы отключили ключевой матч, используя --disable-keychain , сеансы Okta также будут отключены.
Сессии Okta включены по умолчанию. Это будет хранить сеанс Okta локально и сохранить ваше устройство для MFA. Это означает, что если сессия еще не истек, вам не будет предложено для MFA.
--disable-remember-device во время login или configure команд.--disable-sessions во время login или configure команд. Используйте флаг --force во время команды login систему для выбора роли AWS.
Если сеансы Okta отключены с помощью любого из упомянутых выше методов, процесс входа в систему будет по умолчанию в стандартный процесс аутентификации (без использования сеансов).
Обратите внимание, что ваша продолжительность сеанса Окта и политика MFA регулируются вашей организацией Okta.
Этот код является Copyright (C) 2024 Versent и выпущен по лицензии MIT. Все права не предоставлены в лицензии MIT, зарезервированы. См. Включенный файл License.md для получения более подробной информации.