认证方法

不同组织对安全和身份验证有不同的要求。 Vault 通过支持多种认证方式来体现这一需求。 Spring Cloud Vault 支持Tokens和 AppID 认证。spring-doc.cadn.net.cn

Tokens认证

Tokens是 Vault 内部认证的核心方法。 Tokens认证需要通过配置提供静态Tokens。 作为备选,标记也可以从~/.vault-token这是Vault CLI用来缓存Tokens的默认位置。spring-doc.cadn.net.cn

Tokens认证是默认的认证方法。 如果某个Tokens被披露,非预期方将获得Vault的访问权限,并能访问目标客户端的秘密。
application.yml
spring.cloud.vault:
    authentication: TOKEN
    token: 00000000-0000-0000-0000-000000000000

Vault Agent 认证

Vault 自 0.11.0 版本起就提供带有 Vault Agent 的副车工具。Vault Agent 实现了 Spring Vault 的功能会话管理器并配备了自动认证功能。 应用程序可以通过依赖运行于 的 Vault Agent 来重复利用缓存会话凭证本地主持. Spring Vault 可以发送请求而无需X-金库-Tokens页眉。 禁用 Spring Vault 的认证基础设施,以关闭客户端认证和会话管理。spring-doc.cadn.net.cn

application.yml
spring.cloud.vault:
    authentication: NONE

AppId认证

Vault 支持由两个难以猜测的Tokens组成的 AppId 认证。 AppId默认为spring.application.name这是静态配置的。 第二个Tokens是 UserId,这是应用程序确定的一个部分,通常与运行环境相关。 IP 地址、Mac 地址或 Docker 容器名称都是很好的例子。 Spring Cloud Vault 配置支持 IP 地址、Mac 地址和静态用户 ID(例如通过系统属性提供)。 IP和Mac地址以十六进制编码的SHA256哈希表示。spring-doc.cadn.net.cn

基于IP地址的用户ID使用本地主机的IP地址。spring-doc.cadn.net.cn

application.yml使用 SHA256 IP 地址用户ID
spring.cloud.vault:
    authentication: APPID
    app-id:
        user-id: IP_ADDRESS

从命令行生成 IP 地址 UserID 的对应命令是:spring-doc.cadn.net.cn

$ echo -n 192.168.99.1 | sha256sum
包括 的换行回波导致不同的哈希值,因此请务必包含-n旗。

基于Mac地址的UserID从本地主机绑定的设备获取网络设备。 该配置还允许指定网络接口提示:选择正确的设备。 的价值网络接口是可选的,可以是接口名称或接口索引(基于0)。spring-doc.cadn.net.cn

application.yml 使用 SHA256 MAC 地址用户ID
spring.cloud.vault:
    authentication: APPID
    app-id:
        user-id: MAC_ADDRESS
        network-interface: eth0

从命令行生成 IP 地址 UserID 的对应命令是:spring-doc.cadn.net.cn

$ echo -n 0AFEDE1234AC | sha256sum
Mac 地址以大写字母表示,不加冒号。 包括 的换行回波导致不同的哈希值,因此请务必包含-n旗。

自定义用户ID

UserId 生成是一个开放机制。 你可以设置spring.cloud.vault.app-id.user-id映射到任意字符串,配置值将作为静态用户ID(UserId)使用。spring-doc.cadn.net.cn

更高级的方法可以让你设置spring.cloud.vault.app-id.user-id给一个班级名字。 该类必须在你的类路径上,并且必须实现org.springframework.cloud.vault.AppIdUserIdMechanism接口和createUserID方法。 Spring Cloud Vault 将通过呼叫获取用户 IDcreateUserID每次都使用AppID进行身份验证以获取Tokens。spring-doc.cadn.net.cn

application.yml
spring.cloud.vault:
    authentication: APPID
    app-id:
        user-id: com.examlple.MyUserIdMechanism
MyUserIdMechanism.java
public class MyUserIdMechanism implements AppIdUserIdMechanism {

  @Override
  public String createUserId() {
    String userId = ...
    return userId;
  }
}

AppRole 认证

