gimme-aws-creds คือ CLI ที่ใช้ Okta IdP ผ่าน SAML เพื่อรับข้อมูลรับรอง AWS ชั่วคราวผ่าน AWS STS
Okta เป็นผู้ให้บริการข้อมูลประจำตัว SAML (IdP) ที่สามารถตั้งค่าเพื่อทำ SSO บนคอนโซล AWS ของคุณได้อย่างง่ายดาย Okta เสนอเครื่องมือ OSS java CLI เพื่อรับข้อมูลรับรอง AWS ชั่วคราว แต่ฉันพบว่ามันต้องการข้อมูลมากกว่าที่ผู้ใช้ Okta ทั่วไปจะมีและปรับขนาดได้ไม่ดีนักหากมีแอป Okta มากกว่าหนึ่งแอป
ด้วย gimme-aws-creds สิ่งที่คุณต้องรู้ก็คือชื่อผู้ใช้ รหัสผ่าน Okta url และโทเค็น MFA หากเปิดใช้งาน MFA gimme-aws-creds ให้ตัวเลือกแก่คุณในการเลือกแอปพลิเคชัน Okta AWS และบทบาทที่คุณต้องการข้อมูลรับรอง หรือคุณสามารถกำหนดค่าแอปและชื่อบทบาทล่วงหน้าได้โดยส่ง -c หรือแก้ไขไฟล์กำหนดค่า ทั้งหมดนี้ครอบคลุมอยู่ในส่วนการใช้งาน
Okta เป็นเครื่องหมายการค้าจดทะเบียนของ Okta, Inc. และเครื่องมือนี้ไม่มีส่วนเกี่ยวข้องหรือสนับสนุนโดย Okta, Inc.
การรวม Okta SAML กับ AWS โดยใช้แอป AWS
ไพธอน 3.7+
gimme-aws-creds
ขึ้นอยู่กับไลบรารี ctap-keyring-device สำหรับการรองรับ WebAuthn ctap-keyring-device เวอร์ชันที่วางจำหน่ายทั้งหมดต้องใช้ winRT บน Windows ซึ่งใช้งานได้กับ Python 3.9 และต่ำกว่าเท่านั้น และไม่มีการดูแลรักษาอีกต่อไป จนกว่าจะมีเวอร์ชันของ ctap-keyring-device ที่รองรับ winSDK
(การแทนที่ winRT) ให้กับ PyPi หรือพบวิธีแก้ไขปัญหาอื่น การสนับสนุน WebAuthn จะไม่สามารถใช้งานได้สำหรับผู้ที่ใช้ Python 3.10+ บน Windows
Gimme-creds-lambda สามารถใช้เป็นพร็อกซีของ Okta API ที่จำเป็นโดย gimme-aws-creds สิ่งนี้จะลบข้อกำหนดของคีย์ Okta API Gimme-aws-creds ตรวจสอบสิทธิ์ gimme-creds-lambda โดยใช้ OpenID Connect และ lambda จะจัดการการโต้ตอบทั้งหมดกับ Okta API หรือคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม OKTA_API_KEY
และค่าการกำหนดค่า gimme_creds_server
เป็น 'ภายใน' เพื่อเรียก Okta API โดยตรงจาก gimme-aws-creds
นี่คือโครงการ Python 3
ติดตั้ง/อัปเกรดจาก PyPi:
pip3 install --upgrade gimme-aws-creds
หรือ
ติดตั้ง/อัปเกรดแพ็คเกจ gimme-aws-creds ล่าสุดโดยตรงจาก GitHub:
pip3 install --upgrade git+git://github.com/Nike-Inc/gimme-aws-creds.git
หรือ
ติดตั้งแพ็คเกจ gimme-aws-creds หากคุณได้โคลนแหล่งที่มาแล้ว:
python -m pip install .
หรือ
ใช้โฮมบรูว์
brew install gimme-aws-creds
หรือ
ใช้กับนิกซ์เฟลก
# 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} ] ;
} ;
}
) ;
}
หรือ
ใช้กับนิกซ์เดิมครับ
# 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)
] ;
}
หรือ
สร้างอิมเมจนักเทียบท่าในเครื่อง:
docker build -t gimme-aws-creds .
เพื่อให้ง่ายขึ้น คุณสามารถสร้างนามแฝงสำหรับคำสั่ง gimme-aws-creds ด้วย 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 "
ด้วยการกำหนดค่านี้ คุณจะสามารถรันคำสั่งเพิ่มเติมได้อย่างราบรื่น!
หากคุณใช้ Bash หรือ Zsh คุณสามารถเพิ่มการเติมข้อความอัตโนมัติสำหรับตัวเลือกบรรทัดคำสั่ง gimme-aws-creds และชื่อโปรไฟล์ได้ หากต้องการเพิ่มการกำหนดค่าเติมข้อความอัตโนมัติ ให้เพิ่มรายการต่อไปนี้ต่อท้าย .bashrc หรือ .zshrc:
.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
มีสองตัวเลือกในการใช้ gimme-aws-creds กับโดเมน OIE:
นี่เป็นวิธีที่แนะนำสำหรับการตรวจสอบสิทธิ์กับ OIE มันตรงกับโฟลว์ที่ใช้โดยไคลเอนต์ AWS ของ Okta เมื่อใช้ gimme-aws-creds กับขั้นตอนการอนุญาตอุปกรณ์ คุณจะตรวจสอบสิทธิ์โดยใช้เบราว์เซอร์ของคุณ การจัดเก็บข้อมูลประจำตัวในพวงกุญแจหรือการส่งรหัส MFA ผ่านบรรทัดคำสั่งนั้นเป็นไปไม่ได้
หากต้องการใช้ gimme-aws-creds กับโดเมน Okta Identity Engine (OIE) คุณต้องสร้าง OIDC Native Application ใหม่และเชื่อมต่อกับแอปการรวม AWS ของคุณ
แอปพลิเคชันเนทิฟ OIDC ต้องใช้ Authorization Code
Device Authorization
และ Token Exchange
การตั้งค่าเหล่านี้อยู่ใน Okta Admin UI ที่ Applications > [the OIDC app] > General Settings > Grant type
การจับคู่กับ AWS Federation Application ทำได้ในการตั้งค่าการลงชื่อเข้าใช้ของแอป Fed การตั้งค่าเหล่านี้อยู่ใน Okta Admin UI ที่ Applications > [the AWS Fed app] > Sign On
ตรวจสอบให้แน่ใจว่าได้ตั้งค่า Allowed Web SSO Client
เป็นรหัสไคลเอ็นต์ของแอปพลิเคชันเนทีฟ OIDC ทำซ้ำการตั้งค่านั้นสำหรับแต่ละแอปพลิเคชัน AWS ที่คุณต้องการเข้าถึงด้วย gimme-aws-creds
สุดท้าย ให้ตั้งค่า Client ID เป็น gimme-aws-creds ( gimme-aws-creds --action-configure
หรืออัปเดตพารามิเตอร์ client_id
ในไฟล์ปรับแต่งของคุณ)
ตรวจสอบให้แน่ใจว่าใช้นโยบายการตรวจสอบสิทธิ์เดียวกันสำหรับทั้งแอปพลิเคชัน AWS Federation และแอปพลิเคชัน OIDC (หรืออย่างน้อยก็ใช้กฎนโยบายที่เทียบเท่าสำหรับทั้งสอง) หากไม่เป็นเช่นนั้น คุณจะได้รับคำตอบ 400 Bad Request
เมื่อขอโทเค็น Web SSO
ขั้นตอนการเข้าสู่ระบบที่ใช้ใน Okta Classic ยังคงใช้งานได้กับโดเมน Okta Identity Engine แต่มีข้อแม้บางประการ:
stateToken
เมื่อร้องขอการตรวจสอบสิทธิ์แบบ "step-up" ความสามารถนี้ถูกลบออกใน OIE ดังนั้นหากนโยบายการตรวจสอบสิทธิ์ในแอป AWS ของคุณต้องใช้ MFA แต่นโยบายเซสชันทั่วโลกไม่บังคับ (หรือหากต้องใช้ปัจจัย MFA ระดับที่สูงกว่าในการเข้าถึง AWS) คุณจะไม่สามารถตรวจสอบสิทธิ์โดยใช้เวอร์ชันคลาสสิกได้ ขั้นตอนการเข้าสู่ระบบหากต้องการตั้งค่าให้รันการกำหนดค่า:
gimme-aws-creds --action-configure
คุณยังสามารถตั้งค่าโปรไฟล์การกำหนดค่า Okta ที่แตกต่างกันได้ ซึ่งจะมีประโยชน์หากคุณมีบัญชี Okta หลายบัญชีหรือสภาพแวดล้อมที่คุณต้องการข้อมูลรับรอง คุณสามารถใช้วิซาร์ดการกำหนดค่าหรือรัน:
gimme-aws-creds --action-configure --profile profileName
วิซาร์ดการกำหนดค่าจะแจ้งให้คุณป้อนพารามิเตอร์การกำหนดค่าที่จำเป็นสำหรับเครื่องมือที่จะรัน โดยสิ่งเดียวที่จำเป็นคือ okta_org_url
ไฟล์การกำหนดค่าถูกเขียนไปที่ ~/.okta_aws_login_config
แต่คุณสามารถเปลี่ยนตำแหน่งด้วยตัวแปรสภาพแวดล้อม OKTA_CONFIG
https://companyname.okta.com
OKTA_API_KEY
)~/.aws/credentials
มิฉะนั้นจะถูกเขียนไปที่ stdoutrole
คำที่สงวนไว้จะใช้ส่วนประกอบชื่อของบทบาท arn เป็นชื่อโปรไฟล์ เช่น arn:aws:iam::123456789012:role/okta-1234-role กลายเป็นส่วน [okta-1234-role] ในไฟล์ข้อมูลรับรอง awsacc
จะใช้หมายเลขบัญชี (หรือนามแฝง หากตั้ง resolve_aws_alias
เป็น y) เป็นชื่อโปรไฟล์ เช่น arn:aws:iam::123456789012:role/okta-1234-role กลายเป็นส่วน [arn:aws:iam::123456789012] หรือถ้า resolve_aws_alias
[okta-1234-role] ในไฟล์ข้อมูลรับรอง awsacc-role
จะใช้ส่วนประกอบชื่อของบทบาท arn นำหน้าด้วยหมายเลขบัญชี (หรือนามแฝง หากตั้ง resolve_aws_alias
เป็น y) เพื่อหลีกเลี่ยงการชนกัน เช่น arn:aws:iam::123456789012:role/okta-1234-role กลายเป็นส่วน [123456789012-okta-1234-role] หรือถ้า resolve_aws_alias
[okta-1234-role] ในไฟล์ข้อมูลรับรอง awsdefault
ต้น ข้อมูลชั่วคราวจะถูกจัดเก็บไว้ในโปรไฟล์เริ่มต้นdefault
ไว้ จะถูกเขียนทับหลายครั้งและชนะบทบาทสุดท้าย สิ่งเดียวกันนี้จะเกิดขึ้นเมื่อเลือก role
และคุณมีหลายบัญชีที่มีชื่อบทบาทเหมือนกัน พิจารณาใช้ acc-role
หากเกิดเหตุการณ์เช่นนี้OKTA_MFA_CODE
หรือ --mfa-code
หากตั้งค่าไว้ หรือแจ้งให้ผู้ใช้ใส่รหัสผ่าน (OTP)Duo Push
(ค่าเริ่มต้น)Passcode
Phone Call
-r
หรือ --resolve
y
: -/some/path/administrator
ถ้า n
: -administrator
-m
หรือ --remember-device
json
, export
หรือ windows
กำหนดรูปแบบเอาต์พุตหนังสือรับรองเริ่มต้น ยังสามารถระบุโดย --output-format FORMAT
และ -o FORMAT
ไฟล์กำหนดค่าเป็นไปตามรูปแบบไฟล์กำหนดค่า โดยค่าเริ่มต้น จะอยู่ใน $HOME/.okta_aws_login_config
ไฟล์ตัวอย่าง:
[myprofile]
client_id = myclient_id
การกำหนดค่าสามารถสืบทอดมาจากการกำหนดค่าอื่นเพื่อใช้พารามิเตอร์การกำหนดค่าทั่วไปร่วมกัน
[my-base-profile]
client_id = myclient_id
[myprofile]
inherits = my-base-profile
aws_rolename = my-role
หากคุณไม่ได้ใช้ gimme-creds-lambda หรือใช้การตั้งค่า appurl ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าตัวแปรสภาพแวดล้อม OKTA_API_KEY
หลังจากรัน --action-configure แล้ว ให้รัน gimme-aws-creds คุณจะได้รับแจ้งข้อมูลที่จำเป็น
$ ./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
คุณสามารถสร้างตัวแปรสภาพแวดล้อมโดยอัตโนมัติได้ด้วยการรัน $(gimme-aws-creds)
บน linux หรือ gimme-aws-creds | iex
โดยใช้ Windows Powershell
คุณสามารถรันโปรไฟล์การกำหนดค่าเฉพาะด้วยพารามิเตอร์ --profile
:
./gimme-aws-creds --profile profileName
ชื่อผู้ใช้และรหัสผ่านที่คุณได้รับแจ้งคือชื่อผู้ใช้และรหัสผ่านที่คุณใช้เข้าสู่ระบบ Okta คุณสามารถกำหนดชื่อผู้ใช้ของคุณล่วงหน้าได้โดยตั้งค่าตัวแปรสภาพแวดล้อม OKTA_USERNAME
หรือใช้พารามิเตอร์ -u username
หากคุณไม่ได้กำหนดค่าแอปหรือบทบาท Okta คุณจะได้รับแจ้งให้เลือกหนึ่งรายการ
หากทุกอย่างเป็นไปด้วยดี คุณจะได้รับสิทธิ์เข้าถึง AWS, รหัสลับ และโทเค็นชั่วคราว ซึ่งสิ่งเหล่านี้จะถูกเขียนไปที่ stdout หรือ ~/.aws/credentials
คุณสามารถเรียกใช้ gimme-aws-creds --help
สำหรับตัวเลือกที่มีทั้งหมดได้ตลอดเวลา
หรือคุณสามารถเขียนทับค่าในส่วนการกำหนดค่าด้วยตัวแปรสภาพแวดล้อมได้ เช่น ในกรณีที่คุณอาจต้องการเปลี่ยนระยะเวลาของโทเค็นของคุณ รายการค่าที่จะเปลี่ยนแปลงด้วยตัวแปรสภาพแวดล้อมคือ:
AWS_DEFAULT_DURATION
- สอดคล้องกับการกำหนดค่า aws_default_duration
AWS_SHARED_CREDENTIALS_FILE
- ไฟล์สำหรับเขียนข้อมูลรับรอง ชี้ไปที่ ~/.aws/credentials
ตามค่าเริ่มต้นGIMME_AWS_CREDS_CLIENT_ID
- สอดคล้องกับการกำหนดค่า client_id
GIMME_AWS_CREDS_CRED_PROFILE
- สอดคล้องกับการกำหนดค่า cred_profile
GIMME_AWS_CREDS_OUTPUT_FORMAT
- สอดคล้องกับการกำหนด output_format
และตัวเลือก --output-format
CLIOKTA_AUTH_SERVER
- สอดคล้องกับการกำหนดค่า okta_auth_server
OKTA_DEVICE_TOKEN
- สอดคล้องกับการกำหนดค่า device_token
สามารถใช้ใน CIOKTA_MFA_CODE
- สอดคล้องกับตัวเลือก --mfa-code
CLIOKTA_PASSWORD
- ระบุรหัสผ่านระหว่างการตรวจสอบสิทธิ์ สามารถใช้ใน CI ได้OKTA_USERNAME
- สอดคล้องกับการกำหนดค่า okta_username
และตัวเลือก --username
CLIAWS_STS_REGION
- บังคับให้ใช้ STS ในภูมิภาคเฉพาะ ( us-east-1
, eu-north-1
ฯลฯ ) ตัวอย่าง: GIMME_AWS_CREDS_CLIENT_ID='foobar' AWS_DEFAULT_DURATION=12345 gimme-aws-creds
สำหรับการเปลี่ยนแปลงตัวแปรนอกเหนือจากนี้ คุณจะต้องสร้างโปรไฟล์แยกต่างหากพร้อมกับ gimme-aws-creds --action-configure --profile profileName
gimme-aws-creds --action-list-profiles
จะไปที่ไฟล์กำหนดค่า okta ของคุณและพิมพ์โปรไฟล์ทั้งหมดที่สร้างขึ้นและการตั้งค่า
gimme-aws-creds --action-list-roles
จะพิมพ์บทบาทที่มีอยู่ทั้งหมดไปยัง STDOUT โดยไม่ต้องดึงข้อมูลประจำตัว
การเขียนลงในไฟล์ข้อมูลรับรอง AWS จะรวมค่า x_security_token_expires
ในรูปแบบ RFC3339 ซึ่งช่วยให้เครื่องมือสามารถตรวจสอบได้ว่าข้อมูลรับรองกำลังจะหมดอายุหรือกำลังจะหมดอายุเร็วๆ นี้ และเตือนผู้ใช้หรือทริกเกอร์การรีเฟรช
gimme-aws-creds -o json
จะพิมพ์ข้อมูลรับรองในรูปแบบ JSON - 1 รายการต่อบรรทัด
gimme-aws-creds --action-store-json-creds
จะจัดเก็บข้อมูลรับรองที่จัดรูปแบบ JSON จาก stdin
ไปยังไฟล์ข้อมูลประจำตัว aws เช่น: gimme-aws-creds -o json | gimme-aws-creds --action-store-json-creds
ข้อมูลสามารถแก้ไขได้ด้วยสคริปต์ระหว่างทาง
การกำหนดค่าและการโต้ตอบสามารถกำหนดค่าได้โดยใช้ gimme_aws_creds.ui
ส่วน UserInterfaces รองรับการโต้ตอบทุกประเภทภายในไลบรารี รวมถึง: การขออินพุต, sys.argv
และการลบล้าง os.environ
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 ทำงานได้ทั้งบนองค์กรที่เปิดใช้งาน FIDO1 และองค์กรที่เปิดใช้งาน WebAuthN
โปรดทราบว่า FIDO1 อาจจะเลิกใช้งานในอนาคตอันใกล้นี้เนื่องจากมาตรฐานก้าวไปสู่ WebAuthN
รองรับ WebAuthN สำหรับคีย์ความปลอดภัย usb (gimme-aws-creds อาศัย yubico fido2 lib)
หากต้องการใช้เครื่องท้องถิ่นของคุณเป็นเครื่องยืนยันตัวตน ร่วมกับ Touch ID หรือ Windows Hello หากมี คุณต้องลงทะเบียนเครื่องยืนยันตัวตนใหม่ผ่าน gimme-aws-creds โดยใช้:
gimme-aws-creds --action-setup-fido-authenticator
จากนั้น คุณสามารถเลือกตัวรับรองความถูกต้องที่ลงทะเบียนใหม่ได้จากรายการปัจจัย
คุณสามารถรันการทดสอบหน่วยทั้งหมดโดยใช้ pytest ข้อสอบส่วนใหญ่จะเป็นการล้อเลียน
pytest -vv tests
โครงการนี้ดูแลโดย Eric Pierce
ฉันเจอ okta_aws_login ที่เขียนโดย Joe Keegan เมื่อฉันค้นหาเครื่องมือ CLI ที่สร้างโทเค็น AWS ผ่าน Okta น่าเสียดายที่ยังไม่ได้รับการอัปเดตตั้งแต่ปี 2558 และดูเหมือนว่าจะใช้งานไม่ได้กับเวอร์ชัน Okta ปัจจุบัน แต่ก็ยังมีโค้ดดีๆ อยู่บ้างที่ฉันสามารถนำมาใช้ซ้ำได้ภายใต้ใบอนุญาต MIT สำหรับ gimme-aws-creds ฉันได้ระบุไว้ในความคิดเห็นที่ฉันใช้รหัสของเขาเพื่อให้แน่ใจว่าเขาได้รับเครดิตที่เหมาะสม
okta-aws-cli
okta-aws-cli-สมมติบทบาท
AWS - วิธีใช้งาน Federated API และการเข้าถึง CLI โดยใช้ SAML 2.0 และ AD FS
Gimme AWS Creds เปิดตัวภายใต้ Apache License เวอร์ชัน 2.0