【数据安全】采用HashiCorp Vault :第一天

Chinese, Simplified

第一天



部署模式



推荐体系结构的首选部署模式是执行HashiCorp Vault和Consul的不可变构建,并执行蓝/绿部署。因此,建议使用HashiCorp Packer等工具为不同平台构建不可变图像,HashiCorp提供了许多关于如何通过现有CI / CD编排构建这些元素的示例。

HashiCorp认识到有些组织没有采用这些模式,因此有许多配置管理模式可供安装,升级和配置Vault,可在不同的存储库中使用:

  • 在Ansible Galaxy中,Brian Shumate的Vault角色
  • 在Ansible Galaxy,Brian Shumate的领事角色
  • 在Puppet Forge中,Vault模块
  • 在Chef Supermarket,hashicorp-vault cookbook

建议您限制对Vault服务器的SSH访问,因为系统上的易失性存储器中存储了许多敏感项。

Vault发布周期

HashiCorp按季度发布Vault的主要版本,以及根据需要发布的次要版本,但至少每月发布一次,因此在组织中更新Vault的过程应该相当简化并且高度自动化。

监控

Vault会侦听单个端口(服务和管理)上的请求,如前所述,这是一个HTTP REST端点。默认情况下,这是TCP端口8200,并且有一个不受保护的状态端点,可用于监视群集的状态,如下所示:

curl -sS http://localhost:8200/v1/sys/health | jq
 {
  "initialized": true,
  "sealed": false,
  "standby": false,
  "performance_standby": false,
  "replication_performance_mode": "disabled",
  "replication_dr_mode": "disabled",
  "server_time_utc": 1545132958,
  "version": "1.0.0-beta1",
  "cluster_name": "vault-cluster-fc75786e",
  "cluster_id": "bb14f30a-6585-d225-ca12-0b2011de4b23"
}

还可以查询节点的单个密封状态,如下所示:

curl -sS http://localhost:8200/v1/sys/seal-status | jq
 {
  "type": "shamir",
  "initialized": true,
  "sealed": false,
  "t": 1,
  "n": 1,
  "progress": 0,
  "nonce": "",
  "version": "1.0.0-beta1",
  "migration": false,
  "cluster_name": "vault-cluster-fc75786e",
  "cluster_id": "bb14f30a-6585-d225-ca12-0b2011de4b23",
  "recovery_seal": false
}

在最佳实践设置中,HashiCorp Consul将监控Vault的状态,并可以通过DNS提供Service Discovery,或自动配置许多流行的开源负载均衡器,如官方参考体系结构指南中所述。 HashiCorp Learn Vault轨道中还提供了详细的分步指南。

遥测

在大规模运行Vault时,建议使用Vault的遥测输出结合遥测分析解决方案(如StatsD,Circonus或Datadog)来分析系统的性能。

审计

从Vault的角度来看,使用SIEM系统是跟踪访问代理的必要条件。 Vault通过Syslog,File或Unix套接字提供输出。大多数组织通过Splunk或使用ELK Stack中的工具来解析和评估此信息。审计输出是JSON数据,使组织能够轻松地解析和分析信息。

备份还原

解决方案的备份是通过Consul Snapshot Agent完成的,Consul Snapshot Agent可以将加密的备份自动上传到S3存储桶,也可以将备份保留在文件系统上,以便传统的企业备份解决方案将其运出。

失败场景

  • 如果单个节点发生故障或最多两个节点发生故障,解决方案将继续运行而无需操作员干预。
  • 如果Vault群集出现故障,则可以使用相同的Storage Backend配置重新设置它。
  • 如果Consul集群失去法定人数,则可以选择重新获得服务可用性,尽管从RTO / RPO角度推荐的方法是故障转移到DR群集或提升性能副本。
  • 如果要删除或不可用密封密钥,则唯一支持的方案是故障转移到DR群集或性能副本。

初始化仪式



虽然Vault中的每个操作都可以由API驱动,并且因此自动化,但初始化过程可确保Vault中的加密信任。持有Unseal Keys或最常见的恢复密钥的密钥持有者是Vault信托的监护人。对于任何Vault安装,此过程只会执行一次。

初始化过程完成后,Vault最容易受到攻击,因为存在根令牌。此根令牌会覆盖策略系统,并且仅在初始阶段用于配置生产身份验证方法和基本策略,或者在主身份验证方法不可用的情况下,在这种情况下需要重新生成根令牌。

建议在单个房间进行初始化仪式,在整个过程中将有操作员和保险柜密钥持有人在场,具体如下:

  1. 操作员启动Vault守护程序和初始化过程,如文档中所述,提供来自密钥持有者的公共GPG密钥,以及操作员拥有根令牌的公共GPG密钥。
  2. Vault将返回GPG加密恢复密钥,这些密钥应在密钥持有者之间分配。
  3. 操作员使用根令牌加载初始策略并配置第一个身份验证后端,传统上是Active Directory或LDAP,以及审计后端。
  4. 操作员验证他们可以使用其目录帐户登录Vault,并可以添加更多策略。
  5. 运算符撤消根令牌。密钥持有人现在可以离开房间,保证没有人拥有对Vault的完全和未经审计的访问权限。

初始化

