spiffe/aws-spiffe-workload-helper
GitHub: spiffe/aws-spiffe-workload-helper
一款替代AWS官方助手的轻量级工具,旨在利用SPIFFE身份通过AWS Roles Anywhere为工作负载自动换取并管理短期临时凭证。
Stars: 14 | Forks: 2
# AWS SPIFFE Workload Helper
[](https://opensource.org/licenses/Apache-2.0)
[](https://github.com/spiffe/spiffe/blob/main/MATURITY.md#development)
AWS SPIFFE Workload Helper 是一个轻量级工具,旨在帮助工作负载利用其 SPIFFE 身份获取 AWS 凭证。
与 AWS 发布的 [`rolesanywhere-credential-helper`](https://github.com/aws/rolesanywhere-credential-helper) 相比,它在使用 SPIFFE 身份时提供了更原生的体验,旨在替代 `rolesanywhere-credential-helper`。
目前,该 Helper 仅支持通过 [AWS Roles Anywhere](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/introduction.html) 使用 X.509 SVID 向 AWS 进行身份验证。
## 用法
### 快速入门
请遵循 处的指南,并将 `rolesanywhere-credential-helper` 替换为此工具。
### 安装
#### 二进制文件
`aws-spiffe-workload-helper` 二进制文件可在本仓库的 [GitHub Releases](https://github.com/spiffe/aws-spiffe-workload-helper/releases) 中找到,支持多种架构。
下载适合您架构的工件,并解压 .tar.gz 文件。然后,可以将该二进制文件放置在系统中使用 AWS SDKs 或 CLIs 的工作负载可访问的位置。最好确保其位于您的 PATH 环境变量包含的路径中。
#### OCI 镜像
`aws-spiffe-workload-helper` 也以 OCI 镜像形式分发。如果您正在构建自己的镜像并需要其中的二进制文件,这可能会作为二进制文件的来源非常有用。
这些镜像发布在 GitHub Container Registry:[ghcr.io/spiffe/aws-spiffe-workload-helper:latest](https://github.com/spiffe/aws-spiffe-workload-helper/pkgs/container/aws-spiffe-workload-helper)
```
COPY --from=ghcr.io/spiffe/aws-spiffe-workload-helper:latest /ko-app/cmd /aws-spiffe-workload-helper
```
### CLI 命令
#### `x509-credential-process`
`x509-credential-process` 命令使用 AWS Roles Anywhere API 将 X509 SVID 换取一组短期 AWS 凭证。它将凭证以 AWS SDKs 和 CLIs 调用外部凭证进程时预期的格式返回到 STDOUT。
该命令从 SPIFFE Workload API 获取 X509-SVID。SPIFFE Workload API 端点的位置应通过 `SPIFFE_ENDPOINT_SOCKET` 环境变量或 `--workload-api-addr` 标志指定。
示例用法:
```
$ aws-spiffe-workload-helper x509-credential-process \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/0000000-0000-0000-0000-000000000000 \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/0000000-0000-0000-0000-000000000000 \
--role-arn arn:aws:iam::123456789012:role/example-role \
--workload-api-addr unix:///opt/workload-api.sock
```
##### 参考
| 标志 (Flag) | 必需 | 描述 | 示例 |
|-------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|
| role-arn | 是 | 要担任的角色的 ARN。必需。 | `arn:aws:iam::123456789012:role/example-role` |
| profile-arn | 是 | 要使用的 Roles Anywhere 配置文件 (profile) 的 ARN。必需。 | `arn:aws:rolesanywhere:us-east-1:123456789012:profile/0000000-0000-0000-0000-00000000000` |
| trust-anchor-arn | 是 | 要使用的 Roles Anywhere 信任锚 (trust anchor) 的 ARN。必需。 | `arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/0000000-0000-0000-0000-000000000000` |
| region | 否 | 在将 SVID 换取 AWS 凭证时覆盖要使用的 AWS 区域。可选。 | `us-east-1` |
| session-duration | 否 | 生成会话的时长,以秒为单位。可选。范围可从 15 分钟 (900) 到 12 小时 (43200)。 | `3600` |
| workload-api-addr | 否 | 覆盖用于获取 X509 SVID 的 Workload API 端点的地址。如果未指定,将使用 SPIFFE_ENDPOINT_SOCKET 环境变量的值。 | `unix:///opt/my/path/workload.sock` |
#### `x509-credential-file`
`x509-credential-file` 命令启动一个长期运行的守护进程,该进程使用 AWS Roles Anywhere API 将 X509 SVID 换取一组短期 AWS 凭证。它将凭证以 AWS SDKs 和 CLIs 支持的“凭证文件”格式写入指定文件。
当 AWS 凭证的有效期已过半时,它会重复此交换过程,确保始终有一组新的凭证可用。
虽然应优先使用 `x509-credentials-process` 流程,因为它不会将凭证写入文件系统,但在需要为不支持 `credential_process` 配置的旧版 SDKs 或 CLIs 提供凭证的场景下,`x509-credentials-file` 流程可能非常有用。
该命令从 SPIFFE Workload API 获取 X509-SVID。SPIFFE Workload API 端点的位置应通过 `SPIFFE_ENDPOINT_SOCKET` 环境变量或 `--workload-api-addr` 标志指定。
```
$ aws-spiffe-workload-helper x509-credential-file \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/0000000-0000-0000-0000-000000000000 \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/0000000-0000-0000-0000-000000000000 \
--role-arn arn:aws:iam::123456789012:role/example-role \
--workload-api-addr unix:///opt/workload-api.sock \
--aws-credentials-path /opt/my-aws-credentials-file
```
###### 参考
| 标志 (Flag) | 必需 | 描述 | 示例 |
|----------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|
| role-arn | 是 | 要担任的角色的 ARN。必需。 | `arn:aws:iam::123456789012:role/example-role` |
| profile-arn | 是 | 要使用的 Roles Anywhere 配置文件 (profile) 的 ARN。必需。 | `arn:aws:rolesanywhere:us-east-1:123456789012:profile/0000000-0000-0000-0000-00000000000` |
| trust-anchor-arn | 是 | 要使用的 Roles Anywhere 信任锚 (trust anchor) 的 ARN。必需。 | `arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/0000000-0000-0000-0000-000000000000` |
| region | 否 | 在将 SVID 换取 AWS 凭证时覆盖要使用的 AWS 区域。可选。 | `us-east-1` |
| session-duration | 否 | 生成会话的时长,以秒为单位。可选。范围可从 15 分钟 (900) 到 12 小时 (43200)。 | `3600` |
| workload-api-addr | 否 | 覆盖用于获取 X509 SVID 的 Workload API 端点的地址。如果未指定,将使用 SPIFFE_ENDPOINT_SOCKET 环境变量的值。 | `unix:///opt/my/path/workload.sock` |
| aws-credentials-path | 是 | 要写入的 AWS 凭证文件的路径。 | `/opt/my-aws-credentials-file` |
| force | 否 | 如果设置,加载现有 AWS 凭证文件时的失败将被忽略,内容将被覆盖。 | |
| replace | 否 | 如果设置,若 AWS 凭证文件存在,则将其替换。这将删除任何非由此工具写入的配置文件 (profile)。 | |
## 配置 AWS SDKs 和 CLIs
要配置 AWS SDKs 和 CLIs 使用 Roles Anywhere 和 SPIFFE 进行身份验证,您需要修改 AWS 配置文件。
默认情况下,AWS SDKs 和 CLIs 期望此文件位于 `~/.aws/config`。此位置可以通过 `AWS_CONFIG_FILE` 环境变量自定义。
配置示例:
```
[default]
credential_process = /usr/bin/aws-spiffe-workload-helper x509-credential-process --profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/0000000-0000-0000-0000-000000000000
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/0000000-0000-0000-0000-000000000000 --role-arn arn:aws:iam::123456789012:role/example-role
```
您可以在 了解更多关于外部凭证进程的信息。
## 贡献
我们欢迎对本项目的贡献。如果您需要任何帮助,请通过 SPIFFE Slack 联系我们。
### 治理
这是一个 ["tiny-project"](https://github.com/spiffe/spiffe/blob/main/NEW_PROJECTS.md#tiny-projects)。
争议解决通过升级至 [SPIFFE Steering Committee (SSC)](https://github.com/spiffe/spiffe/blob/main/GOVERNANCE.md#the-spiffe-steering-committee-ssc) 处理。
标签:AWS, DPI, EVTX分析, Golang, IAM, JSONLines, Modbus, Roles Anywhere, SPIFFE, SPIRE, SVID, Web截图, Workload Identity, X.509, 二进制发布, 凭证助手, 安全编程, 容器安全, 开源工具, 无密认证, 日志审计, 请求拦截, 身份与访问管理, 零信任