本文为 SPIRE 官方文档 plugin_server_bundlepublisher_aws_s3 的中文译本,以英文原文为准。 🔗 穿越源码分析:Server 详解 · BundlePublisher
Server 插件:BundlePublisher "aws_s3"
aws_s3 插件将 server 当前的信任包(trust bundle)存入指定的 Amazon S3 存储桶(bucket),并保持其持续更新。
该插件接受以下配置选项:
| 配置项 | 说明 | 是否必填 | 默认值 |
|---|---|---|---|
| access_key_id | AWS 访问密钥 ID(access key id)。 | 仅当未设置 AWS_ACCESS_KEY_ID 环境变量时必填。 | AWS_ACCESS_KEY_ID 环境变量的值。 |
| secret_access_key | AWS 私密访问密钥(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_id 和 secret_access_key 选项。
当在 EKS 上运行并关联了 IAM 角色时,一旦配置了 IRSA,EKS 会自动设置环境变量 AWS_WEB_IDENTITY_TOKEN_FILE 和 AWS_ROLE_ARN。插件会利用它们来获取临时凭据。
使用 IRSA 的步骤:
- 为你的 Service Account 配置正确的 IAM 角色注解(annotation)。
- 在
plugin_data配置中省略access_key_id和secret_access_key。
使用 IRSA 的示例配置:
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 环境变量获取。
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 对象。
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"
}
}