存储密钥轮换
存储密钥对存储在Vault中的每个秘密进行加密,并且仅在内存中未加密。 只需向正确的API端点或CLI发送呼叫,即可在线轮换此密钥:
$ vault operator rotate Key Term 3 Install Time 01 May 17 10:30 UTC
这需要在策略上设置的权限。从旋转密钥的时间点开始,每个新密钥都用新密钥加密。这是一个相当简单的过程,大多数组织每六个月进行一次,除非有妥协。
主钥匙旋转
主密钥包装存储密钥,并且只在内存中未加密。使用自动开封时,主密钥将由密封密钥加密,并且将为某些操作提供恢复密钥。此过程也是在线的,不会造成任何中断,但需要密钥持有者输入其当前的分片或恢复密钥以验证过程,并且它的时间限制。该程序的执行方式如下:
- 密钥持有者将其GPG公钥发送给运营商。
- 操作员将启动重新键入过程,提供密钥持有者GPG公钥,并从Vault中检索随机数。
- 该随机数被移交给主要官员以验证该操作。法定人数的主要官员继续提交他们的钥匙。
- 运营商(一旦达到法定人数的关键人员),可以检索使用GPG加密的新密钥,并将其交给关键人员。
- 主要官员可以着手验证他们的新共享。
只要钥匙扣长时间不再可用,就应执行此程序。传统上,在组织中与人力资源部门进行一定程度的协作,或者这些程序已经存在于使用HSM的组织,并且可以用于Vault。
该程序的说明可以在下面找到。
除非有妥协,否则此程序通常由组织每年执行。
密封钥匙旋转
这个程序因密封而异。
对于PKCS#11密封,传统上操作员只需更改key_label和hmac_key_label参数。 在检测到标签已更改且与用于加密主密钥的标签不匹配时,Vault将仅重新包装它:
2018-09-05T11:56:22.892Z [DEBUG] cluster listener addresses synthesized: cluster_addresses=[127.0.0.1:8201] 2018-09-05T11:56:22.892Z [INFO ] core: stored unseal keys supported, attempting fetch 2018-09-05T11:56:22.892Z [DEBUG] sealwrap: unwrapping entry: key=core/hsm/barrier-unseal-keys 2018-09-05T11:56:22.893Z [DEBUG] sealwrap: unwrapping entry: key=core/keyring 2018-09-05T11:56:22.895Z [INFO ] core: vault is unsealed 2018-09-05T11:56:22.895Z [INFO ] core: post-unseal setup starting 2018-09-05T11:56:22.895Z [DEBUG] core: clearing forwarding clients 2018-09-05T11:56:22.895Z [DEBUG] core: done clearing forwarding clients 2018-09-05T11:56:22.895Z [DEBUG] sealwrap: checking upgrades 2018-09-05T11:56:22.895Z [DEBUG] sealwrap: unwrapping entry: key=core/hsm/barrier-unseal-keys 2018-09-05T11:56:22.896Z [TRACE] sealwrap: wrapping entry: key=core/hsm/barrier-unseal-keys 2018-09-05T11:56:22.898Z [DEBUG] sealwrap: unwrapping entry: key=core/keyring 2018-09-05T11:56:22.899Z [TRACE] sealwrap: wrapping entry: key=core/keyring 2018-09-05T11:56:22.900Z [DEBUG] sealwrap: upgrade completed successfully 2018-09-05T11:56:22.900Z [DEBUG] sealwrap: unwrapping entry: key=core/wrapping/jwtkey 2018-09-05T11:56:22.902Z [TRACE] sealwrap: wrapping entry: key=core/wrapping/jwtkey
可以使用HSM工具或pkcs11-list命令验证密钥的存在:
$ pkcs11-list Enter Pin: object[0]: handle 2 class 4 label[11] 'vault_key_2' id[10] 0x3130323636303831... object[2]: handle 4 class 4 label[16] 'vault_hmac_key_1' id[9] 0x3635313134313231... object[3]: handle 5 class 4 label[11] 'vault_key_1' id[10] 0x3139303538303233...
DR推广
将执行DR促销程序以在灾难性故障时继续服务,这将使主集群无法使用。如果主群集正在使用中,则不应执行此过程,因为它可能会产生意外后果。
触发DR促销的可能原因包括但不限于:
- 主数据中心故障
- 主群集上的数据损坏
- 密封键丢失
- 密封密钥篡改
此程序包括保险柜操作员和主要官员,类似于启封或关键轮换,因为法定人数需要通过提交其关键份额来批准操作。
- 运营商提交将辅助群集提升为主要群组的请求。这是DR群集可用的唯一端点之一,在正常参数下无法运行。它将检索操作的nonce。
- 主要官员将继续提交他们的关键碎片。
- 一旦达到法定人数的关键人员,操作员就可以检索操作密钥。
- 该操作键是一次性使用,操作员将使用它来开始促销过程。
该过程如下图所示。
政策维护模式
当集中管理策略时,实现管道以维护Vault中的策略添加是非常常见的,以便启用合并批准系统,潜在的消费者可以请求访问,并且运营商和中央安全性都可以允许合并。 Terraform可用于读取策略文件并确保代码和策略之间的符合性。
策略模板还可用作减少维护策略数量的方法,基于来自属性的插值或来自实体的键值对。
例如,从包含“应用程序”键的实体,带有“APMA”值:
$ vault read identity/entity/id/670577b3-0acb-2f5c-6e14-0222d3478ce3 Key Value --- ----- aliases [map[canonical_id:670577b3-0acb-2f5c-6e14-0222d3478ce3 creation_time:2018-11-13T13:15:04.400343Z mount_path:auth/userpass/ mount_type:userpass name:nico id:14129432-cf46-d6a6-3bdf-dcad71a51f4a last_update_time:2018-11-13T13:15:04.400343Z merged_from_canonical_ids:<nil> metadata:<nil> mount_accessor:auth_userpass_31a3c976]] creation_time 2018-11-13T13:14:57.741079Z direct_group_ids [] disabled false group_ids [] id 670577b3-0acb-2f5c-6e14-0222d3478ce3 inherited_group_ids [] last_update_time 2018-11-13T13:20:53.648665Z merged_entity_ids <nil> metadata map[application:APMA] name nico policies [default test]
可以存在一个策略来访问与已定义键的值匹配的静态秘密装载:
path "{{identity.entity.metadata.application}}/*" { capabilities = ["read","create","update","delete"] }
可以通过Sentinel引入治理导向策略,作为角色或端点管理策略。
应用上线
将新秘密添加到Vault并使新应用程序能够使用它们是Vault中最常规的操作。
每个组织在秘密生成,消费和移交点方面都有自己的指导方针,但一般来说,提前商定以下几个方面:
- 什么是消费者参与这个过程。消费者将负责通过Vault进行身份验证,保护令牌,然后获取机密,或者期望存在一定程度的自动化以保证令牌前进。切换点需要事先商定。
- 是否有一个团队处理运行时,因此,开发人员没有参与,应用程序外部的工具将用于消耗秘密。
- 消费者是命名空间的一部分,因此应该为新应用程序创建角色。
- 如果使用静态机密,消费者是否希望将密钥手动存储到Vault中,或者是否会由进程自动刷新。
最常见的是,如前所述,组织首先审核已存储在多个源中的静态密码,并将其存储到Vault中以使其受到管理。从那里,应用程序可以使用上述模式来使用它,并且可以引入过程来管理它们的生命周期,或者有效地将生命周期管理转移到秘密引擎。
否则,入门应用程序的步骤非常通用:
- 使用Vault设置身份验证,或者只是创建一个映射到策略的角色(除非使用上面提到的技术之一)
- 定义将存储秘密的位置
- 设置应用程序以使用它
其他资源
- What is the crawl, walk, run journey for using Vault?
- How do security teams keep up with DevOps and deploy security at scale?
- How long does it take to roll out Vault?
- What does Dev, Ops, and Security do in a Vault rollout?
- What are the Dev, Ops, and Security journeys for secrets management?
- How should Dev, Ops, and Security collaborate on secrets management?
- What application should I secure with Vault first?
原文:https://www.hashicorp.com/resources/adopting-hashicorp-vault#day-n
本文:https://pub.intelligentx.net/adopting-hashicorp-vault-day-n
讨论:请加入知识星球或者小红圈【首席架构师圈】
Tags
最新内容
- 1 hour ago
- 1 week 2 days ago
- 1 week 2 days ago
- 1 week 2 days ago
- 1 week 2 days ago
- 1 week 2 days ago
- 2 weeks 1 day ago
- 2 weeks 1 day ago
- 2 weeks 4 days ago
- 2 weeks 4 days ago