尽管应考虑以下参数,但脚注中引用的Vault文档中描述了完整的初始化选项集:

  • -root-token-pgp-key:将用于加密根令牌的Operator Public PGP密钥
  • -recovery-shares / threshold:要提供的密钥数量(基于密钥持有者的数量),以及执行恢复操作所需的密钥持有者的法定人数(通常是一半的密钥持有者加一个)
  • -recovery-pgp-keys:与上面的参数类似,来自密钥持有者的公共PGP密钥列表,以便提供密钥共享的加密输出



基本配置

为了在不需要使用根令牌的情况下继续进行进一步配置,必须配置备用身份验证方法。传统上,这是通过LDAP身份验证后端配置Active Directory / LDAP集成,或最近通过OIDC或Okta支持完成的。

组或声明定义为向Vault提供某些管理属性。

此外,策略定义为Vault中的管理操作(如添加挂载,策略,配置进一步的身份验证,审计等...),加密操作(如启动密钥轮换操作),以及最终消费模式,通常定义在以后根据要求。示例管理策略可以定义如下:

## Operations

# List audit backends
path "/sys/audit" {
  capabilities = ["read","list"]
}

# Create an audit backend. Operators are not allowed to remove them.
path "/sys/audit/*" {
  capabilities = ["create","read","list","sudo"]
}

# List Authentication Backends
path "/sys/auth" {
  capabilities = ["read","list"]
}

# CRUD operations on Authentication Backends
path "/sys/auth/*" {
  capabilities = ["read","list","update","sudo"]
}

# CORS configuration
path "/sys/config/cors" {
  capabilities = ["read", "list", "create", "update", "sudo"]
}

# Start root token generation
path "/sys/generate-root/attempt" {
  capabilities = ["read", "list", "create", "update", "delete"]
}
# Configure License
path "/sys/license" {
  capabilities = ["read", "list", "create", "update", "delete"]
}

# Get Storage Key Status
path "/sys/key-status" {
  capabilities = ["read"]
}

# Initialize Vault
path "/sys/init" {
  capabilities = ["read", "update", "create"]
}

#Get Cluster Leader
path "/sys/leader" {
  capabilities = ["read"]
}

# Manage policies
path "/sys/policies*" {
  capabilities = ["read", "list", "create", "update", "delete"]
}

# Manage Mounts
path "/sys/mounts*" {
  capabilities = ["read", "list", "create", "update", "delete"]
}

Auditor策略的示例可以定义如下:

## Audit
# Remove audit devices
path "/sys/audit/*" {
  capabilities = ["delete"]
}

# Hash values to compare with audit logs
path "/sys/audit-hash/*" {
  capabilities = ["create"]
}

# Read HMAC configuration for redacting headers
path "/sys/config/auditing/request-headers" {
  capabilities = ["read", "sudo"]
}

# Configure HMAC for redacting headers
path "/sys/config/auditing/request-headers/*" {
  capabilities = ["read", "list", "create", "update", "sudo"]
}

# Get Storage Key Status
path "/sys/key-status" {
  capabilities = ["read"]
}

An example Key Officer policy could be defined as follows:

## Key Officers
path "/sys/generate-root/update" {
  capabilities = ["create", "update"]
}

# Get Storage Key Status
path "/sys/key-status" {
  capabilities = ["read"]
}

# Submit Key for Re-keying purposes
path "/sys/rekey-recovery-key/update" {
  capabilities = ["create", "update"]
}

# Rotate Storage Key
path "/sys/rotate" {
  capabilities = ["update", "sudo"]
}

# Verify update
path "/sys/rekey-recovery-key/verify" {
  capabilities = ["create", "update"]
}

这些策略并非详尽无遗,虽然定义了三个配置文件,但在大多数组织中,角色隔离的运行范围更深。

值得注意的是,由于某些端点的敏感性,大多数组织选择使用控制组以便为某些配置更改要求批准工作流,例如,在添加或修改策略时,如下例所示:

# Create a Control Group for approvals for CRUD operations on policies
path "/sys/policies*" {
    capabilities = ["create", "update"]
    control_group = {
        ttl = "4h"
        factor "tech leads" {
            identity {
                group_names = ["managers", "leads"]
                approvals = 2
            }
        }
        factor "CISO" {
            identity {
                group_names = ["infosec"]
                approvals = 1
            }
        }
    }
}

通过这种方式,策略更改将需要来自“管理者”或“潜在客户”组的两个批准者,以及来自“信息安全”组的一个批准者。

根令牌撤销

如前面指南中所述,根令牌只应用于初始化和紧急“中断玻璃”操作。配置Vault后,应撤消根令牌,并应使用常规身份验证方法来引入更改。

运营商和法定数量的密钥持有者可以在紧急情况下重新生成根令牌。

组织角色



在大规模部署Vault的大多数组织中,不需要额外的人员配置或招聘。在部署和运行解决方案方面。 Vault没有预定义的角色和配置文件,因为策略系统允许对不同团队的职责进行非常精细的定义,但一般来说,这些已在大多数组织中定义如下:

  • 消费者:需要能够使用机密或需要命名空间保险库功能的个人或团队。
  • 运营商:登录消费者的个人或团队,以及秘密引擎功能,策略,命名空间和身份验证方法。
  • 加密:管理关键轮换和审计策略的个人或团队。
  • 审核:审核和审核使用情况的个人或团队。

 

原文:https://www.hashicorp.com/resources/adopting-hashicorp-vault#day-one

本文:https://pub.intelligentx.net/adopting-hashicorp-vault-day-one

讨论:请加入知识星球或者小红圈【首席架构师圈】

 

SEO Title
adopting-hashicorp-vault-day-one