gimme-aws-creds adalah CLI yang menggunakan IdP Okta melalui SAML untuk memperoleh kredensial AWS sementara melalui AWS STS.
Okta adalah penyedia identitas (IdP) SAML, yang dapat dengan mudah diatur untuk melakukan SSO ke konsol AWS Anda. Okta memang menawarkan alat OSS java CLI untuk mendapatkan kredensial AWS sementara, tetapi menurut saya alat ini memerlukan lebih banyak informasi daripada rata-rata pengguna Okta dan tidak dapat diskalakan dengan baik jika memiliki lebih dari satu Aplikasi Okta.
Dengan gimme-aws-creds yang perlu Anda ketahui hanyalah nama pengguna, kata sandi, url Okta, dan token MFA, jika MFA diaktifkan. gimme-aws-creds memberi Anda opsi untuk memilih aplikasi Okta AWS dan peran mana yang kredensialnya Anda inginkan. Alternatifnya, Anda dapat melakukan pra-konfigurasi aplikasi dan nama peran dengan meneruskan -c atau mengedit file konfigurasi. Ini semua tercakup dalam bagian penggunaan.
Okta adalah merek dagang terdaftar dari Okta, Inc. dan alat ini tidak memiliki afiliasi atau sponsor oleh Okta, Inc.
Integrasi Okta SAML ke AWS menggunakan Aplikasi AWS
Python 3.7+
gimme-aws-creds
bergantung pada pustaka ctap-keyring-device untuk dukungan WebAuthn. Semua versi ctap-keyring-device yang dirilis memerlukan winRT di Windows, yang hanya berfungsi pada Python 3.9 dan lebih rendah dan tidak lagi dipertahankan. Hingga versi ctap-keyring-device yang mendukung winSDK
(pengganti winRT) dirilis ke PyPi, atau solusi lain ditemukan, dukungan WebAuthn tidak akan tersedia untuk orang yang menjalankan Python 3.10+ di Windows.
Gimme-creds-lambda dapat digunakan sebagai proxy ke API Okta yang dibutuhkan oleh gimme-aws-creds. Ini menghilangkan persyaratan kunci API Okta. Gimme-aws-creds mengautentikasi ke gimme-creds-lambda menggunakan OpenID Connect dan lambda menangani semua interaksi dengan API Okta. Sebagai alternatif, Anda dapat mengatur variabel lingkungan OKTA_API_KEY
dan nilai konfigurasi gimme_creds_server
ke 'internal' untuk memanggil API Okta langsung dari gimme-aws-creds.
Ini adalah proyek Python 3.
Instal/Tingkatkan dari PyPi:
pip3 install --upgrade gimme-aws-creds
ATAU
Instal/Tingkatkan paket gimme-aws-creds terbaru langsung dari GitHub:
pip3 install --upgrade git+git://github.com/Nike-Inc/gimme-aws-creds.git
ATAU
Instal paket gimme-aws-creds jika Anda sudah mengkloning sumbernya:
python -m pip install .
ATAU
Gunakan minuman rumahan
brew install gimme-aws-creds
ATAU
Gunakan dengan serpihan nix
# flake.nix
# Use by running `nix develop`
{
description = " Shell example " ;
inputs.flake-utils.url = " github:numtide/flake-utils " ;
inputs.nixpkgs.url = " github:nixos/nixpkgs/nixos-unstable " ;
inputs.gimme-aws-creds.url = " github:Nike-Inc/gimme-aws-creds " ;
outputs = {
self,
nixpkgs,
flake-utils,
gimme-aws-creds,
...
} @ inputs:
flake-utils.lib.eachDefaultSystem
(
system: let
pkgs = nixpkgs.legacyPackages. ${system} ;
in {
devShells.default = pkgs.mkShell {
packages = [pkgs.bash gimme-aws-creds.defaultPackage. ${system} ] ;
} ;
}
) ;
}
ATAU
Gunakan dengan nix asli
# shell.nix
# Use by running `nix-shell`
{pkgs ? import < nixpkgs > {}, ...}:
with pkgs ; let
gimme-src = fetchgit {
name = " gimme-aws-creds " ;
url = " https://github.com/Nike-Inc/gimme-aws-creds " ;
branchName = " master " ;
sha256 = " " ; # nix-prefetch-url --unpack https://github.com/Nike-Inc/gimme-aws-creds/archive/master.tar.gz
} ;
gimme-aws-creds = import gimme-src ;
in
mkShell rec {
name = " gimme-aws-creds " ;
buildInputs = [
bash
(gimme-aws-creds.default)
] ;
}
ATAU
Bangun image buruh pelabuhan secara lokal:
docker build -t gimme-aws-creds .
Agar lebih mudah Anda juga dapat membuat alias untuk perintah gimme-aws-creds dengan docker:
# make sure you have the "~/.okta_aws_login_config" locally first!
touch ~ /.okta_aws_login_config &&
alias gimme-aws-creds= " docker run -it --rm
-v ~/.aws/credentials:/root/.aws/credentials
-v ~/.okta_aws_login_config:/root/.okta_aws_login_config
gimme-aws-creds "
Dengan konfigurasi ini, Anda akan dapat menjalankan perintah selanjutnya dengan lancar!
Jika Anda menggunakan Bash atau Zsh, Anda dapat menambahkan pelengkapan otomatis untuk opsi baris perintah gimme-aws-creds dan nama profil. Untuk menambahkan konfigurasi pelengkapan otomatis, tambahkan baris berikut di akhir .bashrc atau .zshrc Anda:
.bashrc
INSTALL_DIR= $( dirname $( which gimme-aws-creds ) )
source ${INSTALL_DIR} /gimme-aws-creds-autocomplete.sh "
.zshrc
INSTALL_DIR= $( dirname $( which gimme-aws-creds ) )
autoload bashcompinit
bashcompinit
source ${INSTALL_DIR} /gimme-aws-creds-autocomplete.sh
Ada dua opsi untuk menggunakan gimme-aws-creds dengan domain OIE:
Ini adalah metode yang disarankan untuk otentikasi dengan OIE. Ini cocok dengan aliran yang digunakan oleh klien AWS Okta. Saat menggunakan gimme-aws-creds dengan alur Otorisasi Perangkat, Anda akan mengautentikasi menggunakan browser Anda. Menyimpan kredensial di gantungan kunci atau meneruskan kode MFA melalui baris perintah TIDAK MUNGKIN.
Untuk menggunakan gimme-aws-creds dengan domain Okta Identity Engine (OIE), Anda harus membuat Aplikasi Asli OIDC baru dan menghubungkannya ke aplikasi integrasi AWS Anda.
Aplikasi Asli OIDC memerlukan Authorization Code
Jenis Hibah, Device Authorization
, dan Token Exchange
. Pengaturan ini ada di Okta Admin UI di Applications > [the OIDC app] > General Settings > Grant type
.
Pemasangan dengan Aplikasi Federasi AWS dilakukan di Pengaturan Masuk aplikasi Fed. Pengaturan ini ada di UI Admin Okta di Applications > [the AWS Fed app] > Sign On
. Pastikan untuk mengatur nilai Allowed Web SSO Client
ke ID Klien Aplikasi Asli OIDC. Ulangi pengaturan tersebut untuk setiap aplikasi AWS yang ingin Anda akses dengan gimme-aws-creds.
Terakhir, atur ID Klien di gimme-aws-creds ( gimme-aws-creds --action-configure
atau perbarui parameter client_id
di file konfigurasi Anda)
Pastikan untuk menggunakan kebijakan autentikasi yang sama untuk Aplikasi Federasi AWS dan aplikasi OIDC (atau setidaknya gunakan aturan kebijakan yang setara untuk keduanya). Jika tidak, Anda akan menerima respons 400 Bad Request
saat meminta token SSO Web.
Alur login yang digunakan di Okta Classic saat ini masih berfungsi dengan domain Okta Identity Engine, TAPI ada beberapa peringatan:
stateToken
saat meminta autentikasi "peningkatan". Kemampuan ini telah dihapus di OIE, jadi jika kebijakan autentikasi pada aplikasi AWS Anda memerlukan MFA namun Kebijakan Sesi Global tidak (atau jika tingkat faktor MFA yang lebih tinggi diperlukan untuk mengakses AWS), Anda tidak dapat mengautentikasi menggunakan klasik alur masuk.Untuk mengatur konfigurasi, jalankan:
gimme-aws-creds --action-configure
Anda juga dapat mengatur profil konfigurasi Okta yang berbeda, ini berguna jika Anda memiliki beberapa akun Okta atau lingkungan yang memerlukan kredensial. Anda dapat menggunakan wizard konfigurasi atau menjalankan:
gimme-aws-creds --action-configure --profile profileName
Wizard konfigurasi akan meminta Anda memasukkan parameter konfigurasi yang diperlukan agar alat dapat dijalankan, satu-satunya yang diperlukan adalah okta_org_url
. File konfigurasi ditulis ke ~/.okta_aws_login_config
, tetapi Anda dapat mengubah lokasi dengan variabel lingkungan OKTA_CONFIG
.
https://companyname.okta.com
.OKTA_API_KEY
)~/.aws/credentials
jika tidak maka akan ditulis ke stdout.role
kata yang dicadangkan akan menggunakan komponen nama peran arn sebagai nama profil. yaitu arn:aws:iam::123456789012:role/okta-1234-role menjadi bagian [okta-1234-role] di file kredensial awsacc
akan menggunakan nomor akun (atau alias jika resolve_aws_alias
diatur ke y) sebagai nama profil. yaitu arn:aws:iam::123456789012:role/okta-1234-role menjadi bagian [arn:aws:iam::123456789012] atau jika resolve_aws_alias
[okta-1234-role] di file kredensial aws.acc-role
akan menggunakan komponen nama peran arn yang diawali dengan nomor akun (atau alias jika resolve_aws_alias
diatur ke y) untuk menghindari tabrakan, yaitu arn:aws:iam::123456789012:role/okta-1234-role menjadi bagian [123456789012-okta-1234-role], atau jika resolve_aws_alias
[okta-1234-role] dalam file kredensial awsdefault
maka kredit sementara akan disimpan di profil defaultdefault
dipilih maka akan ditimpa beberapa kali dan peran terakhir menang. Hal yang sama terjadi ketika role
dipilih dan Anda memiliki banyak akun dengan nama peran yang sama. Pertimbangkan untuk menggunakan acc-role
jika ini terjadi.OKTA_MFA_CODE
atau --mfa-code
jika disetel, atau meminta pengguna memasukkan kode sandi (OTP).Duo Push
(default)Passcode
Phone Call
-r
atau --resolve
y
: -/some/path/administrator
. Jika n
: -administrator
-m
atau --remember-device
json
, export
atau windows
, menentukan format keluaran kredensial default, dapat juga ditentukan dengan --output-format FORMAT
dan -o FORMAT
.File konfigurasi mengikuti format file konfigurasi. Secara default, ini terletak di $HOME/.okta_aws_login_config
Contoh berkas:
[myprofile]
client_id = myclient_id
Konfigurasi dapat mewarisi dari konfigurasi lain untuk berbagi parameter konfigurasi umum.
[my-base-profile]
client_id = myclient_id
[myprofile]
inherits = my-base-profile
aws_rolename = my-role
Jika Anda tidak menggunakan gimme-creds-lambda atau menggunakan pengaturan appurl, pastikan Anda mengatur variabel lingkungan OKTA_API_KEY.
Setelah menjalankan --action-configure, jalankan gimme-aws-creds. Anda akan dimintai informasi yang diperlukan.
$ ./gimme-aws-creds
Username: [email protected]
Password for [email protected]:
Authentication Success ! Calling Gimme-Creds Server...
Pick an app:
[ 0 ] AWS Test Account
[ 1 ] AWS Prod Account
Selection: 1
Pick a role:
[ 0 ]: OktaAWSAdminRole
[ 1 ]: OktaAWSReadOnlyRole
Selection: 1
Multi-factor Authentication required.
Pick a factor:
[ 0 ] Okta Verify App: SmartPhone_IPhone: iPhone
[ 1 ] token:software:totp: [email protected]
Selection: 0
Okta Verify push sent...
export AWS_ACCESS_KEY_ID=AQWERTYUIOP
export AWS_SECRET_ACCESS_KEY=T ! # $JFLOJlsoddop1029405-P
Anda dapat mengotomatiskan pembuatan variabel lingkungan dengan menjalankan $(gimme-aws-creds)
di linux atau gimme-aws-creds | iex
menggunakan Windows Powershell
Anda dapat menjalankan profil konfigurasi tertentu dengan parameter --profile
:
./gimme-aws-creds --profile profileName
Nama pengguna dan kata sandi yang diminta adalah yang Anda gunakan untuk masuk ke Okta. Anda dapat menentukan nama pengguna Anda terlebih dahulu dengan mengatur variabel lingkungan OKTA_USERNAME
atau menggunakan parameter -u username
.
Jika Anda belum mengonfigurasi Aplikasi atau Peran Okta, Anda akan diminta untuk memilih salah satu.
Jika semuanya berjalan dengan baik, Anda akan mendapatkan akses AWS sementara, kunci rahasia, dan token, ini akan ditulis ke stdout atau ~/.aws/credentials
.
Anda selalu dapat menjalankan gimme-aws-creds --help
untuk semua opsi yang tersedia.
Alternatifnya, Anda dapat menimpa nilai di bagian konfigurasi dengan variabel lingkungan misalnya Anda mungkin ingin mengubah durasi token Anda. Daftar nilai yang akan diubah dengan variabel lingkungan adalah:
AWS_DEFAULT_DURATION
- sesuai dengan konfigurasi aws_default_duration
AWS_SHARED_CREDENTIALS_FILE
- file untuk menulis kredensial, menunjuk ke ~/.aws/credentials
secara defaultGIMME_AWS_CREDS_CLIENT_ID
- sesuai dengan konfigurasi client_id
GIMME_AWS_CREDS_CRED_PROFILE
- sesuai dengan konfigurasi cred_profile
GIMME_AWS_CREDS_OUTPUT_FORMAT
- sesuai dengan konfigurasi output_format
dan opsi CLI --output-format
OKTA_AUTH_SERVER
- sesuai dengan konfigurasi okta_auth_server
OKTA_DEVICE_TOKEN
- sesuai dengan konfigurasi device_token
, dapat digunakan di CIOKTA_MFA_CODE
- sesuai dengan opsi CLI --mfa-code
OKTA_PASSWORD
- memberikan kata sandi selama otentikasi, dapat digunakan di CIOKTA_USERNAME
- sesuai dengan konfigurasi okta_username
dan opsi CLI --username
AWS_STS_REGION
- memaksa penggunaan STS di wilayah tertentu ( us-east-1
, eu-north-1
, dll.) Contoh: GIMME_AWS_CREDS_CLIENT_ID='foobar' AWS_DEFAULT_DURATION=12345 gimme-aws-creds
Untuk mengubah variabel di luar ini, Anda perlu membuat profil terpisah dengan gimme-aws-creds --action-configure --profile profileName
gimme-aws-creds --action-list-profiles
akan membuka file konfigurasi okta Anda dan mencetak semua profil yang dibuat dan pengaturannya.
gimme-aws-creds --action-list-roles
akan mencetak semua peran yang tersedia ke STDOUT tanpa mengambil kredensialnya.
Menulis ke file kredensial AWS akan menyertakan nilai x_security_token_expires
dalam format RFC3339. Hal ini memungkinkan alat untuk memvalidasi apakah kredensial akan habis masa berlakunya atau akan segera habis masa berlakunya dan memperingatkan pengguna atau memicu penyegaran.
gimme-aws-creds -o json
akan mencetak kredensial dalam format JSON - 1 entri per baris
gimme-aws-creds --action-store-json-creds
akan menyimpan kredensial berformat JSON dari stdin
ke file kredensial aws, misalnya: gimme-aws-creds -o json | gimme-aws-creds --action-store-json-creds
. Data dapat dimodifikasi dengan skrip dalam perjalanan.
Konfigurasi dan interaksi dapat dikonfigurasi menggunakan gimme_aws_creds.ui
, UserInterfaces mendukung semua jenis interaksi dalam perpustakaan termasuk: meminta masukan, sys.argv
dan os.environ
override.
import sys
import gimme_aws_creds . main
import gimme_aws_creds . ui
account_ids = sys . argv [ 1 :] or [
'123456789012' ,
'120123456789' ,
]
pattern = "|" . join ( sorted ( set ( account_ids )))
pattern = '/:({}):/' . format ( pattern )
ui = gimme_aws_creds . ui . CLIUserInterface ( argv = [ sys . argv [ 0 ], '--roles' , pattern ])
creds = gimme_aws_creds . main . GimmeAWSCreds ( ui = ui )
# Print out all selected roles:
for role in creds . aws_selected_roles :
print ( role )
# Generate credentials overriding profile name with `okta-`
for data in creds . iter_selected_aws_credentials ():
arn = data [ 'role' ][ 'arn' ]
account_id = None
for piece in arn . split ( ':' ):
if len ( piece ) == 12 and piece . isdigit ():
account_id = piece
break
if account_id is None :
raise ValueError ( "Didn't find aws_account_id (12 digits) in {}" . format ( arn ))
data [ 'profile' ][ 'name' ] = 'okta-{}' . format ( account_id )
creds . write_aws_creds_from_data ( data )
gimme-aws-creds berfungsi pada organisasi yang mendukung FIDO1 dan organisasi yang mendukung WebAuthN
Perhatikan bahwa FIDO1 mungkin tidak akan digunakan lagi dalam waktu dekat karena standar beralih ke WebAuthN
Dukungan WebAuthN tersedia untuk kunci keamanan usb (gimme-aws-creds bergantung pada lib yubico fido2).
Untuk menggunakan mesin lokal Anda sebagai pengautentikasi, bersama dengan Touch ID atau Windows Hello, jika tersedia, Anda harus mendaftarkan pengautentikasi baru melalui gimme-aws-creds, menggunakan:
gimme-aws-creds --action-setup-fido-authenticator
Kemudian, Anda dapat memilih pengautentikasi yang baru didaftarkan dari daftar faktor.
Anda dapat menjalankan semua pengujian unit menggunakan pytest. Sebagian besar tes diejek.
pytest -vv tests
Proyek ini dikelola oleh Eric Pierce
Saya menemukan okta_aws_login yang ditulis oleh Joe Keegan, ketika saya sedang mencari alat CLI yang menghasilkan token AWS melalui Okta. Sayangnya ini belum diperbarui sejak tahun 2015 dan sepertinya tidak berfungsi dengan versi Okta saat ini. Namun masih ada beberapa kode bagus yang dapat saya gunakan kembali di bawah lisensi MIT untuk gimme-aws-creds. Saya telah mencatat di komentar di mana saya menggunakan kodenya, untuk memastikan dia menerima kredit yang tepat.
okta-aws-cli
okta-aws-cli-mengambil peran
AWS - Cara Mengimplementasikan API Federasi dan Akses CLI Menggunakan SAML 2.0 dan AD FS
Beri aku AWS Creds dirilis di bawah Lisensi Apache, Versi 2.0