使用 AWS KMS 加密数据库 secrets
您可以使用 AWS Key Management Service 的加密密钥来加密 Grafana 数据库中的 secrets。
先决条件
- 一个拥有查看和创建 KMS 密钥权限的 AWS 账户,以及访问这些密钥的编程凭据
- 访问 Grafana 配置文件
从 AWS Management Console 或使用 AWS KMS API 创建一个对称 API 密钥。
有关详细说明,请参阅 创建密钥。检索 Key ID。
在 AWS 术语中,这可以是 Key ID、Key ARN(Amazon Resource Name)、别名或别名 ARN。有关如何从 AWS 检索 Key ID 的更多信息,请参阅 查找 Key ID 和 Key ARN。创建一个具有查看您创建的密钥权限的编程凭据(Access Key ID 和 Secret Access Key)。
在 AWS 中,您可以使用密钥策略、IAM 策略和授权来控制对 KMS 密钥的访问。您还可以创建临时凭据,临时凭据必须与 Access Key ID 和 Secret Access Key 一起提供会话令牌。在 Grafana 内部,开启 envelope encryption。
将您的 AWS KMS 详细信息添加到 Grafana 配置文件中;根据您的操作系统,该文件通常名为
grafana.ini
a. 在配置文件中添加一个新部分,名称格式为[security.encryption.awskms.<KEY-NAME>]
,其中<KEY-NAME>
是一个唯一标识该密钥在其他提供商密钥中的名称。
b. 使用以下值填充该部分key_id
:对 KMS 中存储的密钥的引用。这可以是 Key ID、Key Amazon Resource Name (ARN)、别名或别名 ARN。如果您使用别名,请使用前缀alias/
。要指定不同 AWS 账户中的 KMS 密钥,请使用其 ARN 或别名。有关如何从 AWS 检索 Key ID 的更多信息,请参阅 查找 Key ID 和 Key ARN。key_id
选项示例值 Key ID 1234abcd-12ab-34cd-56ef-1234567890ab
Key ARN arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
别名 alias/ExampleAlias
别名 ARN arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias
access_key_id
:您之前生成的 AWS Access Key ID。secret_access_key
:您之前生成的 AWS Secret Access Key。region
:您创建 KMS 密钥的 AWS 区域。区域包含在密钥的 ARN 中。例如:arn:aws:kms:*us-east-2*:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
grafana.ini
文件中 AWS KMS 提供商部分的示例如下# AWS key management service provider setup ;[security.encryption.awskms.example-encryption-key] # Reference to a KMS key - either key ID, key ARN, alias name, or ARN ;key_id = 1234abcd-12ab-34cd-56ef-1234567890ab # AWS access key ID ;access_key_id = AKIAIOSFODNN7EXAMPLE # AWS secret access key ;secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY # AWS region, for example eu-north-1 ;region = eu-north-1
使用您创建的新 Encryption Provider 密钥更新
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 = awskms.example-encryption-key # list of configured key providers, space separated available_encryption_providers = awskms.example-encryption-key
(可选) 从命令行并在 Grafana 的根目录执行以下命令,使用新密钥重新加密 Grafana 数据库中的所有 secrets
grafana cli admin secrets-migration re-encrypt
如果您不重新加密现有 secrets,它们将保留由之前的加密密钥加密。用户仍然可以访问它们。
> 注意:此过程可能需要几分钟才能完成,具体取决于数据库中 secrets(如数据源)的数量。此过程运行时,用户可能会遇到错误,且可能不会发送告警通知。
> 注意:如果您在 Grafana 初始设置期间(在创建任何数据源或仪表盘之前)更新此加密密钥,则此步骤不是必需的,因为 Grafana 中没有 secrets 需要迁移。