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
125KB
2.5K SLoC
"您信任的工具,通过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
计划中
- 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 --help
或crowbar 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