Skip to content

本文为 SPIRE 官方文档 plugin_server_bundlepublisher_aws_s3 的中文译本,以英文原文为准。 🔗 穿越源码分析:Server 详解 · BundlePublisher

Server 插件:BundlePublisher "aws_s3"

aws_s3 插件将 server 当前的信任包(trust bundle)存入指定的 Amazon S3 存储桶(bucket),并保持其持续更新。

该插件接受以下配置选项:

配置项说明是否必填默认值
access_key_idAWS 访问密钥 ID(access key id)。仅当未设置 AWS_ACCESS_KEY_ID 环境变量时必填。AWS_ACCESS_KEY_ID 环境变量的值。
secret_access_keyAWS 私密访问密钥(secret access key)。仅当未设置 AWS_SECRET_ACCESSKEY 环境变量时必填。AWS_SECRET_ACCESSKEY 环境变量的值。
region用于存储信任包的 AWS 区域。是。
bucket信任包上传到的目标 Amazon S3 存储桶名称。是。
object_key存储桶内的对象键(object key)。是。
format信任包的存储格式,<spiffe | jwks | pem>。详见支持的信任包格式是。
endpoint使用第三方对象存储服务(如 Minio)时应设置自定义 S3 端点(endpoint)。否。
refresh_hint使用 spiffe 格式时,设置信任包的刷新提示(refresh hint)。以字符串指定,例如 '10m'、'1h'。详见 time.ParseDuration否。

支持的信任包格式

支持以下信任包格式:

SPIFFE 格式

信任包表示为符合 RFC 7517 的 JWK Set,其具体参数在 SPIFFE Trust Domain and Bundle 规范中定义。其中同时包含 JWT authorities 与 X.509 authorities。

JWKS 格式

信任包编码为符合 RFC 7517 的 JWK Set,但省略了 SPIFFE 专有参数。其中同时包含 JWT authorities 与 X.509 authorities。

PEM 格式

信任包使用 PEM 编码格式。其中仅包含 X.509 authorities。

AWS IAM 权限

由所配置凭据标识的用户或角色必须具备 s3:PutObject IAM 权限。

在 aws_s3 BundlePublisher 中使用 IRSA(IAM Roles for Service Accounts)

aws_s3 BundlePublisher 使用 AWS SDK 默认的凭据链(credential chain)。这意味着它在 EKS 上开箱即用地支持 IAM Roles for Service Accounts(IRSA)。

使用 IRSA 时,不需要配置 access_key_idsecret_access_key 选项。

当在 EKS 上运行并关联了 IAM 角色时,一旦配置了 IRSA,EKS 会自动设置环境变量 AWS_WEB_IDENTITY_TOKEN_FILEAWS_ROLE_ARN。插件会利用它们来获取临时凭据。

使用 IRSA 的步骤:

  1. 为你的 Service Account 配置正确的 IAM 角色注解(annotation)。
  2. plugin_data 配置中省略 access_key_idsecret_access_key

使用 IRSA 的示例配置:

hcl
    BundlePublisher "aws_s3" {
        plugin_data {
            region = "us-east-1"
            bucket = "spire-trust-bundle"
            object_key = "example.org"
            format = "spiffe"
        }
    }

示例配置

以下配置将本地信任包内容上传到 spire-trust-bundle 存储桶中的 example.org 对象。AWS 访问密钥 ID 和私密访问密钥从 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESSKEY 环境变量获取。

hcl
    BundlePublisher "aws_s3" {
        plugin_data {
            region = "us-east-1"
            bucket = "spire-trust-bundle"
            object_key = "example.org"
            format = "spiffe"
        }
    }

以下配置将本地信任包内容上传到 Minio 服务器上 spire-trust-bundle 存储桶中的 example.org 对象。

hcl
    BundlePublisher "aws_s3" {
        plugin_data {
            endpoint = "https://my-org-minio.example.org"
            region = "minio-sample-region"
            access_key_id  = "minio-key-id"
            secret_access_key = "minio-access-key"
            bucket = "spire-trust-bundle"
            object_key = "example.org"
            format = "spiffe"
        }
    }