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 لدعم WebAuthn. تتطلب كافة الإصدارات التي تم إصدارها من ctap-keyring-device استخدام WinRT على نظام التشغيل Windows، والذي يعمل فقط على إصدار Python 3.9 والإصدارات الأقدم ولم يعد يتم صيانته. حتى يتم إصدار إصدار من جهاز ctap-keyring الذي يدعم winSDK
(بديل WinRT) إلى PyPi، أو يتم العثور على حل آخر، لن يكون دعم WebAuthn متاحًا للأشخاص الذين يستخدمون Python 3.10+ على Windows.
يمكن استخدام Gimme-creds-lambda كوكيل لواجهات برمجة تطبيقات Okta التي تحتاجها gimme-aws-creds. يؤدي هذا إلى إزالة متطلبات مفتاح Okta API. تتم مصادقة Gimme-aws-creds إلى gimme-creds-lambda باستخدام OpenID Connect ويتعامل lambda مع جميع التفاعلات مع Okta APIs. بدلاً من ذلك، يمكنك تعيين متغير البيئة OKTA_API_KEY
وقيمة تكوين gimme_creds_server
على "داخلي" لاستدعاء واجهات برمجة تطبيقات Okta مباشرة من gimme-aws-creds.
هذا مشروع بايثون 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 أصلي جديد وتوصيله بتطبيق (تطبيقات) تكامل AWS الخاص بك.
يتطلب تطبيق OIDC الأصلي Authorization Code
أنواع المنح، Device Authorization
، Token Exchange
. توجد هذه الإعدادات في واجهة مستخدم Okta Admin في Applications > [the OIDC app] > General Settings > Grant type
.
يتم تحقيق الاقتران مع تطبيق اتحاد AWS في إعدادات تسجيل الدخول لتطبيق Fed. توجد هذه الإعدادات في واجهة مستخدم Okta Admin في Applications > [the AWS Fed app] > Sign On
. تأكد من تعيين قيمة Allowed Web SSO Client
على معرف العميل لتطبيق OIDC الأصلي. كرر هذا الإعداد لكل تطبيق AWS تريد الوصول إليه باستخدام بيانات اعتماد gimme-aws.
أخيرًا، قم بتعيين معرف العميل في gimme-aws-creds ( gimme-aws-creds --action-configure
أو قم بتحديث معلمة client_id
في ملف التكوين الخاص بك)
تأكد من استخدام نفس سياسة المصادقة لكل من تطبيق اتحاد AWS وتطبيق OIDC (أو على الأقل استخدم قواعد سياسة مكافئة لكليهما). إذا لم يكن الأمر كذلك، فسوف تتلقى استجابة 400 Bad Request
عند طلب رمز Web SSO المميز.
لا يزال تدفق تسجيل الدخول المستخدم في Okta Classic يعمل حاليًا مع نطاقات Okta Identity Engine، ولكن هناك بعض التحذيرات:
stateToken
عند طلب مصادقة "الخطوة". تمت إزالة هذه الإمكانية في 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
وإلا فستتم كتابتها إلى stdout.role
الكلمة المحجوزة مكون الاسم الخاص بالدور كاسم للملف الشخصي. على سبيل المثال، يصبح 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] في ملف بيانات اعتماد aws.acc-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
- يوفر كلمة المرور أثناء المصادقة، ويمكن استخدامها في CIOKTA_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 - إدخال واحد في كل سطر
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
تتم صيانة هذا المشروع بواسطة إريك بيرس
لقد صادفت okta_aws_login الذي كتبه جو كيجان، عندما كنت أبحث عن أداة CLI التي تنشئ رموز AWS المميزة عبر Okta. لسوء الحظ، لم يتم تحديثه منذ عام 2015 ولا يبدو أنه يعمل مع إصدار Okta الحالي. ولكن لا يزال هناك بعض التعليمات البرمجية الرائعة التي تمكنت من إعادة استخدامها بموجب ترخيص معهد ماساتشوستس للتكنولوجيا للحصول على اعتمادات gimme-aws. لقد لاحظت في التعليقات أنني استخدمت الرمز الخاص به للتأكد من حصوله على الائتمان المناسب.
أوكتا-أوس-cli
أوكتا أوس كلي تفترض الدور
AWS - كيفية تنفيذ الوصول الموحد لواجهة برمجة التطبيقات (API) وواجهة سطر الأوامر (CLI) باستخدام SAML 2.0 وAD FS
تم إصدار Gimme AWS Cres بموجب ترخيص Apache، الإصدار 2.0