spiffe/aws-spiffe-workload-helper

GitHub: spiffe/aws-spiffe-workload-helper

一款替代AWS官方助手的轻量级工具,旨在利用SPIFFE身份通过AWS Roles Anywhere为工作负载自动换取并管理短期临时凭证。

Stars: 14 | Forks: 2

# AWS SPIFFE Workload Helper [![Apache 2.0 License](https://img.shields.io/github/license/spiffe/helm-charts)](https://opensource.org/licenses/Apache-2.0) [![Development Phase](https://github.com/spiffe/spiffe/blob/main/.img/maturity/dev.svg)](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, 二进制发布, 凭证助手, 安全编程, 容器安全, 开源工具, 无密认证, 日志审计, 请求拦截, 身份与访问管理, 零信任