103. GCP-IAM authentication

gcp auth 后端允许使用现有 GCP(Google 云平台)IAM 和 GCE 凭据登录Vault。

GCP IAM 身份验证为服务帐户创建了 JSON Web 令牌(JWT)形式的签名。通过调用 GCP IAM 的projects.serviceAccounts.signJwt API,可以获得服务帐户的 JWT。调用者针对 GCP IAM 进行身份验证,从而证明其身份。该Vault后端将 GCP 视为受信任的第三方。

IAM 凭证既可以从运行时环境(尤其是GOOGLE_APPLICATION_CREDENTIALS环境变量),Google Compute 元数据服务获得,也可以从外部(例如, JSON 或 base64 编码。 JSON 是首选形式,因为它带有调用projects.serviceAccounts.signJwt所需的项目 ID 和服务帐户标识符。

实施例 103.1. bootstrap.yml 具有必需的 GCP-IAM 身份验证属性

spring.cloud.vault:
    authentication: GCP_IAM
    gcp-iam:
        role: my-dev-role

实施例 103.2. 具有所有 GCP-IAM 身份验证属性的 bootstrap.yml

spring.cloud.vault:
    authentication: GCP_IAM
    gcp-iam:
        credentials:
            location: classpath:credentials.json
            encoded-key: e+KApn0=
        gcp-path: gcp
        jwt-validity: 15m
        project-id: my-project-id
        role: my-dev-role
        service-account: [emailprotected]
  • role设置尝试进行登录的角色的名称。

  • credentials.location凭证资源的路径,该凭证资源包含 JSON 格式的 Google 凭证。

  • credentials.encoded-key JSON 格式的 OAuth2 帐户私钥的 base64 编码内容。

  • gcp-path设置要使用的 GCP 安装的路径

  • jwt-validity配置 JWT 令牌有效性。默认为 15 分钟。

  • project-id允许将项目 ID 覆盖为特定值。从获得的凭据中默认为项目 ID。

  • service-account允许将服务帐户 ID 覆盖为特定值。默认为获取的凭证中的服务帐户。

GCP IAM 身份验证需要 Google Cloud Java SDK 依赖性(com.google.apis:google-api-services-iamcom.google.auth:google-auth-library-oauth2-http),因为身份验证实现使用 Google API 进行凭据和 JWT 签名。

Note

Google 凭据需要 OAuth 2 令牌来维护令牌的生命周期。所有 API 都是同步的,因此GcpIamAuthentication不支持AuthenticationSteps,这是反应式使用所必需的。

See also:

103.1 Kubernetes 身份验证

Kubernetes 身份验证机制(自 Vault 0.8.3 起)允许使用 Kubernetes 服务帐户令牌向 Vault 进行身份验证。身份验证基于角色,并且角色绑定到服务帐户名和名称空间。

包含 Pod 服务帐户的 JWT 令牌的文件会自动安装在/var/run/secrets/kubernetes.io/serviceaccount/token处。

实施例 103.3. 具有所有 Kubernetes 身份验证属性的 bootstrap.yml

spring.cloud.vault:
    authentication: KUBERNETES
    kubernetes:
        role: my-dev-role
        kubernetes-path: kubernetes
        service-account-token-file: /var/run/secrets/kubernetes.io/serviceaccount/token
  • role设置角色。

  • kubernetes-path设置要使用的 Kubernetes 安装的路径。

  • service-account-token-file设置包含 Kubernetes 服务帐户令牌的文件的位置。默认为/var/run/secrets/kubernetes.io/serviceaccount/token

See also: