菜单
Enterprise Open source

集成 Grafana 和 Hashicorp Vault

如果你使用 Hashicorp Vault 管理你的密钥,你可以将它们用于配置配置供应

注意

Grafana Enterprise 中可用。

注意

如果你已将 Grafana 设置为高可用性,则建议不要对配置文件使用动态密钥。每个 Grafana 实例负责续订自己的租约。当你的一个 Grafana 服务器关闭时,你的数据源租约可能会过期。

配置

在使用 Vault 之前,你需要通过提供 URL、身份验证方法(目前仅支持 token)以及你的 Vault 服务的 token 来激活它。如果服务 token 是可续订的且设置了有限的生命周期,Grafana 会自动续订它。

如果你使用短期租约,你还可以配置 Grafana 应多久续订一次租约以及续订多久。除非遇到问题,否则我们建议保留默认设置。

ini
[keystore.vault]
# Location of the Vault server
;url =
# Vault namespace if using Vault with multi-tenancy
;namespace =
# Method for authenticating towards Vault. Vault is inactive if this option is not set
# Possible values: token
;auth_method =
# Secret token to connect to Vault when auth_method is token
;token =
# Time between checking if there are any secrets which needs to be renewed.
;lease_renewal_interval = 5m
# Time until expiration for tokens which are renewed. Should have a value higher than lease_renewal_interval
;lease_renewal_expires_within = 15m
# New duration for renewed tokens. Vault may be configured to ignore this value and impose a stricter limit.
;lease_renewal_increment = 1h

vault server -dev 示例

ini
[keystore.vault]
url = http://127.0.0.1:8200 # HTTP should only be used for local testing
auth_method = token
token = s.sAZLyI0r7sFLMPq6MWtoOhAN # replace with your key

使用 Vault 扩展器

配置 Vault 后,你必须设置希望使用 Vault 的配置或配置供应文件。Vault 配置是配置变量扩展的扩展,遵循 $__vault{<argument>} 语法。

Vault 的参数包含三个部分,用冒号分隔

  • 第一部分指定应使用哪个 Secrets Engine。
  • 第二部分指定应访问哪个 secret。
  • 第三部分指定应使用该 secret 的哪个字段。

例如,如果你将 Grafana 管理员用户的 Key/Value secret 放置在 secret/grafana/admin_defaults 中,访问其 password 字段的语法将是 $__vault{kv:secret/grafana/admin_defaults:password}

Secrets Engine

Vault 支持许多 Secrets Engine,它们代表了授权用户请求时存储或生成 secrets 的不同方法。Grafana 支持其中的一部分,这些部分最可能与 Grafana 安装相关。

Key/Value

Grafana 支持 Vault 的 K/V version 2 存储引擎,用于存储和检索任意 secret,表示为 kv

ini
$__vault{kv:secret/grafana/smtp:username}

数据库

Vault 数据库 Secrets Engine 是一个共享相似语法并授予用户动态访问数据库的 Secrets Engine 系列。你可以将其用于设置 Grafana 自身的数据库访问以及配置数据源。

ini
$__vault{database:database/creds/grafana:username}

示例

以下示例展示了如何设置你的配置或配置供应文件以使用 Vault 检索配置值。

配置

以下是使用 Vault 设置 Grafana 配置文件中的电子邮件和数据库凭据的部分示例。有关更多信息,请参阅配置

ini
[smtp]
enabled = true
host = $__vault{kv:secret/grafana/smtp:hostname}:587
user = $__vault{kv:secret/grafana/smtp:username}
password = $__vault{kv:secret/grafana/smtp:password}

[database]
type = mysql
host = mysqlhost:3306
name = grafana
user = $__vault{database:database/creds/grafana:username}
password = $__vault{database:database/creds/grafana:password}

配置供应

以下是一个完整的配置供应 YAML 示例,演示了如何使用 Vault 的数据库 Secrets Engine 设置 MySQL 数据源。有关更多信息,请参阅配置供应

provisioning/custom.yaml

ini
apiVersion: 1

datasources:
  - name: statistics
    type: mysql
    url: localhost:3306
    database: stats
    user: $__vault{database:database/creds/ro/stats:username}
    secureJsonData:
      password: $__vault{database:database/creds/ro/stats:password}