本文为 SPIRE 官方文档 plugin_agent_svidstore_gcp_secretmanager 的中文译本,以英文原文为准。 🔗 穿越源码分析:Agent 详解 · SVIDStore
Agent 插件:SVIDStore "gcp_secretmanager"
gcp_secretmanager 插件将 agent 有权获取的条目所对应的 X509-SVID 存储到 Google Cloud Secret Manager 中。
Secret 格式
用于将已签发身份存入 secret 的格式如下:
json
{
"spiffeId": "spiffe://example.org",
"x509Svid": "X509_CERT_CHAIN_PEM",
"x509SvidKey": "PRIVATE_KEY_PEM",
"bundle": "X509_BUNDLE_PEM",
"federatedBundles": {
"spiffe://federated.org": "X509_FEDERATED_BUNDLE_PEM"
}
}所需的 GCP 权限
本插件需要以下 IAM 权限才能正常工作:
text
secretmanager.secrets.create
secretmanager.secrets.delete
secretmanager.secrets.get
secretmanager.secrets.update
secretmanager.versions.add请注意,本插件不需要读取 secret 版本上所存储 secret 载荷(payload)的权限。
配置
| 配置项 | 说明 | 默认值 |
|---|---|---|
| service_account_file | (可选)用于向 Google Compute Engine API 认证的 service account 文件路径。默认情况下,凭据从环境中获取。 | 环境变量 GOOGLE_APPLICATION_CREDENTIALS 的值 |
配置示例:
hcl
SVIDStore "gcp_secretmanager" {
plugin_data {
service_account_file = "/opt/token"
}
}IAM 策略
在创建新 secret 时,可以附加一条 IAM 策略。这通过 role 和 serviceaccount 选择器完成,二者必须一起配置。该 secret 会将继承而来的 IAM 策略与新策略合并,并创建单条绑定(Binding)。该绑定会使用所提供的 role,并以 service account 作为唯一成员(member)。若未设置 role/serviceaccount,则该 secret 使用从 Secret Manager 继承的策略。
yaml
bindings:
- members:
- serviceAccount:test-secret@project-id.iam.gserviceaccount.com
role: roles/secretmanager.viewer存储选择器
选择器用于 storable 条目,以描述 gcp_secretmanager 在 Google Cloud Secret Manager 中存储 secret 所需的元数据。若未提供某个 required(必填)选择器,插件将在执行时返回错误。
| 选择器 | 示例 | 是否必填 | 说明 |
|---|---|---|---|
gcp_secretmanager:name | gcp_secretmanager:secretname:some-name | x | 存储 SVID 的 secret 名称 |
gcp_secretmanager:projectid | gcp_secretmanager:projectid:some-project | x | 插件将使用 Secret Manager 的 Google Cloud 项目 ID |
gcp_secretmanager:role | gcp_secretmanager:role:roles/secretmanager.viewer | - | 用于 IAM 策略的 Google Cloud role id(设置时需要 serviceaccount) |
gcp_secretmanager:serviceaccount | gcp_secretmanager:serviceaccount:test-secret@test-proj.iam.gserviceaccount.com | - | 用于 IAM 策略的 Google Cloud service account(设置时需要 role) |
gcp_secretmanager:regions | gcp_secretmanager:regions:europe-north1,europe-west1 | - | 创建 secret 所在的 Google Cloud 区域(region)列表,不可变更(省略则使用自动区域选择) |