kidfund / laravault
使用Hashicorp Vault自动加密Eloquent模型
dev-master
2019-10-10 20:51 UTC
Requires
- php: 5.5.9
- guzzlehttp/guzzle: ~5.3|~6.0
- illuminate/database: 5.*
- illuminate/support: 5.*
- kidfund/thin-transit-client: ^0.9.1
Requires (Dev)
- kidfund/monkey-patcher: ^0.9.1
- orchestra/testbench: ^3.2
- phpunit/phpunit: 4.*
This package is auto-updated.
Last update: 2024-09-11 14:24:09 UTC
README
LaraVault使用HashicorpVault来加密/解密Eloquent模型上的特定字段,并将加密后的值存储在现有的数据库中
安装
通过Composer
$ composer require kidfund/laravault
用法
Kidfund使用Hashicorp的Vault来加密用户个人身份信息(PII)。这有三个主要方面:
- Vault服务器
- Vault客户端
- 用于加密/解密属性的Laravel模型特性
Vault服务器可以从命令行运行。如果已安装,则可以从Kidfund项目的根目录启动服务器:
vault server -config ./vendor/kidfund/thin-transit-client/config/vault.hcl.example
Vault配置
如果第一次在本地运行Vault,需要设置。这只需要第一次。之后,Laravel将为您与Vault交互。唯一的例外是解密。每次启动Vault时,您都需要解密Vault。
- 保留启动Vault的窗口打开
- 在新的窗口中:
export VAULT_ADDR=http://192.168.20.20:8200
(这是假设vagrant/homestead配置。您可能指向localhost) vault init
将为您提供实例的主密钥碎片。请保留这些- 还要注意初始根令牌。取出它并运行此命令:
export VAULT_TOKEN=[YOUR INITIAL ROOT TOKEN]
vault unseal
并输入3个主密钥碎片(继续运行命令)mount transit
- 创建Laravel将使用的访问策略:
vault policy-write web ./vendor/kidfund/thin-transit-client/config/vault.policy.web.json
- 为Laravel获取访问令牌:
vault token-create -orphan -policy="web"
- 将此令牌添加到
.env
中的VAULT_TOKEN=
Vault流程
如果Laravel模型正在加密字段,这些是使用Vault的Transit后端采取的一般步骤
加密
- 模型确定是否需要加密,并将明文发送到Vault客户端
- Vault客户端与Vault服务器通信,并获取密文
- Vault客户端将密文交给Laravel模型
- Laravel将密文保存到Laravel的数据存储中
解密
- 模型从Laravel的数据库中检索密文
- 模型确定是否需要解密,并将密文发送到Vault客户端
- Vault客户端与Vault服务器通信,并获取明文
- 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
贡献
请参阅CONTRIBUTING和CONDUCT获取详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件timothy.broder@gmail.com联系,而不是使用问题跟踪器。
致谢
许可
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。