Skip to content

本文为 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 策略。这通过 roleserviceaccount 选择器完成,二者必须一起配置。该 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:namegcp_secretmanager:secretname:some-namex存储 SVID 的 secret 名称
gcp_secretmanager:projectidgcp_secretmanager:projectid:some-projectx插件将使用 Secret Manager 的 Google Cloud 项目 ID
gcp_secretmanager:rolegcp_secretmanager:role:roles/secretmanager.viewer-用于 IAM 策略的 Google Cloud role id(设置时需要 serviceaccount)
gcp_secretmanager:serviceaccountgcp_secretmanager:serviceaccount:test-secret@test-proj.iam.gserviceaccount.com-用于 IAM 策略的 Google Cloud service account(设置时需要 role)
gcp_secretmanager:regionsgcp_secretmanager:regions:europe-north1,europe-west1-创建 secret 所在的 Google Cloud 区域(region)列表,不可变更(省略则使用自动区域选择)