实战基于terraform-compliance实现IaC安全

简介: 随着云计算的普及和企业对基础设施即代码(IaC)的采用增加,确保云基础设施的安全和合规性变得至关重要。Azure作为领先的云服务提供商之一,为企业提供了强大的基础设施和服务,而Terraform作为流行的IaC工具,则为云资源的自动化部署和管理提供了有效的解决方案。然而,单纯依赖Terraform配置并不足以保证部署的安全性和符合性。因此,利用符合性测试工具对IaC代码进行全面的安全审计和合规性检查显得尤为重要。

一、背景

随着云计算的普及和企业对基础设施即代码(IaC)的采用增加,确保云基础设施的安全和合规性变得至关重要。Azure作为领先的云服务提供商之一,为企业提供了强大的基础设施和服务,而Terraform作为流行的IaC工具,则为云资源的自动化部署和管理提供了有效的解决方案。


然而,单纯依赖Terraform配置并不足以保证部署的安全性和符合性。因此,利用符合性测试工具对IaC代码进行全面的安全审计和合规性检查显得尤为重要。


terraform-compliance 是一个基于 BDD(行为驱动开发)的开源工具,专门用于执行基础设施即代码的合规性测试。它允许开发团队编写简单易懂的测试场景,来验证Terraform配置是否符合特定的安全和合规性标准。


结合Azure的资源管理和Terraform的强大能力,使用 terraform-compliance 可以有效地确保在云环境中部署的资源配置符合公司政策、安全最佳实践以及法规要求。通过这种方法,企业能够更加自信地管理其云基础设施,减少潜在的安全风险和合规问题。

二、合规性检查

符合性测试是一种非功能性测试技术,用于确定系统是否符合规定的标准。 合规性测试也称为一致性测试。


大多数软件团队会进行分析来检查标准是否得到恰当地采用和实施。 通常,这些团队共同协作来提升标准,这转而又会促进质量的提升。


执行符合性测试时,需要考虑两个主要概念:符合性测试和符合性检查。

  • 符合性测试可确保每个开发生命周期阶段的结果符合商定的要求。
  • 在项目开始时,应将符合性检查集成到开发周期中。 如果要求本身未得到充分记录,那么尝试在稍后的阶段添加符合性检查会变得愈发困难。


执行符合性检查非常简单。 我们针对开发生命周期的每个阶段制定和记录了一套标准和流程。 每个阶段的结果都与记录的要求进行比较。 测试结果是指不符合预定标准的任何“差距”。 通过检查过程完成符合性测试,评审过程的结果应记录下来。


我们来看一个具体的示例:


一个常见的问题是,当多名开发人员应用不兼容的更改时,环境会崩溃。 假设有个人进行更改并应用了资源,例如在测试环境中创建虚拟机 (VM)。 之后,另一个人应用了不同版本的代码来预配该 VM 的另一版本。 需要在这里进行监督,确保符合设定规则。


要解决此问题,一种方法是定义标记资源的策略,例如使用 role 和 creator 标记。 定义策略后,Terraform-compliance 之类的工具被采用来确保遵循策略。


Terraform-compliance 侧重于负面测试。 负面测试是确保系统可正常处理意外输入或不需要的行为的过程。 模糊处理就是一种负面测试。 通过模糊处理,接收输入的系统会经过测试,以确保它可安全地处理意外的输入。


幸运的是,Terraform 是任何创建、更新或销毁云基础结构实体的 API 的抽象层。 Terraform 还确保本地配置和远程 API 响应处于同步状态。由于 Terraform 主要用于云 API,因此我们仍然需要一种方法来确保针对基础结构部署的代码遵循特定的策略。 Terraform-compliance 是一种免费的开源工具,它为 Terraform 配置提供了此功能。


使用 VM 示例时,符合性策略可能如下所示:“如果要创建 Azure 资源,则它必须包含标记”。


Terraform-compliance 工具提供了一个测试框架,你可在该框架中创建与示例类似的策略。 然后,你可针对 Terraform 执行计划运行这些策略。


通过 Terraform-compliance 可应用 BDD(即行为驱动开发)原则。 BDD 是一个协作过程;在此过程中,所有利益干系人相互协作,共同定义系统应执行的操作。


这些利益干系人通常包括开发人员、测试人员,以及对正在开发的系统有既得利益或将受其影响的任何人。 BDD 的目标是鼓励团队创建具体的示例,来表达对系统行为的共识。

三、安装

pip install terraform-compliance

四、检查符合性测试示例

在本文前面的部分,你了解了为测试环境创建 VM 的符合性测试示例。 本部分介绍如何将该示例转换为 BDD 功能和方案。


首先使用 Cucumber(这是一种用于支持 BDD 的工具)来表示规则:

when creating Azure resources, every new resource should have a tag

上一规则转换如下:

If the resource supports tags
Then it must contain a tag
And its value must not be null

然后,Terraform HCL 代码遵循以下规则:

resource "random_uuid" "uuid" {}
resource "azurerm_resource_group" "rg" {
  name     = "rg-hello-tf-${random_uuid.uuid.result}"
  location = var.location
  tags = {
    environment = "dev"
    application = "Azure Compliance"
  } 
}

第一个策略可编写作为 BDD 功能方案,如下所示:

Feature: Test tagging compliance  # /target/src/features/tagging.feature
    Scenario: Ensure all resources have tags
        If the resource supports tags
        Then it must contain a tag
        And its value must not be null

以下代码显示了针对特定标记的测试:

