5 个版本 (3 个重大更新)
0.4.0 | 2024年4月4日 |
---|---|
0.3.0 | 2023年4月15日 |
0.2.1 | 2023年4月6日 |
0.2.0 | 2023年4月5日 |
0.1.0 | 2023年4月5日 |
在 命令行工具 中排名 175
53KB
1K SLoC
mfaws
一个跨平台 CLI 工具,可以轻松管理启用 MFA 账户的 AWS 凭据。 mfaws 与 AWS 安全令牌服务 API 通信,并允许您使用您的 AWS 访问密钥、AWS 秘钥和 MFA 设备获取临时凭据。
支持的 STS 操作
- AssumeRole
- GetSessionToken
mfaws 非常受 aws-mfa
的启发,但有几个关键区别
- 为单个长期配置文件假设多个短期配置文件
- 单个原生二进制文件 - 无需依赖 Python
- 将一次性密码 (OTP) 作为标志参数传递
- 选项设置 STS 服务端点
- 管理短期配置文件的工具命令
如果您正在迁移并好奇,请阅读有关差异的部分: 从 aws-mfa
迁移:有什么不同?
安装
mfaws 可用于 Windows、MacOs 和 Linux。
- 通过 cargo
cargo install mfaws
- 从 GitHub
- 从 发布页面 下载最新二进制文件
- 提取它
- 将其添加到您的
PATH
凭据文件
假设您在 ~/.aws/credentials
中有以下 AWS 凭据文件。它有一个单个的 长期 配置文件 dev
,可以用于生成 短期 配置文件。短期配置文件由 -short-term
后缀(或您提供的自定义后缀)标识。短期配置文件将自动生成,不应手动修改。
[dev]
aws_access_key_id=AKMB6EHIO4AB9FRYI37
aws_secret_access_key=qAnFonnuEUqp
- 您可以在 AWS 凭据配置文件中将
aws_mfa_device=[MFA DEVICE ARN]
设置为,这样您就无需每次都作为标志传递它 - 如果您没有使用
--profile
指定配置文件名称,则应用程序将查找名为default
的配置文件
基本用法
- 为
dev
配置获取一个 临时会话令牌
mfaws session-token \
--profile dev \
--device arn:aws:iam::3687901:mfa/my-mfa-device
mfaws 自动为您在 AWS 凭据文件中添加以下短期配置
[dev]
aws_access_key_id=AKMB6EHIO4AB9FRYI37
aws_secret_access_key=qAnFonnuEUqp
[dev-short-term]
expiration=2023-04-05T21:57:52Z
aws_access_key_id=ASIAVMB6EHIOYTGUOE7T
aws_secret_access_key=E6HGxHXHb2hqP3az+UMThIjWGVsdKH3pG1h67FxR
aws_session_token=IQoJb3JpZ2luX2VjECoaCXVzLWVhc3QtMSJHMEUCIDSFI50`
- 为
dev
配置 假设角色,以 otp 作为参数,并使用区域eu-central-2
mfaws assume-role \
--profile dev \
--role-arn arn:aws:iam::6823sdf5:role/admin \
--device arn:aws:iam::3687901:mfa/my-mfa-device \
--otp 123456 \
--sts-region eu-central-2
现在,您的 AWS 配置文件如下所示
[dev]
aws_access_key_id=AKMB6EHIO4AB9FRYI37
aws_secret_access_key=qAnFonnuEUqp
[dev_6823sdf5-role-admin-mfa-user_short-term]
assumed_role_arn=arn:aws:iam::6823sdf5:role/admin
assumed_role_id=AROAZ5XVG55QR3R2:mfa-user
expiration=2023-04-05T11:02:10Z
aws_access_key_id=ASINQT6HE6ZCS
aws_secret_access_key=iqVoWOI8+l6WVBn8pdCc/JxJ6
aws_session_token=IQoJb3JpZ2luXS4VhObxKg6p79Pm38C4ahGqcGKw==
每次运行操作时,mfaws 会检查现有的短期配置,看是否有仍然有效的(即尚未过期)配置。如果是这样,操作将优雅地中止,您将收到通知。您也可以通过传递 --force
标志来强制生成新的凭据。
Shell 别名
我建议为这些操作中的任何一个创建 bash 别名,并将 AWS_PROFILE
环境变量 设置为生成的配置的名称。
例如,对于 bash
alias mfa-admin="mfaws assume-role --profile dev --role-arn arn:aws:iam::6823sdf5:role/admin && export AWS_PROFILE=default_6823sdf5-role-admin-mfa-user_short-term"
您可能想第一次手动运行它以查看为您的短期配置生成的名称。这是假设的角色和角色名称的组合。
命令
在您的终端中运行 mfaws help
以查看所有(子)命令及其用法
A CLI tool to manage AWS credentials for MFA-enabled accounts
Usage: mfaws [OPTIONS] <COMMAND>
Commands:
assume-role Temporary credentials for an assumed AWS IAM Role
session-token Temporary credentials for an AWS IAM user
clean Remove short-time profiles from your credentials file
list List profiles in your credentials file
help Print this message or the help of the given subcommand(s)
Options:
--credentials-path <CREDENTIALS_PATH>
Location of the AWS credentials file. Can be a relative path from your home directory or an absolute path to the file [env: AWS_SHARED_CREDENTIALS_FILE=] [default: .aws/credentials]
-h, --help
Print help
-V, --version
Print version
mfaws 允许您自定义许多内容,包括临时凭据的有效期、用于生成短期配置的短期后缀或凭据文件的路径。许多值也可以从相应的环境变量中读取。
假设角色
mfaws assume-role --help
Temporary credentials for an assumed AWS IAM Role
Usage: mfaws assume-role [OPTIONS] --role-arn <ROLE_ARN>
Options:
--role-arn <ROLE_ARN>
The ARN of the AWS IAM Role you want to assume [env: AWS_ROLE_ARN=]
--role-session-name <ROLE_NAME>
Custom friendly session name when assuming a role [env: AWS_ROLE_SESSION_NAME=] [default: mfa-user]
--profile <PROFILE_NAME>
The AWS credentials profile to use [env: AWS_PROFILE=] [default: default]
--device <MFA_DEVICE>
The MFA Device ARN [env: MFA_DEVICE=]
--credentials-path <CREDENTIALS_PATH>
Location of the AWS credentials file. Can be a relative path from your home directory or an absolute path to the file [env: AWS_SHARED_CREDENTIALS_FILE=] [default: .aws/credentials]
--otp <OTP>
The one-time password from your MFA device
--duration <DURATION>
The duration, in seconds, for which the temporary credentials should remain valid [env: MFA_DURATION=]
--short-term-suffix <SHORT_TERM_SUFFIX>
To identify the auto-generated short-term credential profile [default: short-term]
--force
Force the creation of a new short-term profile even if one already exists
--sts-region <STS_REGION>
The STS region to use for the AWS client [default: us-east-1]
-h, --help
Print help
会话令牌
mfaws session-token --help
Temporary credentials for an AWS IAM user
Usage: mfaws session-token [OPTIONS]
Options:
--profile <PROFILE_NAME>
The AWS credentials profile to use [env: AWS_PROFILE=] [default: default]
--device <MFA_DEVICE>
The MFA Device ARN [env: MFA_DEVICE=]
--otp <OTP>
The one-time password from your MFA device
--duration <DURATION>
The duration, in seconds, for which the temporary credentials should remain valid [env: MFA_DURATION=]
--credentials-path <CREDENTIALS_PATH>
Location of the AWS credentials file. Can be a relative path from your home directory or an absolute path to the file [env: AWS_SHARED_CREDENTIALS_FILE=] [default: .aws/credentials]
--short-term-suffix <SHORT_TERM_SUFFIX>
To identify the auto-generated short-term credential profile [default: short-term]
--force
Force the creation of a new short-term profile even if one already exists
--sts-region <STS_REGION>
The STS region to use for the AWS client [default: us-east-1]
-h, --help
Print help
清理
mfaws clean --help
Remove short-time profiles from your credentials file
Usage: mfaws clean [OPTIONS]
Options:
--short-term-suffix <SHORT_TERM_SUFFIX>
To identify the short-term credential profiles [default: short-term]
--credentials-path <CREDENTIALS_PATH>
Location of the AWS credentials file. Can be a relative path from your home directory or an absolute path to the file [env: AWS_SHARED_CREDENTIALS_FILE=] [default: .aws/credentials]
-h, --help
Print help
列表
mfaws list --help
List profiles in your credentials file
Usage: mfaws list [OPTIONS]
Options:
--credentials-path <CREDENTIALS_PATH>
Location of the AWS credentials file. Can be a relative path from your home directory or an absolute path to the file [env: AWS_SHARED_CREDENTIALS_FILE=] [default: .aws/credentials]
-h, --help
Print help
STS 区域
在大多数情况下,您无需指定 STS 端点以检索临时凭据。默认区域是 us-east-1
。如果您需要使用不同的区域,可以使用带有 区域端点标识符(不是 URL)的 --sts-region
标志。请注意,./aws/config
中配置的区域不会被使用。
从 aws-mfa
迁移:有什么不同?
- 默认情况下,除非它们以由
--short-term-suffix [SHUFFIX]
设置的短期后缀结束,否则所有配置都视为长期配置。没有所谓的 显式 长期后缀(因此也没有--long-term-suffix
标志) - 与
aws-mfa
不同,其中操作(假设角色/获取会话令牌)由--assume-role
标志的存在隐式提供,mfaws 为每个操作都有专门的子命令 --assume-role
是--role-arn
--role-session-name [NAME]
默认不使用您的用户的 登录名,而是使用静态字符串mfa-user
- 一些环境变量的名称不同
贡献和注意事项
我还是 Rust 的完全新手,对于如何改进此项目并使其更美观的建议非常欢迎!当然,我也非常欢迎一般的反馈、错误修复和功能想法。
致谢
依赖项
~12–22MB
~297K SLoC