【问题标题】:Is there a way to discover VMs using Terraform?有没有办法使用 Terraform 发现 VM?
【发布时间】:2020-03-10 15:04:32
【问题描述】:

基础设施团队成员正在使用控制台创建、删除和修改 GCP 项目中的资源。安全团队希望扫描基础设施并检查天气采取适当的安全措施 我正在尝试创建一个 terraform 脚本,它将: 1. 以项目 ID 作为输入,列出给定项目的所有实例。 2. 循环所有实例并检查安全控制是否到位。 3. 如果缺少任何安全控制,terraform 脚本将修改资源(VM)。

我必须对项目中可用的所有资源(如子网、云存储桶、防火墙等)重复相同的步骤。

根据我对执行此类任务的初步调查,我们必须使用“terraform import”命令将资源导入 terraform,然后必须考虑循环。

现在看来,使用 GCP 的 API 最适合这项任务,因为看起来 terraform 不是此类任务的好选择,而且我不确定使用 teffarform 是否可以实现。

有人可以在这里提供路线吗?

【问题讨论】:

  • 您为什么特别想为此使用 Terraform?如果 Terraform 被用于这些资源的初始创建,并且在其他地方的状态文件中也是如此,那么将它们导入另一个状态文件将会给您带来很多问题。
  • @ydaetskcoR 技术架构师决定使用 terraform。 Terraform 不用于创建这些资源。我是 terraform 的初学者,不知道它的功能。在这里寻求专家建议。
  • 这是可行的,但这不是它的设计目的,您将花费太多时间来解决问题。我不是 GCP 人,但这种事情通常会在 AWS 中使用 AWS Config 完成。根据您想做什么,使用 GCP 的 Security Command Center 产品可能会更好。

标签: google-cloud-platform terraform infrastructure


【解决方案1】:

很好奇“控制台”是指 gcp 控制台(又名手动),因为如果您还没有使用 terraform 来创建资源(并且不打算在未来使用),那么 terraform 不是正确的工具对于你所描述的。我实际上认为它正在增加复杂性。

主要是因为:

  1. 导入功能不适用于此类用例,我们仍然发现它经常出现问题。一些资源可能是 1 次,但不是整个环境,也不是没有它成为未来的真相来源。 terraforming 之类的项目尽了最大的努力,但在复杂的环境中仍然面临着狂野的西部问题。并非所有资源都支持导入
  2. Terraform 不会告诉您任何您已经从 GCP cli 中不知道的有关 VM 的信息。如果您需要更多信息来对控件进行评估,那么您将需要使用其他工具或使用一些复杂的配置器。 Provisioner 充其量最终会成为您可能直接使用的其他工具的包装器。

老实说,我担心您的团队正试图避免将旧实践转换为 IaC 的痛苦。这令人不舒服且具有挑战性,但从长远来看,它会产生比您所描述的路径更好的结果。

题外话,如果您通过 terraform 创建了基础设施,那么我会在其他一些可以实现相同结果的实践上投入更多时间。其他一些选项是:1)通过安全性“祝福”的父模块强制执行最佳实践,2)在您的 terraform 上实施一些 CI,3)AWS 有 Config 和 Systems Manager,不确定 GCP 是否有等价物,但我会环顾四周.此外,对不同抽象层使用不同技术进行评估也是值得的。检查您的操作系统的内容可能与检查您的安全组的内容不同,这没关系。知道是成功的一半,并且可能会使第一个版本比自动修复更理智。

无论有没有 terraform,都有一个由产品和开源项目组成的生态系统,可以帮助执行合规或控制。查看inspecsentinelsalstack 等工具以获得灵感。

【讨论】: