
Alat CLI yang memungkinkan Anda untuk masuk dan mengambil kredensial sementara AWS menggunakan dengan ADF atau penyedia identitas pingfederate.
Ini didasarkan pada kode Python dari cara menerapkan solusi umum untuk akses API/CLI federasi menggunakan SAML 2.0.
Prosesnya berjalan seperti ini:
saml2aws scriptsaml2aws execSelain dari Okta, sebagian besar penyedia dalam proyek ini menggunakan scraping layar untuk log pengguna ke SAML, ini tidak ideal dan semoga vendor membuat ini lebih mudah di masa depan. Selain itu ada beberapa hal yang perlu Anda ketahui:
--session-duration .AWS_STS_REGIONAL_ENDPOINTS ke regional saat memanggil saml2aws sehingga AWS-SDK-GO menggunakan titik akhir STS regional alih-alih yang global. Lihat catatan di bagian bawah permintaan AWS API dan titik akhir AWS STS Regional. Jika Anda menggunakan macOS, Anda dapat menginstal SAML2AWS menggunakan Homebrew!
brew install saml2aws
saml2aws --version
Jika Anda berada di windows, Anda dapat menginstal Saml2AWS menggunakan cokelat!
choco install saml2aws
saml2aws --version
Sementara minuman tersedia untuk Linux, Anda juga dapat menjalankan yang berikut tanpa menggunakan manajer paket.
Beberapa pengguna Ubuntu telah melaporkan masalah dengan yang lain menginstal instruksi dan melaporkan yang berikut ini berfungsi (mungkin diperlukan menggunakan perintah sudo seperti untuk fungsi "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
Untuk dukungan U2F, ganti baris wget di atas dengan wget https://github.com/Versent/saml2aws/releases/download/v${CURRENT_VERSION}/saml2aws-u2f_${CURRENT_VERSION}_linux_amd64.tar.gz }/saml2aws-u2f_$ {current_version}_linix_amd64.tar.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
Jika saml2aws --version tidak berfungsi sebagaimana dimaksud, Anda mungkin perlu memperbarui file konfigurasi terminal Anda (seperti ~/.bashrc, ~/.profile, ~/.zshrc) untuk memasukkan export PATH="$PATH:$HOME/.local/bin/" di akhir file.
Untuk dukungan U2F, ganti baris WGET di atas dengan 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
Anda akan memerlukan alat go (Anda dapat memeriksa pemelihara paket Anda juga) yang diinstal dan alat go lint
Klon repo ini ke direktori $GOPATH/src Anda
Sekarang Anda dapat menginstal dengan menjalankan
make
make install
Alat saml2aws tersedia di AUR (SAML2AWS-BIN), sehingga Anda dapat menginstalnya menggunakan AUR Helper yang tersedia:
$ pamac build saml2aws-bin Jika Anda menggunakan void linux, Anda dapat menggunakan XBPS untuk menginstal paket Saml2AWS!
xbps-install saml2aws
saml2aws dapat menghasilkan skrip penyelesaian.
Tambahkan baris berikut ke .bash_profile Anda (atau setara):
eval " $( saml2aws --completion-script-bash ) " Tambahkan baris berikut ke .zshrc Anda (atau setara):
eval " $( saml2aws --completion-script-zsh ) " Instal AWS CLI lihat, dalam kasus kami, kami menggunakan homebrew di 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 Jika Sub-Komandan script dipanggil, saml2aws akan menghasilkan kredensial keamanan sementara berikut:
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
Kerang PowerShell, SH dan ikan juga didukung. Env berguna untuk semua alat kompatibel AWS SDK yang dapat sumber file env. Ini adalah kombo yang kuat dengan Docker dan parameter --env-file .
Jika Anda sering menggunakan eval $(saml2aws script) , Anda mungkin ingin membuat alias untuk itu:
zsh:
alias s2a="function(){eval $( $(command saml2aws) script --shell=bash --profile=$@);}"
pesta:
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 Jika Sub-Komandan exec dipanggil, saml2aws akan menjalankan perintah yang diberikan sebagai argumen: secara default SAML2AWS akan menjalankan perintah dengan kredensial temp yang dihasilkan melalui saml2aws login .
Bendera --exec-profile memungkinkan perintah untuk mengeksekusi menggunakan profil AWS yang mungkin telah merantai tindakan "asumsikan peran". (via 'source_profile' di ~/.aws/config)
options:
--exec-profile Execute the given command utilizing a specific profile from your ~/.aws/config file
Ini adalah cara baru untuk menambahkan akun penyedia IDP, ini memungkinkan Anda untuk memiliki nama akun dengan pengaturan apa pun yang Anda suka dan mendukung memiliki satu akun default yang digunakan jika Anda menghilangkan bendera akun. Ini menggantikan bendera --Provider dan file konfigurasi lama di 1.x.
Untuk menambahkan akun IDP default ke SAML2AWS cukup jalankan perintah berikut dan ikuti petunjuknya.
$ 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
Kemudian untuk masuk menggunakan akun ini.
saml2aws login
Anda juga dapat menambahkan akun bernama, di bawah ini adalah contoh di mana saya menyiapkan akun di bawah alias wolfeidau , sekali lagi cukup ikuti petunjuknya.
saml2aws configure -a wolfeidau
Anda juga dapat mengonfigurasi alias akun tanpa prompt.
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
Kemudian Anda siap menggunakan saml2aws.
Masuk ke layanan (tanpa 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).
Masuk ke layanan (dengan 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).
Jika Anda menggunakan WSL1 atau WSL2, Anda mungkin mendapatkan kesalahan berikut saat mencoba menyimpan kredensial ke gantungan kunci
No such interface “org.freedesktop.DBus.Properties” on object at path /
Ini terjadi karena back -end keyring yang disukai - menggunakan gnome-keyring secara default - yang membutuhkan X11 - dan jika Anda tidak menggunakan Windows 11 dengan dukungan untuk aplikasi Linux GUI - ini bisa sulit tanpa mengkonfigurasi X11 ke depan.
Ada 2 pendekatan yang disukai untuk menyelesaikan masalah ini:
Anda dapat menerapkan bendera --disable-keychain saat menggunakan perintah configure dan login . Menggunakan bendera ini berarti kredensial Anda (seperti kata sandi Anda ke IDP Anda, atau dalam kasus Okta, token sesi OKTA) tidak akan menyimpan ke gantungan kunci Anda - dan dilewati dengan entrier. Ini berarti Anda akan diminta untuk memasukkan nama pengguna dan kata sandi Anda setiap kali Anda memohon perintah login .
Ada beberapa langkah yang terlibat dengan opsi ini - namun opsi ini akan menyimpan kredensial Anda (seperti kata sandi Anda ke IDP Anda, dan token sesi dll) ke dalam pass [https://www.passwordstore.org/] keyring. Keyring pass adalah manajer kata sandi Unix standar. Opsi ini sangat terinspirasi oleh masalah serupa di AWS-Vault
Untuk mengonfigurasi pass menjadi keyring default, langkah -langkah berikut perlu diselesaikan (dengan asumsi Anda menggunakan Ubuntu 20.04 LTS):
sudo apt-get update && sudo apt-get install -y pass gnupggpg --gen-keyOutput dari perintah GPG akan menghasilkan sesuatu yang mirip dengan yang berikut:
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 > Selama proses init Anda akan diminta untuk memasukkan frasa sandi yang disediakan di Langkah 2
saml2aws untuk menggunakan Keyring pass . Ini dapat dilakukan dengan mengatur variabel lingkungan SAML2AWS_KEYRING_BACKEND yang akan pass . Anda juga harus mengatur GPG_TTY ke TTY Anda saat ini yang berarti Anda dapat mengatur variabel ke "$( tty )"yang berarti berikut ini dapat ditambahkan ke profil Anda
export SAML2AWS_KEYRING_BACKEND=pass
export GPG_TTY="$( tty )"
Mengkonfigurasi beberapa akun dengan peran dan profil khusus di ~/.aws/config dengan sasaran isolasi antara kode infra saat digunakan ke lingkungan ini. Pengaturan ini mengasumsikan Anda menggunakan peran terpisah dan mungkin akun AWS untuk dev dan test dan dirancang untuk membantu staf operasi menghindari secara tidak sengaja menggunakan akun AWS yang salah di lingkungan yang kompleks. Perhatikan bahwa metode ini mengkonfigurasi otentikasi SAML untuk setiap akun AWS secara langsung (dalam hal ini akun AWS yang berbeda). Dalam contoh di bawah ini, nilai otentikasi terpisah dikonfigurasi untuk profil AWS Accounts = customer-dev/awsaccount = adalah 121234567890 'dan' profil = customer-test/awsaccount = 121234567891 '
Untuk mengatur akun dev, jalankan yang berikut dan masukkan URL, nama pengguna dan kata sandi, dan tetapkan peran standar untuk dipilih secara otomatis pada login.
saml2aws configure -a customer-dev --role=arn:aws:iam::121234567890:role/customer-admin-role -p customer-dev
Ini akan menghasilkan konfigurasi berikut di ~/.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
Untuk menggunakan ini, Anda perlu mengekspor variabel lingkungan AWS_DEFAULT_PROFILE=customer-dev ke target dev .
Untuk mengatur akun uji, jalankan yang berikut dan masukkan URL, nama pengguna, dan kata sandi.
saml2aws configure -a customer-test --role=arn:aws:iam::121234567891:role/customer-admin-role -p customer-test
Ini menghasilkan konfigurasi berikut di ~/.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
Untuk menggunakan ini, Anda perlu mengekspor AWS_DEFAULT_PROFILE=customer-test ke test target.
Jika Anda menggunakan penyedia identitas browser, pada doa pertama saml2aws login Anda perlu ingat untuk menginstal driver browser agar penulis naskah dapat bekerja. Kalau tidak, Anda akan melihat pesan kesalahan berikut:
Error authenticating to IDP.: please install the driver (vx.xx) and browsers first: %!w(<nil>)
Untuk menginstal driver, Anda dapat:
--download-browser-driver ke saml2aws loginSAML2AWS_AUTO_BROWSER_DOWNLOAD=truedownload_browser_driver = true di file konfigurasi saml2aws Anda, yaitu ~/.saml2aws Contoh: (Otentikasi ke akun AWS 'SSO' saya. Dengan pengaturan ini, tidak perlu mengotentikasi lagi. Kami sekarang dapat mengandalkan IAM untuk mengambil peran Cross Account)
~ saml2aws login
[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
(Gunakan profil AWS untuk mengambil peran AWS Cross-Account) (perhatikan bahwa "Source_Profile" diatur ke SAML yang merupakan akun AWS SSO saya karena sudah diautentikasi)
~/.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
Menjalankan SAML2AWS tanpa-bendera profil:
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)
}
Menjalankan saml2aws dengan-bendera profil:
Saat menggunakan '-Exec-Profile' saya dapat menganggap peran ke akun AWS yang berbeda tanpa menulis ulang. Perhatikan bahwa itu tidak mengautentikasi kembali karena kami sudah diautentikasi melalui akun SSO.
saml2aws exec --exec-profile roleIn2ndAwsAccount aws sts get-caller-identity
{
"UserId": "YOOYOOYOOYOOYOOA:/myAccountName",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/myAccountName"
}
Sebagai contoh
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"
]
}
}
Ada beberapa parameter tambahan yang memungkinkan untuk menyesuaikan konfigurasi SAML2AWS. Gunakan parameter berikut di file ~/.saml2aws :
http_attempts_count - Mengkonfigurasi jumlah upaya untuk mengirim permintaan HTTP untuk mengotorisasi dengan penyedia SAML. Default ke 1http_retry_delay - Mengkonfigurasi durasi (dalam detik) batas waktu antara upaya untuk mengirim permintaan HTTP ke penyedia SAML. Default ke 1region - Mengkonfigurasi Titik Akhir Wilayah mana yang akan digunakan, lihat audiens dan partisitarget_url - Cari titik akhir target selain dari Signin.aws.amazon.com/saml. Penyedia ECP OKTA, Pingfed, Pingone dan Shibboleth perlu mengirim atau mencari URL ini secara eksplisit dalam tanggapan untuk mendapatkan atau mengidentifikasi respons otentikasi yang tepat. Ini dapat ditimpa di sini jika Anda ingin mengotentikasi untuk sesuatu selain AWS.Contoh: Konfigurasi khas dengan parameter seperti itu akan terlihat seperti berikut:
[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
Untuk Keycloak, 2 parameter lebih banyak tersedia untuk mengakhiri proses otentikasi yang gagal.
kc_auth_error_element - Mengkonfigurasi apa yang dicari oleh elemen http SAML2AWS dalam respons kesalahan otentikasi. Default ke "span#input-error" dan mencari <span id=input-error>xxx</span> . Goquery digunakan. "Span#ID-Name" mencari <span id=id-name>xxx</span> . "span.class-name" mencari <span class=class-name>xxx</span> .kc_auth_error_message - Bekerja dengan kc_auth_error_element dan mengkonfigurasi apa yang dicari oleh pesan http Saml2aws dalam respons kesalahan otentikasi. Default ke "nama pengguna atau kata sandi yang tidak valid." dan mencari <xxx>Invalid username or password.</xxx> . Ekspresi reguler diterima. Contoh: Jika Server Keycloak Anda Mengembalikan Pesan Kesalahan Otentikasi "Nama pengguna atau kata sandi yang tidak valid." Dalam bahasa yang berbeda di elemen <span class=kc-feedback-text>xxx</span> , parameter ini akan terlihat seperti:
[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."
Jika Server Keycloak Anda mengembalikan pesan kesalahan yang berbeda tergantung pada jenis kesalahan otentikasi, gunakan pipa sebagai pemisah dan tambahkan beberapa pesan ke 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."
Untuk membangun perangkat lunak ini di macOS, klon repo ke $GOPATH/src/github.com/versent/saml2aws dan memastikan Anda memiliki $GOPATH/bin di $PATH Anda. Anda juga perlu diinstal goreleaser.
make mod
Pasang biner ke $GOPATH/bin .
make install
Kemudian untuk menguji perangkat lunak yang baru saja dijalankan.
make test
Sebelum mengangkat PR, silakan jalankan linter.
make lint-fix
Untuk membangun perangkat lunak ini di Debian/Ubuntu, Anda perlu menginstal ketergantungan build:
sudo apt install libudev-dev
Anda juga perlu diinstal goreleaser, dan biner (atau symlink) di bin/goreleaser .
ln -s $(command -v goreleaser) bin/goreleaser
Maka Anda bisa membangun:
make build
Sub Command EXEC akan mengekspor variabel lingkungan berikut.
Catatan: Variabel lingkungan profil memungkinkan Anda menggunakan exec dengan skrip atau perintah yang memerlukan profil eksplisit.
Alat ini tidak akan mungkin terjadi tanpa beberapa perpustakaan OpenSource yang hebat.
git tag -as vX.XXmake builddist/ Project Root Directorygit push origin vX.XXAda dua tingkat debugging, pertama memancarkan informasi debug dan URL / Metode / Status Lini Permintaan.
saml2aws login --verbose
Yang kedua memancarkan konten permintaan dan tanggapan, ini termasuk informasi terkait otentikasi jadi jangan menyalin dan menempelkannya ke obrolan atau tiket!
DUMP_CONTENT=true saml2aws login --verbose
Proses kredensial adalah cara yang nyaman untuk menghubungkan penyedia kredensial dengan AWS CLI.
Anda dapat menggunakan saml2aws sebagai penyedia kredensial hanya dengan mengonfigurasinya dan kemudian menambahkan profil ke konfigurasi AWS. saml2aws memiliki bendera --credential-process yang menghasilkan output dengan format JSON yang tepat, serta bendera --quiet yang akan memblokir penebangan dari ditampilkan. File kredensial AWS (biasanya ~/.aws/kredensial) memiliki prioritas daripada penyedia kredensial_process. Itu berarti bahwa jika kredensial hadir dalam file, proses kredensial tidak akan memicu. Untuk melawan Anda dapat mengganti lokasi kredensial AWS saml2aws ke file lain menggunakan --credential-file atau menentukannya selama configure .
File kredensial AWS (biasanya ~/.aws/kredensial) memiliki prioritas daripada penyedia kredensial_process. Itu berarti bahwa jika kredensial hadir dalam file, proses kredensial tidak akan memicu.
Contoh konfigurasi AWS ( ~/.aws/config ):
[profile mybucket]
region = us-west-1
credential_process = saml2aws login --credential-process --role <ROLE> --profile mybucket
Anda dapat menambahkan ini secara manual atau melalui AWSCLI, yaitu
aws configure set credential_process "saml2aws login --credential-process --role <ROLE> --profile mybucket"
Saat menggunakan AWS CLI dengan profil mybucket , proses otentikasi akan dijalankan dan AWS kemudian akan dieksekusi berdasarkan kredensial yang dikembalikan.
Anda dapat menggunakan bendera --cache-saml untuk menyimpan pernyataan SAML pada waktu otentikasi. Cache pernyataan SAML memiliki validitas yang sangat pendek (5 menit) dan dapat digunakan untuk mengotentikasi beberapa peran dengan validasi MFA tunggal.
Ada file per profil Saml2AWS, direktori cache disebut saml2aws dan terletak di direktori .aws Anda di homedir pengguna Anda.
Anda dapat beralih --cache-saml selama login atau selama list-roles , dan Anda dapat mengaturnya sekali selama configure dan menggunakannya secara implisit.
Ini membutuhkan penggunaan gantungan kunci (toko kredensial lokal). Jika Anda menonaktifkan gantungan gantungan kunci menggunakan --disable-keychain , sesi Okta juga akan dinonaktifkan.
Sesi OKTA diaktifkan secara default. Ini akan menyimpan sesi Okta secara lokal dan menyimpan perangkat Anda untuk MFA. Ini berarti bahwa jika sesi belum kedaluwarsa, Anda tidak akan diminta untuk MFA.
--disable-remember-device selama login atau configure perintah.--disable-sessions selama login atau configure perintah. Gunakan bendera --force selama perintah login untuk meminta pemilihan peran AWS.
Jika sesi OKTA dinonaktifkan melalui salah satu metode yang disebutkan di atas, proses login akan default ke proses otentikasi standar (tanpa menggunakan sesi).
Harap dicatat bahwa durasi sesi OKTA Anda dan kebijakan MFA diatur oleh organisasi tuan rumah Okta Anda.
Kode ini adalah hak cipta (c) 2024 Versent dan dirilis di bawah lisensi MIT. Semua hak yang tidak secara eksplisit diberikan dalam lisensi MIT dilindungi. Lihat file lisensi.md yang disertakan untuk lebih jelasnya.