内容简介:作者:Andrew Harding你好!这是来自Scytale的Andrew Harding。如果你目前正在使用Envoy提供安全的服务到服务通信,我想向你展示如何利用开源SPIRE项目,通过基于多个因子工作负载认证,自动交付和轮换密钥和证书来显着提高你的身份验证安全性。Envoy和SPIRE已经存在了一段时间,但我们最近才在SPIRE中
作者:Andrew Harding
你好!这是来自Scytale的Andrew Harding。如果你目前正在使用Envoy提供安全的服务到服务通信,我想向你展示如何利用开源SPIRE项目,通过基于多个因子工作负载认证,自动交付和轮换密钥和证书来显着提高你的身份验证安全性。
Envoy和SPIRE已经存在了一段时间,但我们最近才在SPIRE中 增加了 对Envoy SDS API的支持,这使得设置起来更加容易。我们来探讨一下。
背景
Envoy 是一个流行的开源服务代理,除其他外,广泛用于在服务之间提供抽象、安全、经过身份验证和加密的通信。Envoy享有丰富的配置系统,允许灵活的第三方交互。
该配置系统的一个组件是 秘密发现服务协议或SDS(Secret Discovery Service) 。Envoy使用SDS从SDS供应商处检索并维护更新的“秘密”。在身份验证的意思来说,这些秘密是Envoy用于在服务之间提供安全TLS通信的TLS证书、私钥和可信CA证书。
短暂的秘密是安全的一个重要方面,因为它们减少了对撤销列表基础设施的需求,这削弱了安全性并导致攻击面增加。旋转短寿命秘密经常涉及手动审计和部署,并且通常对操作员来说非常麻烦。SDS供应商向Envoy提供更新秘密的能力,是简化秘密管理和为Envoy提供最新服务标识的有用步骤。
SPIRE ( SPIFFE 运行时环境)是一个 工具 链,用于在各种平台上建立软件系统之间的信任。SPIRE支持容器化和弹性扩展环境,例如Kubernetes、托管基础架构如Azure、AWS和GCP,以及内部裸机部署。这些环境中的服务可以利用SPIRE以X.509证书( X509-SVID )的形式,获取具有关联私钥的服务标识,以及服务可用于验证其他身份的一组可信CA证书。
当服务与SPIRE接合时,它会经历一个称为证明(attestation)的过程,其中SPIRE宣称
(assert)有关服务及其环境的特征。这些宣称与运营商定义的政策相匹配,以决定应该为服务提供哪个服务标识。(有关证明的更多详细信息,请参阅 此视频 。)SPIRE根据运营商定义的政策自动轮换服务的X.509证书和密钥。
换句话说,Envoy可以通过SDS动态消费服务标识,SPIRE可以动态提供服务标识。听起来很棒!
这个怎样运作
当Envoy连接到SDS服务器时,SPIRE代理会证明Envoy并确定它应该通过SDS向Envoy提供哪些服务身份和CA证书。
随着服务标识和CA证书的轮换,更新将流式传输回Envoy,Envoy可立即将它们应用于新连接,而不会中断或停机,也无需私钥触及磁盘。换句话说,SPIRE丰富的定义和证明服务的方法可用于定位Envoy流程,为其定义身份,并为其提供Xv09证书和Envoy可用于TLS通信的信任信息。
在两个服务之间的两个Envoy代理,使用SPIRE代理作为SDS的实现,以获取相互认证的TLS通信的秘密
配置SPIRE
在SPIRE中设置SDS支持就像在 SPIRE代理配置 中设置enable_sds = true配置值一样简单。
配置Envoy
SPIRE代理群集
必须将Envoy配置为与SPIRE代理通信,通过配置集群指向SPIRE代理提供的Unix域套接字(domain socket)。
例如:
clusters: - name: spire_agent connect_timeout: 0.25s http2_protocol_options: {} hosts: - pipe: path: /tmp/agent.sock
connect_timeout会影响Envoy在启动Envoy时SPIRE代理未运行或者如果重启SPIRE代理时能够响应的速度。
TLS证书
要从SPIRE获取TLS证书和私钥,你可以在TLS上下文中设置SDS配置。
例如:
tls_context: common_tls_context: tls_certificate_sds_secret_configs: - name: "spiffe://example.org/backend" sds_config: api_config_source: api_type: GRPC grpc_services: envoy_grpc: cluster_name: spire_agent
TLS证书的名称是Envoy充当代理服务的SPIFFE ID。
验证上下文(Validation Context)
Envoy使用可信CA证书来验证对等证书。验证上下文提供这些可信CA证书。SPIRE可以为每个信任域提供验证上下文。
要获取信任域的验证上下文,可以在TLS上下文的SDS配置中配置验证上下文,将验证上下文的名称设置为信任域的SPIFFE ID。
例如:
tls_context: common_tls_context: validation_context_sds_secret_config: name: "spiffe://example.org" sds_config: api_config_source: api_type: GRPC grpc_services: envoy_grpc: cluster_name: spire_agent
SPIFFE和SPIRE专注于促进安全认证作为授权的构建块,而不是授权本身,因此对验证上下文中的授权相关字段(例如verify_subject_alt_name)的支持超出范围。相反,我们建议你利用Envoy广泛的 过滤器框架来执行授权 。此外,你可以将Envoy配置为将 客户端证书详细信息转发 到目标服务,从而允许它执行自己的授权步骤,例如使用嵌入在客户端X.509 SVID的URI SAN中的SPIFFE ID。
试试看!
这就是你使用SPIRE改善服务到服务通信中的身份验证安全性的方法!尝试一下,让我们知道你的试用是怎么回事!你可以通过 SPIFFE slack 与我们联系。计划进行未来的改进,你的经验对于塑造SPIRE对Envoy的支持非常有价值。
我要感谢Scytale公司自己的Marcos Yacob和Marcos Yedro,他们的努力有助于SPIRE SDS实施的原型设计和开发。
KubeCon + CloudNativeCon和Open Source Summit大会日期:
- 会议日程通告日期:2019 年 4 月 10 日
- 会议活动举办日期:2019 年 6 月 24 至 26 日
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 如何在iOS中验证(并要求)自签名证书
- Frida应用基础及APP https证书验证破解
- Apache Tomcat Native 1.2.17 发布,修复证书验证
- 技术讨论 | 四种绕过iOS SSL验证和证书固定的方法
- RHCE证书,CCNA证书
- DV SSL证书和其他证书有什么不同?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。