#aws-credentials #aws-security #aws-access #aws #credentials #access-key #mfa

app mfaws

用于管理启用 MFA 账户的 AWS 凭据的 CLI 工具

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

MIT 许可证

53KB
1K SLoC

Rust 1K SLoC // 0.0% comments TypeScript 183 SLoC // 0.0% comments Shell 8 SLoC

mfaws

一个跨平台 CLI 工具,可以轻松管理启用 MFA 账户的 AWS 凭据。 mfawsAWS 安全令牌服务 API 通信,并允许您使用您的 AWS 访问密钥、AWS 秘钥和 MFA 设备获取临时凭据。

支持的 STS 操作

  • AssumeRole
  • GetSessionToken

mfaws 非常受 aws-mfa 的启发,但有几个关键区别

  • 为单个长期配置文件假设多个短期配置文件
  • 单个原生二进制文件 - 无需依赖 Python
  • 将一次性密码 (OTP) 作为标志参数传递
  • 选项设置 STS 服务端点
  • 管理短期配置文件的工具命令

如果您正在迁移并好奇,请阅读有关差异的部分: aws-mfa 迁移:有什么不同?

安装

mfaws 可用于 Windows、MacOs 和 Linux。

  • 通过 cargo
cargo install mfaws
  • 从 GitHub
  1. 发布页面 下载最新二进制文件
  2. 提取它
  3. 将其添加到您的 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 迁移:有什么不同?

  1. 默认情况下,除非它们以由 --short-term-suffix [SHUFFIX] 设置的短期后缀结束,否则所有配置都视为长期配置。没有所谓的 显式 长期后缀(因此也没有 --long-term-suffix 标志)
  2. aws-mfa 不同,其中操作(假设角色/获取会话令牌)由 --assume-role 标志的存在隐式提供,mfaws 为每个操作都有专门的子命令
  3. --assume-role--role-arn
  4. --role-session-name [NAME] 默认不使用您的用户的 登录名,而是使用静态字符串 mfa-user
  5. 一些环境变量的名称不同

贡献和注意事项

我还是 Rust 的完全新手,对于如何改进此项目并使其更美观的建议非常欢迎!当然,我也非常欢迎一般的反馈、错误修复和功能想法。

致谢

  • broamskiaws-mfa 的 MIT 许可。这个工具的一般想法和许多帮助命令的描述都是从他的工作中借鉴的。

依赖项

~12–22MB
~297K SLoC