AppRole 旨在用于机器认证,类似于自 Vault 0.6.1 起已废弃的 AppId 认证。 AppRole 认证由两个难以猜测的(秘密)Tokens组成:RoleId和SecretId。spring-doc.cadn.net.cn

Spring Vault 支持多种 AppRole 场景(推拉模式和封装模式)。spring-doc.cadn.net.cn

配置必须提供RoleId和可选的SecretId,Spring Vault不会查找这些,也不会创建自定义SecretId。spring-doc.cadn.net.cn

application.yml AppRole 认证属性
spring.cloud.vault:
    authentication: APPROLE
    app-role:
        role-id: bde2076b-cccb-3cf0-d57e-bca7b1e83a52

以下场景根据所需的配置细节支持:spring-doc.cadn.net.cn

表1。配置

方法spring-doc.cadn.net.cn

角色识别spring-doc.cadn.net.cn

秘密spring-doc.cadn.net.cn

角色名称spring-doc.cadn.net.cn

Tokensspring-doc.cadn.net.cn

提供的 RoleId/SecretIdspring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供无SecretID的RoleId。spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供 roleId,拉取 SecretIdspring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

拉取 RoleId,提供的 SecretIDspring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

全拉模式spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

包裹spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

封装 RoleId,提供 SecretIDspring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供 RoleId,包裹 SecretIdspring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

表2。拉/推/包裹矩阵

角色识别spring-doc.cadn.net.cn

秘密spring-doc.cadn.net.cn

支持spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

包裹spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

缺席spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

包裹spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

缺席spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

包裹spring-doc.cadn.net.cn

提供spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

包裹spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

包裹spring-doc.cadn.net.cn

包裹spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

包裹spring-doc.cadn.net.cn

缺席spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

你仍然可以通过配置配置使用所有推/拉/包裹模式的组合AppRoleAuthentication在语境中是豆子。 Spring Cloud Vault 无法从配置属性中推导出所有可能的 AppRole 组合。
AppRole 认证仅限于简单的拉取模式,使用响应式基础设施。 目前还不支持全拉模式。 使用 Spring Cloud Vault 配合 Spring WebFlux 栈,可以启用 Vault 的响应式自动配置功能,该配置可以通过设置来禁用spring.cloud.vault.reactive.enabled=false.
application.yml所有AppRole认证属性
spring.cloud.vault:
    authentication: APPROLE
    app-role:
        role-id: bde2076b-cccb-3cf0-d57e-bca7b1e83a52
        secret-id: 1696536f-1976-73b1-b241-0b4213908d39
        role: my-role
        app-role-path: approle

AWS-EC2 认证

aws-ec2 认证后端为 AWS EC2 实例提供了安全的引入机制,允许自动检索 Vault Tokens。 与大多数 Vault 认证后端不同,该后端不需要优先部署或配置安全敏感的凭证(Tokens、用户名/密码、客户端证书等)。 相反,它将 AWS 视为可信第三方,使用经过加密签名的动态元数据,唯一代表每个 EC2 实例。spring-doc.cadn.net.cn

application.yml使用 AWS-EC2 认证
spring.cloud.vault:
    authentication: AWS_EC2

AWS-EC2认证默认允许一次性信赖(Trust On First First, First, Tofu)原则。 任何非意图方获得PKCS#7身份元数据的访问权限都可以对Vault进行身份验证。spring-doc.cadn.net.cn

在第一次登录时,Spring Cloud Vault 会生成一个 nonce 文件,存储在验证后台,除了实例 ID 之外。 重新认证需要发送相同的 nonce。 其他方没有该临时监护人,可以在Vault中发出警报以进一步调查。spring-doc.cadn.net.cn

nonce 被存储在内存中,并在应用重启时丢失。 你可以配置静态 nonce 用Spring.cloud.vault.aws-ec2.nonce.spring-doc.cadn.net.cn

AWS-EC2 认证角色是可选的,默认使用 AMI。 你可以通过设置Spring.cloud.vault.aws-ec2.role财产。spring-doc.cadn.net.cn

