使用 Hashicorp Vault 加密数据库秘密
您可以使用 Hashicorp Vault 的加密密钥来加密 Grafana 数据库中的秘密。
前提条件
- 拥有管理 Hashicorp Vault 的权限,以便启用秘密引擎和颁发令牌。
- 访问 Grafana 配置文件
在 Hashicorp Vault 中启用 transit secrets engine。
在 Grafana 内部,开启信封加密。
将您的 Hashicorp Vault 详细信息添加到 Grafana 配置文件中;根据您的操作系统,该文件通常命名为
grafana.ini
a. 向配置文件添加一个新部分,名称格式为[security.encryption.hashicorpvault.<KEY-NAME>]
,其中<KEY-NAME>
是一个名称,用于在其他提供商密钥中唯一标识此密钥。
b. 在该部分填写以下值token
: 用于在 Hashicorp Vault 中进行身份验证的周期性服务令牌。url
: Hashicorp Vault 服务器的 URL。transit_engine_path
: transit engine 的挂载点。key_ring
: 加密密钥的名称。token_renewal_interval
: 指定续订令牌的频率;应小于周期性服务令牌的period
值。
grafana.ini
文件中 Hashicorp Vault 提供者部分的示例如下:# Example of Hashicorp Vault provider setup ;[security.encryption.hashicorpvault.example-encryption-key] # Token used to authenticate within Vault. We suggest to use periodic tokens: more on token types https://www.vaultproject.io/docs/concepts/tokens#service-tokens ;token = # Location of the Hashicorp Vault server ;url = https://:8200 # Mount point of the transit secret engine ;transit_engine_path = transit # Key ring name ;key_ring = grafana-encryption-key # Specifies how often to check if a token needs to be renewed, should be less than a token's period value token_renewal_interval = 5m
使用您创建的新加密提供者密钥更新
grafana.ini
配置文件的[security]
部分[security] # previous encryption key, used for legacy alerts, decrypting existing secrets or used as default provider when external providers are not configured secret_key = AaaaAaaa # encryption provider key in the format <PROVIDER>.<KEY-NAME> encryption_provider = hashicorpvault.example-encryption-key # list of configured key providers, space separated available_encryption_providers = hashicorpvault.example-encryption-key
(可选)从命令行并在 Grafana Enterprise 的根目录下,使用以下命令使用新密钥重新加密 Grafana 数据库中的所有秘密:
grafana cli admin secrets-migration re-encrypt
如果您不重新加密现有秘密,它们将保留由之前的加密密钥加密。用户仍然能够访问它们。
> 注意:此过程可能需要几分钟才能完成,具体取决于您数据库中的秘密(例如数据源)数量。在此过程运行时,用户可能会遇到错误,并且可能不会发送告警通知。
> 注意:如果您在创建任何数据源或仪表盘之前,在 Grafana 的初始设置期间更新此加密密钥,则无需执行此步骤,因为 Grafana 中没有要迁移的秘密。