gimme-aws-creds는 SAML을 통해 Okta IdP를 활용하여 AWS STS를 통해 임시 AWS 자격 증명을 획득하는 CLI입니다.
Okta는 AWS 콘솔에 SSO를 수행하도록 쉽게 설정할 수 있는 SAML 자격 증명 공급자(IdP)입니다. 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 앱을 사용하여 AWS에 Okta SAML 통합
파이썬 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를 인증하고 Lambda는 Okta API와의 모든 상호 작용을 처리합니다. 또는 OKTA_API_KEY
환경 변수와 gimme_creds_server
구성 값을 'internal'로 설정하여 gimme-aws-creds에서 Okta API를 직접 호출할 수 있습니다.
이것은 Python 3 프로젝트입니다.
PyPi에서 설치/업그레이드:
pip3 install --upgrade gimme-aws-creds
또는
GitHub에서 직접 최신 gimme-aws-creds 패키지를 설치/업그레이드하세요.
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
또는
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} ] ;
} ;
}
) ;
}
또는
원래 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를 사용하는 데는 두 가지 옵션이 있습니다.
이는 OIE 인증에 권장되는 방법입니다. 이는 Okta의 AWS 클라이언트에서 사용하는 흐름과 일치합니다. 장치 인증 흐름과 함께 gimme-aws-creds를 사용하는 경우 브라우저를 사용하여 인증하게 됩니다. 키체인에 자격 증명을 저장하거나 명령줄을 통해 MFA 코드를 전달하는 것은 불가능합니다.
OIE(Okta Identity Engine) 도메인과 함께 gimme-aws-creds를 사용하려면 새 OIDC 네이티브 애플리케이션을 생성하고 이를 AWS 통합 앱에 연결해야 합니다.
OIDC 네이티브 애플리케이션에는 Grant Types Authorization Code
, Device Authorization
및 Token Exchange
필요합니다. 이러한 설정은 Okta 관리 UI의 Applications > [the OIDC app] > General Settings > Grant type
에 있습니다.
AWS 페더레이션 애플리케이션과의 페어링은 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 애플리케이션 모두에 대해 동일한 인증 정책을 사용해야 합니다(또는 적어도 둘 다에 대해 동등한 정책 규칙을 사용해야 합니다). 그렇지 않은 경우 웹 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
은 충돌을 피하기 위해 계정 번호(또는 resolve_aws_alias
y로 설정된 경우 별칭)가 앞에 붙은 역할 arn의 이름 구성 요소를 사용합니다(예: 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
으로 지정할 수도 있습니다.구성 파일은 구성 파일 형식을 따릅니다. 기본적으로 $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
실행할 수 있습니다.
또는 토큰 기간을 변경하려는 경우 환경 변수로 구성 섹션의 값을 덮어쓸 수 있습니다. 환경 변수로 변경할 값 목록은 다음과 같습니다.
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개 항목).
gimme-aws-creds --action-store-json-creds
stdin
의 JSON 형식 자격 증명을 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-역할 가정
AWS - SAML 2.0 및 AD FS를 사용하여 통합 API 및 CLI 액세스를 구현하는 방법
Gimme AWS Creds는 Apache 라이선스 버전 2.0에 따라 출시됩니다.