application.yml 配置角色
spring.cloud.vault:
    authentication: AWS_EC2
    aws-ec2:
        role: application-server
application.yml所有AWS EC2认证属性
spring.cloud.vault:
    authentication: AWS_EC2
    aws-ec2:
        role: application-server
        aws-ec2-path: aws-ec2
        identity-document: http://...
        nonce: my-static-nonce

AWS-IAM 认证

AWS 后端为 AWS IAM 角色提供安全的认证机制,允许基于当前应用 IAM 角色自动通过 Vault 进行认证。 与大多数 Vault 认证后端不同,该后端不需要优先部署或配置安全敏感的凭证(Tokens、用户名/密码、客户端证书等)。 相反,它将AWS视为可信第三方,利用呼叫者与其IAM凭证签署的4条信息,验证呼叫者确实使用该IAM角色。spring-doc.cadn.net.cn

应用程序当前运行的IAM角色会自动计算。 如果你在AWS ECS上运行应用,应用会使用分配给运行容器ECS任务的IAM角色。 如果你是在 EC2 实例上裸运行应用,那么所用的 IAM 角色将分配给 EC2 实例。spring-doc.cadn.net.cn

使用 AWS-IAM 认证时,你必须在 Vault 中创建一个角色并将其分配给你的 IAM 角色。 一个空洞角色默认使用友好名称,即当前的IAM Role。spring-doc.cadn.net.cn

application.yml具备AWS-IAM认证属性的
spring.cloud.vault:
    authentication: AWS_IAM
application.yml所有 AWS-IAM 认证属性
spring.cloud.vault:
    authentication: AWS_IAM
    aws-iam:
        region: aws-global
        role: my-dev-role
        aws-path: aws
        server-name: some.server.name
        endpoint-uri: https://sts.eu-central-1.amazonaws.com
  • 地区设定 AWS 区域名称。如果未提供,区域将由 AWS 默认设置决定。spring-doc.cadn.net.cn

  • 角色设置尝试登录的对象角色名称。 这应该绑定到你的 IAM 角色。 如果没有提供,则当前 IAM 用户的友好名称将被用作保险库角色。spring-doc.cadn.net.cn

  • aws-路径设置 AWS 挂载的路径spring-doc.cadn.net.cn

  • 服务器名称设置 要用于X-Vault-AWS-IAM-Server-ID该标题阻止某些类型的回放攻击。spring-doc.cadn.net.cn

  • 端点-URI设置 AWS STS API 的值,用于iam_request_url参数。spring-doc.cadn.net.cn

AWS-IAM 需要 AWS Java SDK v2 依赖(Software.amazon.AWSSDK:auth)而认证实现则使用 AWS SDK 类型进行凭证和请求签名。spring-doc.cadn.net.cn

Azure MSI authentication

Azure 认证后端为 Azure VM 实例提供了安全的引入机制,允许自动检索 Vault Tokens。 与大多数 Vault 认证后端不同,该后端不需要优先部署或配置安全敏感的凭证(Tokens、用户名/密码、客户端证书等)。 相反,它将Azure视为可信第三方,使用可绑定到虚拟机实例的托管服务身份和实例元数据信息。spring-doc.cadn.net.cn

application.yml with required Azure Authentication properties
spring.cloud.vault:
    authentication: AZURE_MSI
    azure-msi:
        role: my-dev-role
application.yml 所有 Azure 认证属性
spring.cloud.vault:
    authentication: AZURE_MSI
    azure-msi:
        role: my-dev-role
        azure-path: azure
        metadata-service: http://169.254.169.254/metadata/instance…
        identity-token-service: http://169.254.169.254/metadata/identity…

Azure MSI 认证通过实例元数据服务获取虚拟机的环境信息(订阅 ID、资源组、虚拟机名称)。 Vault 服务器的资源 ID 默认为vault.hashicorp.com. 要改变这一点,设Spring.cloud.vault.azure-msi.identity-token-service因此。spring-doc.cadn.net.cn

TLS证书认证

证书认证后端允许使用 SSL/TLS 客户端证书进行身份验证,这些证书要么由 CA 签名,要么自签名。spring-doc.cadn.net.cn

