跳转到主要内容

从Okta获取AWS角色凭证的资源

项目描述

Build Status Coverage Latest Version Status Python Version Downloads

此软件包提供通过Okta获取AWS凭证的命令。

安装

安装aws-okta-processor的推荐方法是使用pipx。这样做的优点是,命令可以在您的shell中可用,无需激活虚拟环境,同时仍然将依赖项与其site-packages隔离开

$ pipx install aws-okta-processor

并且,要升级到新版本

$ pipx upgrade aws-okta-processor

您还可以在虚拟环境中使用pip进行安装

$ pip install aws-okta-processor

或者,如果您不在虚拟环境中安装,要全局安装

$ sudo pip install aws-okta-processor

或者为您的用户安装

$ pip install --user aws-okta-processor

如果您已使用pip安装了aws-okta-processor,并且想要升级到最新版本,可以运行以下命令:

$ pip install --upgrade aws-okta-processor

这将安装aws-okta-processor包及其所有依赖项。您也可以直接下载tarball。一旦您在您的台式机上有了aws-okta-processor目录结构,您只需运行以下命令:

$ cd <path_to_aws-okta-processor>
$ python setup.py install

入门指南:

此软件包最好与AWS命名配置文件一起使用,与识别credential_process的工具和库。

要在配置文件中设置aws-okta-processor,创建一个如下所示的INI格式文件

[default]
credential_process=aws-okta-processor authenticate --user <user_name> --organization <organization>.okta.com

并将其放置在~/.aws/credentials(或在Windows上的%UserProfile%\.aws/credentials)中。然后运行

$ pip install awscli
$ aws sts get-caller-identity

输入密码,然后根据提示选择您的AWS Okta应用程序和账户角色。AWS CLI命令将返回一个显示假设的账户角色的结果。如果您再次运行AWS CLI命令,由于缓存,您将获得相同的角色而无需任何提示。

对于不识别credential_process的工具和库,aws-okta-processor可以运行以将以下内容作为环境变量导出

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN

对于Linux或OSX运行:

$ eval $(aws-okta-processor authenticate --environment --user <user_name> --organization <organization>.okta.com)

