你的Terraform定义与你的AWS部署相符吗?

你的Terraform定义与你的AWS部署相符吗?使用SQL来了解一下

为了保证安全和合规性,使用SQL查询Terraform文件,就像查询AWS、Azure或GCP服务一样

《SQL如何统一对API的访问》一文中,我提出了将SQL作为一个共同的环境来推理来自许多不同API的数据。该方案的关键推动者是Steampipe,这是一个基于Postgres的工具,它有一套不断增长的API插件,可以将API映射到Postgres的外桌。

这些API最初是由AWS、Azure和GCP提供的。这样的API通常是通过boto3这样的包装器让开发者更容易获得。可以说,一个通用的SQL接口是这些云中无序的API生态系统的一个更好的统一者,在多云场景中,这一点是无可争议的。顺便说一下,有了Postgres的支持,你就不会局限于SQL。你可以将Python、JavaScript或其他语言与Postgres挂钩,也可以利用这些语言的通用SQL接口。

Steampipe生态系统随后扩展了许多其他服务的插件,包括GitHub、Google Workspace、IMAP、Jira、LDAP、Shodan、Slack、Stripe和Zendesk。在这些API之间进行连接是一种超级能力,这个例子最好地证明了这一点,它只用了10行非常基本的SQL就连接了带有Shodan漏洞的亚马逊EC2端点。

select
  a.instance_id,
  s.ports
  s.vulns
from
  aws_ec2_instance a
left join
  shodan_host s on a.public_ip_address = s.ip
where
  a.public_ip_address is not null;

+---------------------+----------+--------------------+
| instance_id         | ports    | vulns              |
+---------------------+----------+--------------------+
| i-0dc60dd191cb84239 | null     | null               |
| i-042a51a815773780d | [80,22]  | null               |
| i-00cf426db9b8a58b6 | [22]     | null               |
| i-0e97f373db42dfa3f | [22,111] | ["CVE-2018-15919"] |
+---------------------+----------+--------------------+

文件也是API

但什么是API,真的?它必须总是涉及到对服务端点的HTTP请求吗?更广泛地说,API也是有其他形式的数据源。网页往往还是事实上的API。多年来,我做过的网页刮削比我想的还要多,这种技能仍然很有用。

文件也是数据源:配置文件(INI、YAML、JSON)、基础设施即代码文件(TerraformCloudFormation)、数据文件(CSV)。当这些来源的插件开始加入,Steampipe变得更加强大。

首先是CSV插件,它解锁了各种有用的查询。例如,考虑到我们经常把电子表格假装成数据库。在这样做的时候,我们可以假设有参考完整性,而实际上并没有。如果你把电子表格的数据导出到CSV,你就可以用SQL来找到那些有缺陷的假设。这只是我可以想象到的使用SQL查询世界上领先的数据交换文件格式的无限方法之一。

然后是Terraform插件,它可以查询Terraform文件来询问和回答类似的问题。"哪些轨迹是不加密的?"

select
  name,
  path
from
  terraform_resource
where
  type = 'aws_cloudtrail'
  and arguments -> 'kms_key_id' is null;

使用AWS插件的aws_cloudtrail_trail表,我们可以对已部署的基础设施提出和回答同样的问题,并返回一个结果集,你可以与第一个结果集联合起来:

select
  name,
  arn as path
from
  aws_cloudtrail_trail
where
  kms_key_id is null;

理想情况下,答案总是相同的。你说应该部署的东西,使用Terraform,应该与你查询AWS API时实际部署的东西一致。当然,在现实世界中,维护和/或事件响应会导致配置漂移。鉴于有一种共同的方式来推理定义和部署的基础设施,我们可以通过编程来管理这种漂移。

皮带和吊带

对于已部署的基础设施,Steampipe长期以来提供了一套模型,将安全和合规性检查分层到API衍生的外域表中。例如,AWS合规性模块提供了基准和控制,以检查部署的基础设施是否符合11个标准和框架,包括CIS、GDPR、HIPAA、NIST 800-53和SOC 2。

随着Terraform插件的出现,有可能创建补充模块,如Terraform AWS Compliance,为定义的基础设施提供相同类型的检查。

你上个月定义的东西和你昨天部署的东西一致吗?一个令人满意的答案需要有能力以一种共同的、无摩擦的方式对定义和部署的基础设施进行推理。SQL不能消除所有的摩擦,但它是一种强大的溶剂。

猜你喜欢

转载自juejin.im/post/7127106353138499615