gimme-aws-creds は、SAML 経由で Okta IdP を利用し、AWS STS 経由で一時的な AWS 認証情報を取得する CLI です。
Okta は SAML ID プロバイダー (IdP) であり、AWS コンソールに SSO を実行するように簡単にセットアップできます。 Okta は、一時的な AWS 認証情報を取得するための OSS Java CLI ツールを提供していますが、平均的な Okta ユーザーが持つ情報よりも多くの情報が必要であり、複数の Okta アプリがある場合にはうまく拡張できないことがわかりました。
gimme-aws-creds を使用すると、ユーザー名、パスワード、Okta URL、および MFA トークン (MFA が有効になっている場合) だけを知る必要があります。 gimme-aws-creds では、認証情報が必要な Okta AWS アプリケーションとロールを選択するオプションが提供されます。あるいは、-c を渡すか構成ファイルを編集することで、アプリとロール名を事前に構成することもできます。これについてはすべて「使用法」セクションで説明します。
Okta は Okta, Inc. の登録商標であり、このツールは Okta, Inc. との提携やスポンサーシップはありません。
AWS アプリを使用した Okta SAML の AWS への統合
Python 3.7以降
gimme-aws-creds
WebAuthn サポートの ctap-keyring-device ライブラリに依存します。 ctap-keyring-device のリリースされたバージョンはすべて、Windows 上の winRT を必要とします。これは Python 3.9 以下でのみ動作し、現在はメンテナンスされていません。 winSDK
(winRT の代替) をサポートする ctap-keyring-device のバージョンが PyPi にリリースされるか、他の解決策が見つかるまで、Windows で Python 3.10 以降を実行しているユーザーは WebAuthn サポートを利用できません。
Gimme-creds-lambda は、gimme-aws-creds に必要な Okta API へのプロキシとして使用できます。これにより、Okta API キーの要件が削除されます。 Gimme-aws-creds は OpenID Connect を使用して gimme-creds-lambda に対して認証を行い、ラムダは Okta API とのすべての対話を処理します。あるいは、 OKTA_API_KEY
環境変数とgimme_creds_server
設定値を「internal」に設定して、gimme-aws-creds から Okta API を直接呼び出すこともできます。
これは 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 イメージをローカルでビルドします。
docker build -t gimme-aws-creds .
簡単にするために、docker を使用して gimme-aws-creds コマンドのエイリアスを作成することもできます。
# 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
OIE ドメインで gimme-aws-creds を使用するには 2 つのオプションがあります。
これは、OIE での認証に推奨される方法です。これは、Okta の AWS クライアントで使用されるフローと一致します。デバイス認証フローで gimme-aws-creds を使用する場合は、ブラウザを使用して認証します。認証情報をキーチェーンに保存したり、コマンドライン経由で MFA コードを渡したりすることはできません。
Okta Identity Engine (OIE) ドメインで gimme-aws-creds を使用するには、新しい OIDC ネイティブ アプリケーションを作成し、それを AWS 統合アプリに接続する必要があります。
OIDC ネイティブ アプリケーションには、 Authorization Code
、 Device Authorization
、およびToken Exchange
付与タイプが必要です。これらの設定は、Okta 管理 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 ネイティブ アプリケーションのクライアント ID に設定してください。 gimme-aws-creds を使用してアクセスする AWS アプリケーションごとにその設定を繰り返します。
最後に、gimme-aws-creds でクライアント ID を設定します ( gimme-aws-creds --action-configure
または構成ファイルのclient_id
パラメーターを更新します)。
AWS フェデレーション アプリケーションと OIDC アプリケーションの両方に同じ認証ポリシーを使用するようにしてください (または、少なくとも両方に同等のポリシー ルールを使用してください)。そうでない場合は、Web SSO トークンを要求したときに400 Bad Request
応答を受け取ります。
Okta Classic で使用されるログイン フローは現在も Okta Identity Engine ドメインで動作しますが、いくつかの注意点があります。
stateToken
パラメーターを渡します。この機能は OIE で削除されたため、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
に書き込まれます。それ以外の場合は、stdout に書き込まれます。role
、ロール arn の名前コンポーネントをプロファイル名として使用します。つまり、arn:aws:iam::123456789012:role/okta-1234-role は、aws 認証情報ファイルのセクション [okta-1234-role] になります。acc
、アカウント番号 ( resolve_aws_alias
が y に設定されている場合はエイリアス) をプロファイル名として使用します。つまり、 arn:aws:iam::123456789012:role/okta-1234-role は、aws 認証情報ファイルのセクション [arn:aws:iam::123456789012] または、 resolve_aws_alias
[okta-1234-role] の場合になります。acc-role
、衝突を避けるために、ロール arn の名前コンポーネントにアカウント番号 (または、 resolve_aws_alias
が y に設定されている場合はエイリアス) を付加して使用します。つまり、arn:aws:iam::123456789012:role/okta-1234-roleセクション [123456789012-okta-1234-role] になる、またはaws 認証情報ファイル内のresolve_aws_alias
[okta-1234-role]default
に設定されている場合、一時認証情報はデフォルトのプロファイルに保存されます。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
によって指定することもできます。設定ファイルは configfile 形式に従います。デフォルトでは、$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
Linux 上で$(gimme-aws-creds)
またはgimme-aws-creds | iex
を実行することで、環境変数の作成を自動化できます。 Windows Powershell を使用したgimme-aws-creds | iex
--profile
パラメーターを使用して特定の構成プロファイルを実行できます。
./gimme-aws-creds --profile profileName
入力を求められるユーザー名とパスワードは、Okta へのログインに使用するものです。 OKTA_USERNAME
環境変数を設定するか、 -u username
パラメーターを使用して、ユーザー名を事前定義できます。
Okta アプリまたはロールを構成していない場合は、いずれかを選択するように求められます。
すべてがうまくいけば、一時的な AWS アクセス、秘密キー、トークンを取得できます。これらは stdout または~/.aws/credentials
に書き込まれます。
利用可能なすべてのオプションに対して、いつでもgimme-aws-creds --help
を実行できます。
あるいは、トークンの期間を変更したい場合などに、config セクションの値を環境変数で上書きすることもできます。環境変数で変更する値のリストは次のとおりです。
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
CLI オプションに対応しますOKTA_AUTH_SERVER
- okta_auth_server
構成に対応しますOKTA_DEVICE_TOKEN
- device_token
構成に対応し、CI で使用できますOKTA_MFA_CODE
- --mfa-code
CLI オプションに対応しますOKTA_PASSWORD
- 認証中にパスワードを提供し、CI で使用できます。OKTA_USERNAME
- okta_username
構成および--username
CLI オプションに対応しますAWS_STS_REGION
- 特定のリージョン ( us-east-1
、 eu-north-1
など) で STS の使用を強制します。例: 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 認証情報ファイルへの書き込みには、RFC3339 形式のx_security_token_expires
値が含まれます。これにより、ツールは資格情報の有効期限が切れるか、まもなく期限切れになるかを検証し、ユーザーに警告したり、更新をトリガーしたりできるようになります。
gimme-aws-creds -o json
認証情報を JSON 形式で出力します - 1 行に 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 が有効な組織の両方で機能します
標準が WebAuthN に進むにつれて、FIDO1 はおそらく近い将来非推奨になることに注意してください。
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 トークンを生成する CLI ツールを探していたときに、Joe Keegan によって書かれた okta_aws_login に出会いました。残念ながら、2015 年以来更新されておらず、現在の Okta バージョンでは動作しないようでした。しかし、gimme-aws-creds の MIT ライセンスの下で再利用できる素晴らしいコードがまだいくつかありました。私は、彼が適切な功績を認められるよう、私が彼のコードを使用した場所をコメントに記しました。
okta-aws-cli
okta-aws-cli-assume-role
AWS - SAML 2.0 と AD FS を使用してフェデレーション API と CLI アクセスを実装する方法
Gimme AWS Creds は、Apache ライセンス バージョン 2.0 に基づいてリリースされています