在Unix系统上,传递一个–target-shell以更改导出命令的输出。Bash是默认的目标shell。我们还允许[fish shell](https://fishshell.com/)作为一个有效目标

$ eval (aws-okta-processor authenticate --environment --user <user_name> --organization <organization>.okta.com --target-shell fish)

对于Windows运行:

$ Invoke-Expression (aws-okta-processor authenticate --environment --user <user_name> --organization <organization>.okta.com)

其他可配置变量:

还可以将以下表格中概述的选项或环境变量传递给aws-okta-processors的authenticate命令。

变量:

选项:

环境变量:

描述:

user:

–user:

AWS_OKTA_USER:

Okta用户名:

password:

–pass:

AWS_OKTA_PASS:

Okta用户密码:

organization:

–organization:

AWS_OKTA_ORGANIZATION:

Okta组织FQDN:

application:

–application:

AWS_OKTA_APPLICATION:

Okta AWS应用程序URL:

role:

–role:

AWS_OKTA_ROLE:

AWS Role ARN:

secondary_role:

–secondary-role:

AWS_OKTA_SECONDARY_ROLE:

二级AWS Role ARN:

account_alias:

–account-alias:

AWS_OKTA_ACCOUNT_ALIAS:

AWS账户过滤器:

region:

–region:

AWS_OKTA_REGION:

AWS区域:

duration:

–duration:

AWS_OKTA_DURATION:

AWS会话持续时间的秒数:

key:

–key:

AWS_OKTA_KEY:

用于生成AWS会话缓存的密钥:

environment:

–environment:

设置ENV变量的输出命令:

silent:

–silent:

静默信息输出:

factor:

–factor:

AWS_OKTA_FACTOR:

MFA类型。支持push:oktatoken:software:totp:oktatoken:software:totp:googletoken:hardware:yubico

no_okta_cache:

–no-okta-cache:

AWS_OKTA_NO_OKTA_CACHE:

不要读取Okta缓存:

no_aws_cache:

–no-aws-cache:

AWS_OKTA_NO_AWS_CACHE:

不要读取AWS缓存:

target_shell:

–target-shell:

AWS_OKTA_TARGET_SHELL:

格式化导出命令的目标shell:

sign_in_url:

–sign-in-url:

AWS_OKTA_SIGN_IN_URL:

AWS登录URL:

示例:

如果您不希望aws-okta-processor提示任何选择输入,您可以导出以下内容:

$ export AWS_OKTA_APPLICATION=<application_url> AWS_OKTA_ROLE=<role_arn> AWS_OKTA_FACTOR=<factor_type>

或者向命令传递额外的选项:

$ aws-okta-processor authenticate --user <user_name> --organization <organization>.okta.com --application <application_url> --role <role_arn> --factor <factor_type>

缓存:

本软件包利用Okta会话和AWS会话的缓存。了解这种缓存工作原理有助于在尝试切换AWS角色时避免混淆。

Okta

当aws-okta-processor尝试进行身份验证时,它会检查~/.aws-okta-processor/cache/目录下名为<user>-<organization>-session.json的文件,该文件基于传递的userorganization选项值。如果文件不存在或会话内容已过时,aws-okta-processor将创建一个新的会话并将其写入到~/.aws-okta-processor/cache/。如果文件存在且会话未过时,则现有的会话将得到刷新。

AWS

aws-okta-processor与Okta建立会话并选择AWS角色后,将获取角色的密钥和会话令牌。来自AWS角色的此会话信息作为JSON文件缓存到~/.aws/boto/cache下。文件名是基于传递给命令的userorganizationkey选项值组合的SHA1哈希。

如果您想为使用相同userorganization选项值的每个角色存储单独的AWS角色会话缓存,请传递一个唯一的key值。然后在~/.aws/credentials中定义不同角色的命名配置文件,内容如下

[role_one]
credential_process=aws-okta-processor authenticate --user <user_name> --organization <organization>.okta.com --application <application_url> --role <role_one_arn> --factor <factor_type> --key role_one

[role_two]
credential_process=aws-okta-processor authenticate --user <user_name> --organization <organization>.okta.com --application <application_url> --role <role_two_arn> --factor <factor_type> --key role_two

要清除所有AWS会话缓存,请运行

$ rm ~/.aws/boto/cache/*

$ rm ~/.aws/boto/cache/*

假定二级角色

如果您只能从一个角色假定另一个角色,可以使用--role--secondary-role同时假定这两个角色。使用--role指定第一个角色的ARN,然后使用--secondary-role指定从--role假定的角色的ARN。

示例

aws-okta-processor authenticate --user jdoe ... --role arn:aws:iam::111111111:role/OpsUser --secondary-role arn:aws:iam::111111111:role/SecretsAdmin

项目或用户配置

aws-okta-processor可以从用户主目录或当前工作目录中的.awsoktaprocessor文件继承参数。

.awsoktaprocessor

[defaults]
user=jdoe

[authenticate]
user=ssmith

在此示例中...

  • authenticate > user 覆盖 defaults > user

  • {workingDir}/.awsoktaprocessor 覆盖 ~/.awsoktaprocessor

  • aws-okta-processor 参数覆盖来自点文件的任何选项

获取角色

要获取角色,请使用get-roles命令。此命令支持以AWS配置文件、JSON或自定义格式化文本输出角色。

# write all the roles as AWS profiles
aws-okta-processor get-roles -u jdoe -o mycompany.okta.com --output=profiles > ~/.aws/credentials

# get account and role
aws-okta-processor get-roles -u jdoe -o mycompany.okta.com --output=text --output-format="{account},{role}"

# get JSON
aws-okta-processor get-roles -u jdoe -o mycompany.okta.com --output=json

输出类型

  • json(默认):以JSON格式输出

  • profiles:输出AWS配置文件以存储在~/.aws/credentials

  • text:使用--output-format和令牌的自定义格式化文本

输出格式令牌

  • {account}:账户名称

  • {account_id}:账户ID

  • {account_raw}:账户信息,如Okta网站上所见(Account: blah-blah(id)

  • {application_url}:完整的Okta应用程序URL

  • {organization}:提供的组织

  • {role}:角色 ARN

  • {role_suffix}:角色的最后一个元素(使用 AWS_OKTA_ROLE_SUFFIX_DELIMITER- 分隔)

  • {user}:提供的用户

获取帮助

致谢

本软件包受到了AlainODeaokta-aws-cli-assume-role项目上的工作的启发。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源分发

aws_okta_processor-1.9.2.tar.gz (46.1 kB 查看哈希值)

上传时间

构建分发

aws_okta_processor-1.9.2-py2.py3-none-any.whl (33.7 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面