Original URL: https://aws.amazon.com/blogs/opensource/realize-policy-as-code-with-aws-cloud-development-kit-through-open-policy-agent/
AWS Cloud Development Kit(AWS CDK)是一个开源软件框架,允许使用熟悉的编程语言来定义和配置 AWS 上的基础设施。“基础设施即代码”通过使用 CDK 对基础设施进行版本控制,能够更有效且可靠地管理 AWS 上的基础设施。
当然,在计划部署新的 AWS 资源或更新时,我们必须确保这些更改没有引入安全漏洞,势必要建立安全合规基准,辅以流程遵循合规性要求。现在,是时候来设置和定义相应的安全基准,以确保 AWS 上基础设施的更改不会引起安全问题。开放策略代理(OPA)是一个云原生基金会的孵化项目,旨在针对云上基础设施的安全基准策略自动进行检查。OPA 提供了统一的框架和语言,用于声明、实施和控制云上基础设施中各个部件的安全基准策略。
将 OPA 与 AWS CDK 集成在一起之后,可获得“策略即代码”的能力,即在 AWS CDK 对 AWS 环境进行更改之前,对这些更改进行合规策略的检查。这种新方法带来很多好处,具体包括:
各个团队成员可以轻松在实际更改之前进行策略检查。
通过与CI / CD集成,可以自动执行策略检查。
用户可以对“基础设施即代码”实施强制性检查。
用户可以根据行业最佳实践框架(例如CIS AWS Benchmark)中的安全合规要求,编写自定义的OPA策略。
总而言之,这将极大地缩短基础设施安全合规的事后检查周期。
这篇文章的其余部分将逐步介绍如何将 OPA 与 AWS CDK 结合使用,以实现“策略即代码”。这将涉及以下的任务:
创建一个AWS CDK项目以部署AWS资源。
根据REGO策略语言编写简单的OPA策略。
利用OPA策略来检查AWS CDK的基础设施代码。
先决条件
1.1 在 AWS Cloud9 中创建 EC2 环境
按照说明创建一个 Amazon Linux Cloud9 EC2环境(自建 EC2 实例亦 OK)。
1.2 确保已安装 AWS CDK
1.3 安装 OPA
入门
2.1 创建一个 AWS CDK 项目
AWS CDK 项目将创建一个AWS CloudFormation堆栈,其中包括:一个Amazon Elastic Compute Cloud(Amazon EC2)实例,一个AWS Identity and Access Management(IAM)角色,一个附加到 EC2 的安全组。
2.2 使用 Python 语言的 CDK Demo 应用模板
2.3 安装 virtualenv
2.4 进入 virtualenv
2.5 安装所有必需的软件包
2.6 编辑 AWS CDK 项目创建资源
2.7 创建 AWS CloudFormation 模板
这将生成cdk.out/cdk-demo.template.json
。如果我们现在运动cdk deploy
,将启动 CloudFormation 堆栈,并创建所有声明的资源。但是,在更改发生之前,我们需要使用 OPA 进行策略检查,以确保更改没有违反安全合规基准。
2.8 使用 Rego 编写 OPA 策略
本示例中将从三个策略检查 AWS CloudFormation 模板:
禁止创建超过10个的EC2实例
禁止在EC2实例上启用SSH
禁止创建IAM角色
2.9 OPA 策略检查
针对 AWS CloudFormation 模板运行 OPA 策略:
该命令的输出显示,CloudFormation 模板通过了 EC2 实例数量的策略检查,但违反了禁止创建 IAM 角色和禁止在 EC2 实例上启用 SSH 的两个策略。
模板未通过所有策略检查,无法部署此模版。OPA 的策略检查确保了,只有符合安全合规要求的基础设施更改才能投入生产。
清理
从 AWS 控制台删除 Cloud9 EC2 环境。
总结
上面的示例是一个 Hello World 的演示,展示了一种新的方式,即使用 OPA 策略,检查 AWS CDK 发生的基础设施更改是否符合既定的安全合规基准。该示例也可以应用于其他场景,例如确保所有资源在创建之前都具有标签,确保遵循资源的命名规范,满足安全性或运维合规要求等等。
尽早了解应用或基础设施部署是否违反策略,这点很管用。因为策略检查是基础设施生命周期中的一个环节,且须确保无法创建和部署不合规的资源。
OPA 可以和应用,同时作为守护程序运行,并可基于 HTTP 的 JSON 提供 RESTful API。对于用 Go 语言编写的应用,甚至可将 OPA 直接嵌入用作语言库。此外,将 OPA 与 AWS CDK 结合使用,可高度扩展“基础设施即代码”,也为基础设施策略检查,提供了端到端自动化的服务功能。
这篇博客文章提供了一个示例场景,当然可以在组织中广泛应用:安全性、成本和可用性的许多其他策略。也可以定制访问控制要求,为容器化工作负载施加约束,并可将 OPA 与 AWS CDK 结合使用,以构建策略驱动的基础设施,强制执行策略检查,为更好地管理云资源提供防护和信心。
现在,您距离 DevSecOps 更加近了一步。我们甚至可以将 OPA 与 AWS CDK,AWS CloudFormation 或 Terraform 所支撑的“基础设施即代码”流水线集成在一起,并利用 OPA 的检查结果,自动使部署失败或通过。显然,借助这些工具的功能,极大地扩充了 DevSecOps 的实践空间。正应了一句话:凡事皆有可能!
作者介绍:
作者
Xuejiao Zhang is a DevOps Consultant at Amazon Web Services. Prior to joining Amazon. Xuejiao worked for a number of e-commerce companies like JD.COM, Rakuten. You can find her on Github.
译者
黄帅
亚马逊 AWS 专业服务团队云架构咨询顾问。负责企业级客户的云架构设计和优化、DevOps 组织咨询和技术实施。在软件研发领域有多年架构设计和运维、团队管理经验,对 DevOps、云原生微服务治理框架、容器化平台运维、混沌工程实践等有深入的研究和热情。
本文转载自亚马逊 AWS 官方博客。
原文链接:
评论