试着使用Snyk检查基础设施的弱点

想做的事情

我要发布一篇关于使用Snyk使代码更安全的文章!这篇文章是关于2023年的Snyk冒险日历。

我将使用 Snyk 来检查将 IaC 转化的基础架构的漏洞。

我重新整理了过去发布的文章,以便于制作“圣诞日历”。
可能内容稍微偏向于Terraform Cloud,还请谅解…

环境

    • Windows11 Pro

WSL2 (Ubuntu22.04)

Terraform

version 1.5.5

terraform (创地)

首先,我们将进行Terraform Cloud的配置。

创建 Terraform Cloud 账户

从以下页面创建一个账户。

 

获取用于登录的令牌

你想继续吗?在终端上运行 “terraform login” 命令会显示 “Do you want to proceed?”,请回答 “yes” 并继续执行。

在终端上显示URL(https://app.terraform.io/app/settings/tokens?source=terraform-login),所以请使用浏览器访问。
(也可以通过TFCB主页上的用户图标,点击后进入用户设置→令牌来访问)

当显示出”生成用户令牌”的窗口时,设置描述和到期时间,然后点击”生成令牌”,会显示出令牌,记住它(注意:以后无法再确认)。

在终端中返回,并在要求”Token for app.terraform.io:”的部分输入,应该可以成功登录!

工作区,项目创建

使用HCL进行创建。

在终端中,创建一个名为tfcb-test的目录,并在其中创建一个名为provider.tf的文件,内容如下所示。由于默认情况下组织名称是用户名,所以需指定它。

terraform {
  cloud {
    organization = "{YOUR_ORGANIZATION_NAME}"

    workspaces {
      name = "{YOUR_WORKSPACE_NAME}"
    }
  }
}

当执行 terraform init 命令后,会创建一个指定名称的 Workspace。

暂时完成了 Terraform Cloud 的初始设置!

先试着供给合适的资源。

在创建provider.tf的目录中创建一个名为main.tf的文件,内容如下:
(本次我们将使用Terraform来创建Azure资源)

# リソースグループの作成
resource "azurerm_resource_group" "example" {
  name     = "example"
  location = "West Europe"
}

请参考以下链接获取更多信息: https://registry.terraform.io/providers/hashicorp/azurerm/3.50.0/docs/resources/resource_group

为了创建 Azure 资源,需要按以下方式更改 provider.tf。

terraform {
  cloud {
    organization = "{YOUR_ORGANIZATION_NAME}"

    workspaces {
      name = "{YOUR_WORKSPACE_NAME}"
    }
  }

  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "3.50.0"
    }
  }
}

provider "azurerm" {
  features {}
}

在进行更改后,尝试在终端上运行 terraform apply。资源的创建应该会顺利完成,没有任何问题。
然后,可以在 Terraform Cloud 的“项目和工作空间”→{YOUR_WORKSPACE_NAME}→状态中查看创建的 tfstate 文件。

如果创建资源失败,请确认Azure AD中自己的账户是否具有创建资源组的权限!

创建Terraform Cloud使用的服务主体。

暫時可以創建資源,但考慮到需要使用個人的 AAD 帳戶,對於 CI/CD 等來說並不理想。因此需要創建一個 TFCB 服務主體並配置以使用該主體。

服务负责人应在Azure门户上创建。
在Azure Active Directory中,点击App registrations,然后点击New registration,根据指示进行创建。
由于本次使用Terraform创建资源组,请先给目标订阅授予Contributor权限。创建后会生成凭据,请妥善保管(因为无法后续确认,请注意)。

在TFCB的Project&Workspace → {YOUR_WORKSPACE_NAME} → Variables中将认证信息注册为环境变量。由于已经在自己的用户帐户上进行了身份验证,因此需要将每个键的值更改为服务主体的值。

スクリーンショット 2023-06-30 142515.png

保存設定后,将main.tf中的内容更改如下,并尝试再次从终端执行terraform apply。

# リソースグループの作成
resource "azurerm_resource_group" "example" {
  name     = "tfcbtest"
  location = "West Europe"
}

如果资源组的名称被改成 example -> tfcbtest,那就没问题!

Snyk 可能是一个选项。

从这里开始,进行Synk的设置。

尝试使用安全功能

以下是 Terraform Cloud 的基本使用方法。现在我们尝试使用免费计划可用的安全功能。

这一次,我想尝试使用能够发现漏洞的平台 Snyk。

 

创建 Snyk 账户

请从以下页面创建。

 

与 Terraform Cloud 进行集成

请参考以下页面,并进行相关设置,将其与Workspace相关联。

 

設定完成後,創建一個故意讓Synk指出問題的資源。將main.tf 修改如下所示。

# リソースグループの作成
resource "azurerm_resource_group" "example" {
  name     = "tfcbtest"
  location = "West Europe"
}

# ストレージアカウントの作成
resource "azurerm_storage_account" "example" {
  name                     = "example"
  resource_group_name      = resource.azurerm_resource_group.example.name
  location                 = resource.azurerm_resource_group.example.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

变更完成后,尝试运行”terraform apply”命令来执行。在终端上应该会显示如下的Snyk警告信息(****为敏感字)。访问Details的URL可以查看存在的漏洞是什么。

│ Snyk ⸺   Failed (Advisory)
│ Found:
1 medium severity issue(s).
1 low severity issue(s).
Severity threshold is set to low.
│ Details: https://app.snyk.io/org/****/project/3ce66379-0f2e-48ba-adef-3ddd054efad8/history/e9a7f517-0524-44dc-9c36-d14c0066082b

现在应该指出,在main.tf中添加的存储帐户资源中,复制设置为LRS,并且禁用了对可信任的Azure服务的访问!

因为它可以发现其他的漏洞,所以可以在基础设施建设之前发现这些错误!

那么, 总结一下

我使用Snyk和Terraform Cloud搭建了一个基础设施漏洞检测机制。虽然Terraform Cloud的内容较多,但结合起来可以构建一个机制,在terraform apply时自动检查基础架构的漏洞。由于可以从GitHub等触发这个机制,我认为开发体验也会得到改善。
实际上,我原计划写一篇关于编写某种应用程序代码并使用Snyk进行漏洞检查的文章,但是没有时间,所以只好将其掩饰为重新编辑过去的文章…哈哈
我打算以后再写一篇关于这方面的文章!

就是这样。

广告
将在 10 秒后关闭
bannerAds