kidfund/laravault

使用Hashicorp Vault自动加密Eloquent模型

dev-master 2019-10-10 20:51 UTC

This package is auto-updated.

Last update: 2024-09-11 14:24:09 UTC


README

Latest Version on Packagist Software License Build Status Total Downloads

LaraVault使用HashicorpVault来加密/解密Eloquent模型上的特定字段,并将加密后的值存储在现有的数据库中

安装

通过Composer

$ composer require kidfund/laravault

用法

Kidfund使用Hashicorp的Vault来加密用户个人身份信息(PII)。这有三个主要方面:

  1. Vault服务器
  2. Vault客户端
  3. 用于加密/解密属性的Laravel模型特性

Vault服务器可以从命令行运行。如果已安装,则可以从Kidfund项目的根目录启动服务器:

vault server -config ./vendor/kidfund/thin-transit-client/config/vault.hcl.example

Vault配置

如果第一次在本地运行Vault,需要设置。这只需要第一次。之后,Laravel将为您与Vault交互。唯一的例外是解密。每次启动Vault时,您都需要解密Vault。

  1. 保留启动Vault的窗口打开
  2. 在新的窗口中:export VAULT_ADDR=http://192.168.20.20:8200 (这是假设vagrant/homestead配置。您可能指向localhost)
  3. vault init将为您提供实例的主密钥碎片。请保留这些
  4. 还要注意初始根令牌。取出它并运行此命令:export VAULT_TOKEN=[YOUR INITIAL ROOT TOKEN]
  5. vault unseal并输入3个主密钥碎片(继续运行命令)
  6. mount transit
  7. 创建Laravel将使用的访问策略:vault policy-write web ./vendor/kidfund/thin-transit-client/config/vault.policy.web.json
  8. 为Laravel获取访问令牌:vault token-create -orphan -policy="web"
  9. 将此令牌添加到.env中的VAULT_TOKEN=

Vault流程

如果Laravel模型正在加密字段,这些是使用Vault的Transit后端采取的一般步骤

加密

  1. 模型确定是否需要加密,并将明文发送到Vault客户端
  2. Vault客户端与Vault服务器通信,并获取密文
  3. Vault客户端将密文交给Laravel模型
  4. Laravel将密文保存到Laravel的数据存储中

解密

  1. 模型从Laravel的数据库中检索密文
  2. 模型确定是否需要解密,并将密文发送到Vault客户端
  3. Vault客户端与Vault服务器通信,并获取明文
  4. Vault客户端将明文交给Laravel模型

Laravel特性

要启用特性的加密

use Kidfund\LaraVault\LaraVault;

class User extends Authenticatable
{
    use LaraVault;

    protected $encrypts = [
		'phone_number',
    ];
}

使用Vault的字段必须比正常更大

密文比明文长得多

$table->string('phone_number', 255)

注意

  • 主密钥只有操作员才知道
  • 每个加密的字段都使用不同的加密密钥。每个密钥都使用主密钥加密
  • 每行在Vault中都有自己的上下文
  • 由LaraVault加密的日期/时间必须是字符串

测试

没有运行Vault实例

$ ./vendor/bin/phpunit --exclude-group EndToEnd

有运行Vault实例

$ ./vendor/bin/phpunit

贡献

请参阅CONTRIBUTINGCONDUCT获取详细信息。

安全

如果您发现任何与安全相关的问题,请通过电子邮件timothy.broder@gmail.com联系,而不是使用问题跟踪器。

致谢

许可

MIT许可证(MIT)。有关更多信息,请参阅许可证文件