gimme-aws-creds — это интерфейс командной строки, который использует Okta IdP через SAML для получения временных учетных данных AWS через AWS STS.
Okta — это поставщик удостоверений SAML (IdP), который можно легко настроить для единого входа в вашу консоль AWS. Okta действительно предлагает инструмент Java CLI OSS для получения временных учетных данных AWS, но я обнаружил, что ему требуется больше информации, чем обычному пользователю Okta, и он плохо масштабируется, если у него более одного приложения Okta.
С gimme-aws-creds все, что вам нужно знать, это ваше имя пользователя, пароль, URL-адрес Okta и токен 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 можно использовать в качестве прокси для API-интерфейсов Okta, необходимых для gimme-aws-creds. Это устраняет требование ключа API Okta. Gimme-aws-creds проверяет подлинность gimme-creds-lambda с помощью OpenID Connect, а лямбда обрабатывает все взаимодействия с API-интерфейсами Okta. Альтернативно вы можете установить переменную среды OKTA_API_KEY
и значение конфигурации gimme_creds_server
на «внутреннее», чтобы вызывать API-интерфейсы Okta непосредственно из 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} ] ;
} ;
}
) ;
}
ИЛИ
Использовать с оригинальным nix
# 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 с доменом МЭБ:
Это рекомендуемый метод аутентификации в МЭБ. Он соответствует потоку, используемому клиентом AWS Okta. При использовании gimme-aws-creds с потоком авторизации устройства вы будете проходить аутентификацию с помощью браузера. Хранение учетных данных в связке ключей или передача кодов MFA через командную строку НЕВОЗМОЖНЫ.
Чтобы использовать gimme-aws-creds с доменом Okta Identity Engine (OIE), необходимо создать новое собственное приложение OIDC и подключить его к приложениям интеграции AWS.
Для собственного приложения OIDC требуется Authorization Code
типов грантов, Device Authorization
и Token Exchange
. Эти настройки находятся в пользовательском интерфейсе администратора Okta в Applications > [the OIDC app] > General Settings > Grant type
.
Сопряжение с приложением AWS Federation осуществляется в настройках входа в приложение ФРС. Эти настройки находятся в пользовательском интерфейсе администратора Okta в разделе Applications > [the AWS Fed app] > Sign On
. Обязательно установите для параметра Allowed Web SSO Client
идентификатор клиента собственного приложения OIDC. Повторите эту настройку для каждого приложения AWS, к которому вы хотите получить доступ с помощью gimme-aws-creds.
Наконец, установите идентификатор клиента в gimme-aws-creds ( gimme-aws-creds --action-configure
или обновите параметр client_id
в вашем файле конфигурации).
Обязательно используйте одну и ту же политику аутентификации как для приложения AWS Federation, так и для приложения OIDC (или, по крайней мере, используйте эквивалентные правила политики для обоих). В противном случае вы получите ответ 400 Bad Request
при запросе токена веб-SSO.
Процесс входа в систему, используемый в Okta Classic, в настоящее время по-прежнему работает с доменами Okta Identity Engine, НО есть несколько предостережений:
stateToken
при запросе «повышающей» аутентификации. Эта возможность была удалена в МЭБ, поэтому, если политика аутентификации в ваших приложениях AWS требует MFA, а глобальная политика сеансов — нет (или если для доступа к AWS требуется более высокий уровень фактора MFA), вы не сможете пройти аутентификацию с помощью классического метода. поток входа в систему.Для настройки конфигурации выполните:
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
в противном случае они будут записаны в стандартный вывод.role
будет использовать компонент имени роли arn в качестве имени профиля. т.е. arn:aws:iam::123456789012:role/okta-1234-role становится разделом [okta-1234-role] в файле учетных данных aws.acc
будет использовать номер учетной записи (или псевдоним, если для 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, секретный ключ и токен. Они будут записаны либо в стандартный вывод, либо в ~/.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
и опции CLI --output-format
OKTA_AUTH_SERVER
— соответствует конфигурации okta_auth_server
OKTA_DEVICE_TOKEN
— соответствует конфигурации device_token
, может использоваться в CIOKTA_MFA_CODE
— соответствует опции CLI --mfa-code
OKTA_PASSWORD
— предоставляет пароль при аутентификации, может использоваться в CIOKTA_USERNAME
— соответствует конфигурации okta_username
и опции CLI --username
.AWS_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).
Чтобы использовать локальный компьютер в качестве средства проверки подлинности вместе с 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. Но все же оставался отличный код, который я мог повторно использовать под лицензией MIT для получения «gimme-aws-creds». Я отметил в комментариях, где использовал его код, чтобы убедиться, что он получил должное признание.
Окта-AWS-кли
okta-aws-cli-принимать-роль
AWS — как реализовать федеративный доступ к API и CLI с помощью SAML 2.0 и AD FS
Gimme AWS Creds выпускается под лицензией Apache версии 2.0.