以实现证书你需要进行以下认证:spring-doc.cadn.net.cn

  1. 使用SSL,参见Vault Client SSL配置spring-doc.cadn.net.cn

  2. 配置一个Java密钥存储其中包含客户端证书和私钥spring-doc.cadn.net.cn

  3. 设置spring.cloud.vault.authentication证书spring-doc.cadn.net.cn

application.yml
spring.cloud.vault:
    authentication: CERT
    ssl:
        key-store: classpath:keystore.jks
        key-store-password: changeit
        key-store-type: JKS
        cert-auth-path: cert

格子认证

Cubbyhole 认证使用 Vault 原语来提供安全的认证流程。 Bootbyhole认证使用Tokens作为主要登录方式。 临时Tokens用于从Vault的Cubbyhole秘密后端获取第二个登录VaultToken。 登录Tokens通常寿命更长,用于与 Vault 交互。 登录Tokens将从存储在/小窝/回应.spring-doc.cadn.net.cn

创建包裹Tokensspring-doc.cadn.net.cn

创建Tokens的响应包装需要 Vault 0.6.0 或更高版本。
创建和存储Tokens
$ vault token-create -wrap-ttl="10m"
Key                            Value
---                            -----
wrapping_token:                397ccb93-ff6c-b17b-9389-380b01ca2645
wrapping_token_ttl:            0h10m0s
wrapping_token_creation_time:  2016-09-18 20:29:48.652957077 +0200 CEST
wrapped_accessor:              46b6aebb-187f-932a-26d7-4f3d86a68319
application.yml
spring.cloud.vault:
    authentication: CUBBYHOLE
    token: 397ccb93-ff6c-b17b-9389-380b01ca2645

GCP-GCE 认证

GCP认证后端允许通过现有的GCP(Google Cloud Platform)IAM和GCE凭证进行Vault登录。spring-doc.cadn.net.cn

GCP GCE(谷歌计算引擎)认证为服务账户创建以 JSON Web Tokens(JWT)为形式签名。 计算引擎实例的JWT通过实例识别从GCE元数据服务中获得。 该 API 创建了一个 JSON Web Tokens,可用于确认实例身份。spring-doc.cadn.net.cn

与大多数 Vault 认证后端不同,该后端不需要优先部署或配置安全敏感的凭证(Tokens、用户名/密码、客户端证书等)。 相反,它将GCP视为可信第三方,并使用经过密码学签名的动态元数据,这些信息唯一代表每个GCP服务账户。spring-doc.cadn.net.cn

application.yml具备GCP-GCE认证特性
spring.cloud.vault:
    authentication: GCP_GCE
    gcp-gce:
        role: my-dev-role
application.yml所有GCP-GCE认证属性
spring.cloud.vault:
    authentication: GCP_GCE
    gcp-gce:
        gcp-path: gcp
        role: my-dev-role
        service-account: [email protected]

GCP-IAM 认证

GCP认证后端允许通过现有的GCP(Google Cloud Platform)IAM和GCE凭证进行Vault登录。spring-doc.cadn.net.cn

GCP IAM 认证为服务账户创建一个以 JSON Web Tokens(JWT)形式签名的过程。 服务账户的JWT通过拨打GCP IAM获得projects.serviceAccounts.signJwt应用程序接口。呼叫者通过GCP IAM进行身份验证,从而证明其身份。 该 Vault 后端将 GCP 视为可信第三方。spring-doc.cadn.net.cn

IAM凭证可以从运行环境获取,具体来说GOOGLE_APPLICATION_CREDENTIALS环境变量、Google Compute元数据服务,或外部以e.g. JSON或base64编码形式提供。 JSON 是首选格式,因为它包含调用所需的项目 ID 和服务账户标识符projects.serviceAccounts.signJwt.spring-doc.cadn.net.cn

application.yml具有所需的GCP-IAM认证属性
spring.cloud.vault:
    authentication: GCP_IAM
    gcp-iam:
        role: my-dev-role
application.yml所有GCP-IAM认证属性
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-id: [email protected]

