
ADFまたはPingfederate IDプロバイダーを使用して、AWSの一時的な資格情報をログインおよび取得できるCLIツール。
これは、SAML 2.0を使用したフェデレートAPI/CLIアクセスの一般的なソリューションを実装する方法のPythonコードに基づいています。
プロセスは次のようになります:
saml2aws scriptsaml2aws execOKTAのほかに、このプロジェクトのプロバイダーのほとんどは、スクリーンスクレイピングを使用してユーザーをSAMLにログインしています。これは理想的ではなく、ベンダーが将来これを簡単にすることを願っています。これに加えて、あなたが知る必要があるいくつかのことがあります:
--session-durationフラグを使用して最大12時間、AWSリソースへのフェデレートAPIアクセスを有効にして構成できるようになりました。saml2awsを呼び出すときにAWS_STS_REGIONAL_ENDPOINTS viornment変数をregionalに設定する必要があります。 AWS APIリクエストとAWS STSの地域化されたエンドポイントの署名の下部にあるメモを参照してください。 MacOSにいる場合は、HomeBrewを使用してSAML2AWSをインストールできます!
brew install saml2aws
saml2aws --version
Windowsにいる場合は、Chocolateyを使用してsaml2awsをインストールできます!
choco install saml2aws
saml2aws --version
BrewはLinuxで利用できますが、パッケージマネージャーを使用せずに以下を実行することもできます。
Ubuntuの一部のユーザーは、他のユーザーがインストール命令に問題を報告し、以下を報告しました(「MV」機能のようにSUDOコマンドを使用する必要がある場合があります)
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 {current_version }_linux_amd64.tar.gzz
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が意図したとおりに機能しない場合、 export PATH="$PATH:$HOME/.local/bin/"を含めるために、端子構成ファイル(〜/.bashrc、〜/.profile、〜/.zshrcなど)を更新する必要がある場合があります。
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 ) " AWS CLI SEEをインストールしてください。この場合、MacOSでHomeBrewを使用しています。
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、魚の殻もサポートされています。 ENVは、ENVファイルを調達できるすべてのAWS SDK互換ツールに役立ちます。これは、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 Sub-Commandが呼び出された場合、 saml2aws引数として与えられたコマンドを実行します。デフォルトでは、SAML2AWSはsaml2aws loginを介して生成されたTEMP資格情報を使用してコマンドを実行します。
--exec-profileフラグは、「役割を想定する」アクションをチェーンした可能性のあるAWSプロファイルを使用してコマンドを実行できるようにします。 (〜/.aws/configの「source_profile」を介して)
options:
--exec-profile Execute the given command utilizing a specific profile from your ~/.aws/config file
これは、IDPプロバイダーアカウントを追加する新しい方法です。これにより、好きな設定を使用してアカウントに名前を付けることができ、アカウントフラグを省略した場合に使用されるデフォルトアカウントを1つ持つことをサポートできます。これにより、-Providerフラグと古い構成ファイルが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 /
これは、優先されるキーリングバックエンド(デフォルトでgnome-keyringがx11を必要とする - x11を使用していない場合、Linux GUIアプリケーションのサポートを使用していない場合、これはx11フォワードを構成せずに難しい場合があります。
この問題を回避するには、2つの好ましいアプローチがあります。
configureとloginコマンドの両方を使用する場合、 --disable-keychainフラグを適用できます。このフラグを使用すると、資格情報(IDPのパスワード、またはOktaセッショントークンの場合など)がキーチェーンに保存されないことを意味し、魅力的にスキップされます。これは、 loginコマンドを呼び出すたびにユーザー名とパスワードを入力する必要があることを意味します。
このオプションにはいくつかの手順がありますが、このオプションは、資格情報(IDPのパスワードやセッショントークンなど)をpass [https://www.passwordstore.org/] keyringに保存するでしょう。 passキーリングは、標準のUNIXパスワードマネージャーです。このオプションは、AWS-Vaultの同様の問題に深く触発されました
パスをデフォルトのキーリングに設定するには、次の手順を完了する必要があります(Ubuntu 20.04 LTSを使用していると仮定します):
sudo apt-get update && sudo apt-get install -y pass gnupggpg --gen-keyGPGコマンドの出力は、次のようなものを出力します。
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プロセス中に、ステップ2に記載されているパスフレーズに入るように要求されます
saml2awsを構成してpass Keyringを使用します。これは、 SAML2AWS_KEYRING_BACKEND環境変数をpassことで実行できます。また、 GPG_TTY現在のTTYに設定する必要があります。つまり、変数を"$( tty )"に設定できることを意味します。つまり、以下をプロファイルに追加できることを意味します
export SAML2AWS_KEYRING_BACKEND=pass
export GPG_TTY="$( tty )"
これらの環境に展開するときに~/.aws/configでカスタムロールとプロファイルを〜/.aws/configで隔離して構成する複数のアカウントを構成します。このセットアップは、個別の役割を使用していることを前提としており、おそらくAWSアカウントはdevおよびtestために設計されており、複雑な環境で誤ってAWSアカウントに誤って展開することを避けるように設計されています。この方法は、各AWSアカウントにSAML認証を直接構成することに注意してください(この場合、異なるAWSアカウント)。以下の例では、AWSアカウントに個別の認証値が構成されています。プロファイル= customer-dev/awsaccount =は121234567890 '' '' '"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環境変数を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する必要があります。
ブラウザIDプロバイダーを使用している場合、 saml2aws loginの最初の呼び出しで、Playwright-Goが機能するためにブラウザドライバーをインストールすることを忘れないでください。それ以外の場合は、次のエラーメッセージが表示されます。
Error authenticating to IDP.: please install the driver (vx.xx) and browsers first: %!w(<nil>)
ドライバーをインストールするには、次のことができます。
--download-browser-driver saml2aws loginになりますSAML2AWS_AUTO_BROWSER_DOWNLOAD=truedownload_browser_driver = true設定する、すなわち~/.saml2aws 例:(私の「SSO」AWSアカウントに認証します。このセットアップを使用して、再度認証する必要はありません。私たちは今、IAMに頼って役割のクロスアカウントを引き受けることができます)
〜/.aws/credentials:#(これらはsaml2aws loginによって生成されます。AWSのSSO 'アカウントにSAML認証を設定します)
[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」は、すでに認証されているため、私のSSO AWSアカウントであるSAMLに設定されていることに注意してください)
〜/.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を使用せずに-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)
}
-profileフラグを使用してsaml2awsを実行します:
'-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 -SAMLプロバイダーで承認するために、HTTPリクエストを送信する試みの数を構成します。デフォルトは1ですhttp_retry_delay httpリクエストをSAMLプロバイダーに送信する試みの間にタイムアウトの期間(秒単位)を構成します。デフォルトは1ですregion - 使用する領域のエンドポイントを構成し、視聴者とパーティションを参照してくださいtarget_url -Signin.aws.amazon.com/saml以外のターゲットエンドポイントを探します。 OKTA、PINGFED、PINGONE、およびSHIBBOLETH 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にリポジトリをクローンし、 $PATHに$GOPATH/binがあることを確認します。また、Goreleaserをインストールする必要があります。
make mod
バイナリを$GOPATH/binに取り付けます。
make install
次に、ソフトウェアをテストするだけです。
make test
PRを上げる前に、リナーを実行してください。
make lint-fix
このソフトウェアをDebian/Ubuntuで構築するには、ビルド依存関係をインストールする必要があります。
sudo apt install libudev-dev
また、Goreleaserをインストールし、 bin/goreleaserにバイナリ(またはシンリンク)をインストールする必要があります。
ln -s $(command -v goreleaser) bin/goreleaser
その後、構築できます:
make build
Exec Subコマンドは、次の環境変数をエクスポートします。
注:プロファイル環境変数を使用すると、明示的なプロファイルを必要とするスクリプトまたはコマンドでexecを使用できます。
このツールは、いくつかの優れたOpenSourceライブラリなしでは不可能です。
git tag -as vX.XXを使用してgitタグをローカルに作成しますmake buildでビルドを実行しますdist/ of the project rootディレクトリにネストされた新しく作成されたバイナリをテストしますgit push origin vX.XX押しますデバッグには2つのレベルがあり、最初にデバッグ情報とURL /メソッド /ステータスのリクエストラインを発します。
saml2aws login --verbose
2番目はリクエストと応答の内容を発します。これには、認証関連情報が含まれるため、コピーしてチャットやチケットに貼り付けないでください。
DUMP_CONTENT=true saml2aws login --verbose
資格プロセスは、AWS CLIと資格提供者をインターフェースする便利な方法です。
saml2aws 、単に構成してからAWS構成にプロファイルを追加するだけで、資格情報プロバイダーとして使用できます。 saml2awsには、右のJSON形式で出力を生成するフラグ--credential-process 、および--quietログが表示されることをブロックするflagがあります。 AWS資格情報ファイル(通常、〜/.aws/資格情報)は、資格_processプロバイダーよりも優先されます。つまり、資格情報がファイルに存在する場合、資格情報はトリガーされません。対抗するには、 saml2awsのAWS資格情報を別のファイルにオーバーライドすることができます--credential-fileを使用するか、 configure中に指定します。
AWS資格情報ファイル(通常、〜/.aws/資格情報)は、資格_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"
mybucketプロファイルでAWS CLIを使用すると、認証プロセスが実行され、AWSは返された資格情報に基づいて実行されます。
認証時にSAMLアサーションをキャッシュするために、フラグ--cache-samlを使用できます。 SAMLアサーションキャッシュは非常に短い妥当性(5分)を持ち、単一のMFA検証でいくつかの役割を認証するために使用できます。
SAML2AWSプロファイルごとのファイルがあり、キャッシュディレクトリはsaml2awsと呼ばれ、ユーザーHomeDirの.awsディレクトリにあります。
login中またはlist-roles中に--cache-samlを切り替えることができ、 configure中に1回設定して暗黙的に使用できます。
これには、キーチェーン(ローカル資格情報ストア)の使用が必要です。 --disable-keychainを使用してキーチェーンを無効にした場合、Oktaセッションも無効になります。
OKTAセッションはデフォルトで有効になります。これにより、OKTAセッションをローカルに保存し、MFA用のデバイスを保存します。これは、セッションがまだ期限切れになっていない場合、MFAを求められないことを意味します。
login中に--disable-remember-deviceを切り替えたり、コマンドconfigureできます。login中に--disable-sessionsを切り替えたり、コマンドconfigureできます。loginコマンド中に--forceフラグを使用して、AWSロール選択を求めます。
OKTAセッションが上記の方法のいずれかを介して無効になっている場合、ログインプロセスはデフォルトで標準認証プロセス(セッションを使用せずに)になります。
OKTAセッション期間とMFAポリシーは、OKTAホスト組織によって管理されていることに注意してください。
このコードは著作権(c)2024 Versentで、MITライセンスの下でリリースされます。 MITライセンスで明示的に付与されていないすべての権利は予約されています。詳細については、含まれているLicense.mdファイルを参照してください。