免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

使用 HashiCorp Sentinel 创建并执行“策略即代码”

  • 2017-11-26
  • 本文字数:2019 字

    阅读完需:约 7 分钟

HashiCorp 发布了 Sentinel ,一种集成在 HashiCorp Enterprise 产品中的嵌入式“策略即代码”(Policy as Code)框架。Sentinel 支持“基于逻辑的细粒度策略决策”,实现了审计的自动化,并在与架构即代码和其它 HashiCorp 平台工具一并工作时,,实现在如有必要时执行企业策略、合规策略或安全策略。

HashiCorp 当前提供了架构自动化工具产品套装,使用了广为采用的开源项目 Terraform Vault Consul Nomad ,分别支持工程师实现架构的策略规定、安全、连接并运行。根据“HashiCorp 之道”( Tao of HashiCorp )介绍,工具基于“架构即代码(IaC,Infrastructure as Code)”构建。IaC 支持大规模地开展基础设施管理的编纂和自动化。但是在大型组织中,这种大规模创建、更改和注销基础架构的能力是有风险的,因为缺乏经验的工程师或自动化的配置错误可引发影响业务运营的重大错误。

一些现代基础设施平台和工具提供了不同程度的访问控制,一些云服务提供商也提供了身份和访问管理(IAM,Identity and Access Management) 类型的策略及访问列表(ACL,Access Control List )控制。据 HashiCorp Sentinel 官方网页介绍,这些 ACL 系统“解决了一个直接且必要的问题,就是广泛存在的系统锁定问题”。对于更高级的软件策略决策,Sentinel 从中脱颖而出,它实现的是一种可重用的系统。

很多现有的策略或 ACL 系统并非可实用的“策略即代码”。一些策略是通过点击 GUI 设置的,不易于重做和版本管理。通常它们并不提供任何测试策略的系统,而是去测试可能破坏策略的行为。这使得自动化测试难以实现。而策略语言本身也是因产品而异的。

Sentinel 将策略的组织和监管编码为文本配置,实现了限制风险,可确保对基础设施的变更是安全的。Sentinel 在 Terraform Enterprise、Vault Enterprise、Consul Enterprise 和 Nomad Enterprise 中引入了“策略即代码”。当前,Sentinel 并不支持上述工具的开源版本。Sentinel 是在实时运行的系统中实现“防护栏”、业务需求和合法合规等。这就是说,Sentinel 并非一种“亡羊补牢”型的审计工具。

Sentinel 支持:

  • 策略即代码:Sentinel 将策略看成是应用,可用于版本控制、代码审核、测试和自动化等。策略的语法和行为易于被 Sentinel 验证,并且可以使用 Sentinel 提供的命令行接口(CLI)实现自动化测试。如果辅以版本控制系统,可以支持拉取(Pull)请求工作流,以验证策略是否保持了合并(Merge)前的预期系统行为。
  • 基于条件的细粒度策略:Sentinel 的策略支持拒绝任何可用输入上的行为,而非粗粒度的读取、吸入和管理策略。任何使用公开 Sentinel SDK 的开发人员,都可以编写插件访问来自于定制系统的外部信息。通过将策略逻辑表示为代码,可以直接在代码中表示策略相关的信息和逻辑,并可以加入评论信息,避免了依赖于口口相传去了解策略制定原因的传统方式。
  • 多重执法等级(Enforcement Levels):包括建议性(Advisory), 软强制(soft-mandatory)和硬强制(hard-mandatory)等级,支持策略编写者对侵犯行为赋予适当的严重性,给出警告,甚至拒绝。所有的活动可被日志记录和审计。
  • 兼容多云。确保架构更改符合业务的范围,也符合各个基础设施提供商的合规策略。

Sentinel 定义并使用自己的策略语言。该语言在设计上考虑了非编程人员的理解,其中提供了多个用例,使得非开发人员也可以成为策略制定者。要了解更多的信息,可访问策略编写章节和Sentinel语言参考

命令 sentinel apply实现在本地执行一个用于开发的策略,其用法为sentinel apply [选项] POLICY。命令执行由 POLICY 指定的路径中的策略文件。输出显示了策略是否通过,或是失败。配置文件可使用-config选项指定,其中定义了可用的导入插件、模拟数据和全局值,用于模拟嵌入到应用中的策略。可用的命令行选项如下:

  • -config=path:指定配置文件的目录。配置文件中定义了可用的导入插件、模拟数据和全局值等。模拟数据可定义任何用于内建 Sentinel Simulator 测试的复杂场景。
  • -global key=value:设置注入运行中策略的全局值。
  • -explain:设置为总是显示执行追踪的情况。追踪将会显示执行过程中间的布尔表达式值,总是会显示失败的策略。