GCP IAM 认证需要 Google Cloud Java SDK 依赖关系(com.google.apis:google-api-services-iamcom.google.auth:google-auth-library-oauth2-http)作为认证实现,使用Google API进行凭证和JWT签名。spring-doc.cadn.net.cn

Google 凭证需要一个 OAuth 2 Tokens来维持Tokens生命周期。 所有API都是同步的,因此,GcpIam认证不支持认证步骤这对于响应式使用是必要的。

GitHub 认证

你可以通过提供个人访问Tokens,使用 GitHub 认证来对 Vault 进行身份验证。 作为备用,如果安装并认证,Tokens也可以通过GitHub CLI获取。spring-doc.cadn.net.cn

application.yml
spring.cloud.vault:
    authentication: GITHUB
    github:
        token: gho_…
  • 认证将该值设为GITHUB选择GitHub认证方法spring-doc.cadn.net.cn

  • Tokens设置静态Tokens使用。如果缺少或空,则可尝试从中获取TokensGH认证Tokens如果GitHub CLI已安装并认证,且访问权限通过以下途径spring.cloud.vault.github.allow-cli-token=true.spring-doc.cadn.net.cn

  • 允许-CLITokens使得备份到GitHub CLI以获取Tokens。默认禁用,以避免意外调用GitHub CLI。spring-doc.cadn.net.cn

Kubernetes 认证

Kubernetes 认证机制(自 Vault 0.8.3 起)允许使用 Kubernetes 服务账户Tokens与 Vault 进行认证。 认证基于角色,角色绑定到服务账户名称和命名空间。spring-doc.cadn.net.cn

包含 JWT Tokens的文件会自动挂载到/var/run/secrets/kubernetes.io/serviceaccount/token.spring-doc.cadn.net.cn

application.yml所有Kubernetes认证属性
spring.cloud.vault:
    authentication: KUBERNETES
    kubernetes:
        role: my-dev-role
        kubernetes-path: kubernetes
        service-account-token-file: /var/run/secrets/kubernetes.io/serviceaccount/token

Pivotal CloudFoundry 认证

pcf 认证后端为运行在 Pivotal CloudFoundry 实例中的应用程序提供了安全的引入机制,允许自动检索 Vault Tokens。 与大多数 Vault 认证后端不同,该后端无需优先部署或配置安全敏感的凭证(Tokens、用户名/密码、客户端证书等),因为身份配置由 PCF 自行处理。 相反,它将PCF视为可信第三方,并使用托管实例身份。spring-doc.cadn.net.cn

application.yml具有必需的PCF认证属性
spring.cloud.vault:
    authentication: PCF
    pcf:
        role: my-dev-role
application.yml所有PCF认证属性
spring.cloud.vault:
    authentication: PCF
    pcf:
        role: my-dev-role
        pcf-path: path
        instance-certificate: /etc/cf-instance-credentials/instance.crt
        instance-key: /etc/cf-instance-credentials/instance.key
PCF认证要求BouncyCastle(bcpkix-jdk15on)在RSA PSS签名的类路径上。

ACL要求

本节解释了 Spring Vault 访问哪些路径,以便你能根据所需能力推导出策略声明。spring-doc.cadn.net.cn

能力 关联HTTP动词

创造spring-doc.cadn.net.cn

发布/spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

获取spring-doc.cadn.net.cn

更新spring-doc.cadn.net.cn

发布/spring-doc.cadn.net.cn

删除spring-doc.cadn.net.cn

删除spring-doc.cadn.net.cn

列表spring-doc.cadn.net.cn

列表 (获取)spring-doc.cadn.net.cn

认证

登录:发帖认证/$authMethod/登录spring-doc.cadn.net.cn

KeyValue Mount 发现号

获取系统/内部/界面/挂载/卡种/$mountPathspring-doc.cadn.net.cn

秘密租赁容器

秘密租赁容器根据配置的租约端点,使用不同的路径。spring-doc.cadn.net.cn

LeaseEndpoints.Legacyspring-doc.cadn.net.cn

租赁端点。租赁 (系统租赁)spring-doc.cadn.net.cn

会话管理