21个版本

0.4.10 2023年3月5日
0.4.9 2022年8月3日
0.4.8 2022年7月7日
0.3.9 2021年10月31日
0.1.1 2017年2月8日

#89 in 身份验证


用于 2 crates

Apache-2.0

125KB
2.5K SLoC

Crate version linux-release macos-release windows-release License

"您信任的工具,通过SAML安全地检索AWS凭据"

快速入门

$ crowbar profiles add <profile-name> -u <my-username> -p <idp> --url <idp-app-url>
$ AWS_PROFILE=<profile-name> aws ec2 describe-instances
$ crowbar exec <profile-name> -- aws ec2 describe-instances

它将要求您输入您的IdP密码,并通过 MFA 验证您的凭据请求。您输入的凭据将安全地缓存在您的操作系统密钥库中。

注意:在您的IdP仪表板中,将鼠标悬停在与您的AWS账户关联的应用上,并复制其链接。

支持的IdP

  • Okta,支持推送、TOTP、短信MFA因素
    • 注意:MFA选择屏幕将显示所有可用方法,但目前只实现了推送、TOTP和短信
  • JumpCloud,支持TOTP MFA因素(目前不支持Duo)

计划中

  • ADFS

安装

macOS

您可以通过 Homebrew 安装crowbar

$ brew install moritzheiber/tap/crowbar

Windows

您可以通过 Chocolatey 安装crowbar

$ choco install crowbar

所有支持操作系统的二进制发行版

只需下载 最新版本 并将其放在您的 PATH 中的某个位置。在Linux上,您必须安装DBus(例如,Ubuntu上的 libdbus-1-3 软件包),但大多数发行版都已预装DBus。

编译自己的二进制文件

先决条件

所有环境都需要一个 稳定 的Rust版本来编译(它也可能使用nightly编译,但没有保证)。您可以使用 rustup 来安装它。

Linux

为了编译该库,您必须安装DBus开发头文件(例如,在Ubuntu上为libdbus-1-dev)。

macOS

安装最新版本的Apple的XCode

Windows

Rust需要一个C++构建环境,rustup将帮助您安装和配置。

编译库

$ cargo install crowbar

如果您已在PATH中设置了cargo的二进制位置,则应能运行crowbar

用户指南

先决条件

为了使crowbar有用,您必须安装AWS CLI

添加配置文件

您可以使用crowbar profiles来管理配置文件

$ crowbar profiles add my-profile -u my-username -p okta --url "https://example.okta.com/example/saml"

要获取相应的URL,请将鼠标悬停在您的Okta仪表板中与您的AWS账户关联的应用上,并复制其链接。您可以移除末尾的?fromHome=true部分。使用crowbar添加配置文件还将相应地配置AWS CLI。

您还可以使用crowbar profiles delete <profile-name>来删除配置文件,并使用crowbar profiles list来获取所有可用配置文件的概览。

使用方法

通过AWS配置文件

现在,您可以在shell中导出配置文件名称的情况下运行任何需要AWS凭证的命令。

$ AWS_PROFILE=my-profile aws ec2 --region us-east-1 describe-instances

或者,在Windows上

$ set AWS_PROFILE=my-profile
$ aws ec2 --region us-east-1 describe-instances

这将自动使用您的IdP对您进行身份验证,如果需要,会要求您输入MFA,并向您展示您可以假设的角色选择,以获取临时的AWS凭证。如果只有一个角色可以假设,crowbar将跳过选择,直接使用它来检索凭证。

通过执行环境

您可以将crowbar通过环境变量暴露给您想要运行的过程的AWS凭证

$ crowbar exec <my-profile> -- <your-command-here>

例如

$ crowbar exec super-duper-profile - aws sts get-caller-identity
{
    "Account": "1234567890",
    "UserId": "Some-User:[email protected]",
    "Arn": "arn:aws:sts::1234567890:assumed-role/SuperDuperUser/[email protected]"
}

更多选项

显然,您也可以直接运行crowbar

$ crowbar creds [PROFILE]

例如

$ crowbar creds my-profile

有关更多信息,请参阅crowbar --helpcrowbar creds --help

常见问题解答

为什么CLI配置中添加的credential_process命令看起来如此奇怪?

需要sh的解决方案是因为AWS CLI在将错误输出转发给子进程之前捕获了stderr。crowbar使用stderr请求您的IdP密码、您选择的MFA以及如果有多个,则选择要假设的角色。有关此问题的开放问题几个 PRs。如果您想看到此问题得到解决,请给予一些支持。

历史记录

Crowbar旨在使用其STS服务安全地检索临时AWS凭证,利用SAML作为认证和授权请求的手段。它的独特之处在于它不会将任何敏感数据(密码、会话令牌、安全密钥)写入磁盘,而是将它们存储在操作系统的密钥库中,需要用户同意才能从中检索。

它旨在与AWS CLI的credential_process功能一起使用,以在命令行上使用AWS资源时提供无缝体验。

Crowbar 是由 oktaws 分支出来的,由 Jonathan Morley 编写,而将其分支出来的主要不同之处在于它会将凭据写入磁盘,并且仅专注于 Okta。这两点都不是这个项目的意图。

目前,只支持 Okta 作为身份提供者(IdP),其他提供者(ADFS 优先级最高)将尽快添加。

Crowbar 以前被用于 一个用于 Rust 的 AWS Lambda 运行时,模拟 Python 库,在 Lambda 中原生运行时支持之前。Crowbar 0.1.x 和 0.2.x 用户应迁移到 原生运行时

待办事项

还有一些事情要做

未来

  • 为不支持 AWS SharedProfileCredentials 提供者的工具添加 exec 模式
  • 至少支持 ADFS:如前所述,crowbar 应该是一个通用工具,而不仅仅是专注于 Okta。ADFS 支持是强制性的。然而,还应考虑其他提供者。为了实现这一点,代码可能需要进行重大重构。
  • 支持 WebAuthn:至少 Okta 支持在命令行上使用 WebAuthn,这个工具也应该支持。这很大程度上取决于 处理 FIDO2 安全密钥的 Rust 生态系统 的成熟度。CTAP2 协议支持对于与 Okta 一起工作来说是强制性的。
  • 关注跨平台支持:我运行的是 Linux,所有代码都在 Linux 上进行测试。我希望 crowbar 能在所有主要操作系统(Linux、macOS、Windows)上使用。

外观

  • 清理代码:这是我第一个主要的 Rust 项目,这一点很明显。代码需要一些有更多 Rust 经验的其他几对眼睛。
  • 为 MFA 挑战添加一些重试逻辑?至少 Okta API 在某些条件下允许这样做
  • 错误处理到处都是,包括随机的 panic! 语句和不一致的记录器使用。项目需要一个适当的错误处理程序。
  • 如果 SAML 断言中只提供了一个角色,则直接使用该角色
  • 更一致的 UI 体验(也许可以开始查看其他库?)

依赖项

~27–45MB
~835K SLoC