Scenario Outline: Ensure that specific tags are defined
    If the resource supports tags
    Then it must contain a tag <tags>
    And its value must match the "<value>" regex
    Examples:
      | tags        | value              |
      | Creator     | .+                 |
      | Application | .+                 |
      | Role        | .+                 |
      | Environment | ^(prod\|uat\|dev)$ |

五、运行符合性测试示例

前期

terraform init
terraform validate
terraform plan -out main.tfplan
#若要将执行计划转换为符合性步骤的 JSON,请运行 terraform show。
terraform show -json main.tfplan > main.tfplan.json
# 下载合规规则
https://github.com/terraform-compliance/user-friendly-features.git
# 运行
terraform-compliance -p main.tfplan.json -f ./user-friendly-features

检验结果,根据提升修改tf代码后,再次运行检测。

terraform show -json main.tfplan > main.tfplan.json
# 运行
terraform-compliance -f features -p main.tfplan.json

六、Github Action集成

jobs:
    terraform:
        name: terraform CI
        runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: hashicorp/setup-terraform@v1
      - name: terraform plan
        id: plan
        run: |
          terraform init && terraform plan -out=plan.out && terraform show -json plan.out > plan.out.json
      
      - name: terraform-compliance
        uses: terraform-compliance/github_action@main
        with:
          plan: plan.out.json
          features: ssh://git@github.com/terraform-compliance/user-friendly-features.git


相关文章
|
7月前
|
Kubernetes Devops 数据中心
Terraform 系列 - 什么是 IaC?
Terraform 系列 - 什么是 IaC?
|
7月前
|
运维 数据中心 数据安全/隐私保护
【Terraform实现云服务基础设施既代码(IaC)案例实战-3】:Terraform+Docker+Portainer+Gitlab+GitlabRunner搭建Tree项目
前言树苗科技公司业务上云2年有余,随着技术的不断发展。运维团队支持业务变更配置、开资源、删资源等过程加班到深夜一两点已是家常便饭。为了进一步提升工作效率,运维总监张三决定对当前业务交付路径进行统一梳理,借助IaC的理念和Terraform自动化工具逐步实施运维生产自动化,改善组内成员频繁加班且重复劳...
349 0
【Terraform实现云服务基础设施既代码(IaC)案例实战-3】:Terraform+Docker+Portainer+Gitlab+GitlabRunner搭建Tree项目
|
7月前
|
弹性计算 运维 负载均衡
【Terraform实现云服务基础设施既代码(IaC)案例实战-2】:通过Terraform实施基础IaC
前言树苗科技公司业务上云2年有余,随着技术的不断发展。运维团队支持业务变更配置、开资源、删资源等过程加班到深夜一两点已是家常便饭。为了进一步提升工作效率,运维总监张三决定对当前业务交付路径进行统一梳理,借助IaC的理念和Terraform自动化工具逐步实施运维生产自动化,改善组内成员频繁加班的现状。...
282 0
【Terraform实现云服务基础设施既代码(IaC)案例实战-2】:通过Terraform实施基础IaC
|
存储 运维 安全
App Deploy as Code! SAE & Terraform 实现 IaC 式部署应用
SAE 和 Terraform 的结合,能够帮助企业像处理代码一样管理自己的应用,对资源的操作都变得可审计,可追溯,可回滚,同时也降低人为操作带来的风险。
App Deploy as Code! SAE & Terraform 实现 IaC 式部署应用
|
存储 运维 安全
App Deploy as Code! SAE & Terraform 实现 IaC 式部署应用
本文将简单的介绍 IaC 和 SAE 给企业带来的巨大便利,并通过一个使用 Terraform 创建 SAE 应用的例子感受 SAE & Terraform 给传统企业 IT 设施管理带来的降维打击
App Deploy as Code! SAE & Terraform 实现 IaC 式部署应用
|
7月前
|
运维 安全 数据中心
【Terraform实现云服务基础设施既代码(IaC)案例实战-1】:树苗科技公司的自动化转型之旅
背景树苗科技公司业务上云2年有余,随着技术的不断发展。运维团队支持业务变更配置、开资源、删资源等过程加班到深夜一两点已是家常便饭。为了进一步提升工作效率,运维总监张三决定对当前业务交付路径进行统一梳理,借助IaC的理念和Terraform自动化工具逐步实施运维生产自动化,改善组内成员频繁加班的现状。...
135 0
|
3月前
|
弹性计算 持续交付 API
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
文章介绍了如何利用ROS和Terraform模板轻松自动化部署基于GLM架构、优化中文对话的ChatGLM-6B模型至阿里云,提高了部署效率与便捷性,适用于多种应用场景,且模型部署过程详细,彰显了基础设施即代码(IaC)的优势。
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
|
3月前
|
弹性计算 人工智能 持续交付
基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
文章介绍了如何利用ROS和Terraform模板轻松自动化部署阿里云的Qwen-7B-Chat大语言模型服务,提高了部署效率与便捷性,是实现云资源和服务快速上线的最佳实践。
基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
|
6月前
|
弹性计算 API 持续交付
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
基于 IaC 的理念,通过定义一个模板,使用 ROS 提供的 Terraform 托管服务进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
|
7月前
|
弹性计算 持续交付 数据中心
一键云部署:ROS的Terraform托管服务助你轻松上线2048经典游戏
阿里云的资源编排服务ROS提供了Terraform托管能力,用户可以直接在ROS控制台上部署Terraform脚本,本文将详细介绍如何使用ROS的Terraform托管服务一键部署经典的2048小游戏到云端,让全世界的玩家都能在线体验。