下面是 Terraform Sentinel 策略文件的一个例子,策略定义为不允许在未提供标签的情况下设置资源:

复制代码
import "tfplan"
main = rule {
all tfplan.resources as r {
r.attr contains "tags" and length(r.attr.tags) > 0
}
}

对于那些在工作中无需使用 HashiCorp 工具的工程师,如果他们热衷于此类“策略即代码”方法,可以尝试如下工具:对 AWS 资源做 RSpec 测试的 awspec Azure Resource Manager 模板 Google Deployment Manager 最佳实践等。他们也可以尝试使用 AWS Config Azure Advisor 等工具,实施合规性与安全的事后审计和报告。

关于 HashiCorp Sentinel 的更多信息,可参见 HashiCorp 网站,也可查看 Sentinel 公告的博客文章。

查看英文原文: Creating and Enforcing “Policy as Code” with HashiCorp Sentinel

2017-11-26 18:001169
用户头像

发布了 390 篇内容, 共 118.1 次阅读, 收获喜欢 252 次。

关注

评论

发布
暂无评论
发现更多内容

接口测试--apipost变量使用(一)

测试人生路

话说 synchronized

木子的昼夜

Java

在敏捷项目管理情境下,如何做多项目管理?

PingCode

敏捷 敏捷开发 研发管理 研发效能 研发工具

开源分享 | 火遍全网的「蚂蚁呀嘿」教程来了!

百度开发者中心

paddle 开源 #飞桨#

高效搜索信息,你需要掌握这些谷歌搜索技巧

LeanCloud

开发者 大前端 工作效率

【黑科技】爬虫也可以一键获取 [加载更多] 数据,无编码学爬虫之三。

梦想橡皮擦

Python 28天写作 3月日更

LeetCode题解:188. 买卖股票的最佳时机 IV,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

最新热点:钉钉公布低代码开发者画像,这些数据意味着什么?

优秀

滴普FastData系列-自动化数据集成服务DCT可编程调度容器设计

容器 数据传输 数据集成

力扣(LeetCode)刷题,简单+中等题(第30期)

不脱发的程序猿

面试 程序人生 算法 LeetCode 28天写作

severless架构演进思考杂谈

鲍师傅的铜锣烧

Serverless 架构

Java程序员福音!蚂蚁+字节+腾讯+龙湖地产+美团+滴滴+猿辅导1000+面试题总结

Java架构追梦

Java 架构 面试 金三银四

RocketMQ安装部署

云淡风轻

RocketMQ

谷歌android!通宵都要看完这个Android关键技术点,威力加强版

欢喜学安卓

android 程序员 面试 移动开发

谷歌开发安卓系统!Android面试你必须要知道的那些知识,全网疯传

欢喜学安卓

android 程序员 面试 移动开发

总结:近几年有哪些不错的scrum工具

PingCode

Scrum 敏捷 敏捷开发 研发管理 研发工具

直流电源防反接电路设计

不脱发的程序猿

嵌入式 28天写作 硬件设计 直流电源 防反接电路设计

Pgbouncer最佳实践:系列二

PostgreSQLChina

数据库 postgresql 开源 软件 开源社区

如果软件测试行业没门槛了,你开心么?

程序员阿沐

软件测试 自动化测试 测试开发 测试工程师 黑盒测试

微服务框架相关技术整理

架构 微服务

互联网公司的「敏捷开发」流程是怎么样的?典型的敏捷团队是什么样?

PingCode

敏捷 敏捷开发 研发管理 研发效能 研发工具

产品训练营--第五期作业

曦语

产品训练营

产品经理训练营 Week7 作业

Mai

【LeetCode】二维区域和检索 - 矩阵不可变Java题解

Albert

算法 LeetCode 28天写作

作为产品经理,如何分析和管理你的产品需求?

PingCode

敏捷开发 研发管理 需求管理 需求 研发工具

与 Hadoop 对比,我是如何看待 Spark 技术?

TASKCTL

大数据 hadoop spark 存储

十亿级流量的搜索前端,是怎么做架构升级的?

百度Geek说

大前端 架构设计

最新整理:Google/网易/腾讯/百度/华为面经(25个专题 1W字答案解析)

比伯

Java 编程 程序员 架构 面试

哪些应用场景在使用语音连麦

anyRTC开发者

音视频 WebRTC RTC 语音社交

SQL Server 多表数据增量获取和发布 2.2

happlyfox

数据库 学习 28天写作 3月日更

nginx 惊群处理及原子锁技术

赖猫

nginx 高并发 服务器开发 C++后台开发

使用HashiCorp Sentinel创建并执行“策略即代码”_云计算_Daniel Bryant_InfoQ精选文章