将 IaC 验证与 GitHub Actions 集成

您可以使用“分析代码安全性”操作来验证 GitHub Actions 工作流中的基础架构即代码 (IaC)。通过验证 IaC,您可以确定 Terraform 资源定义是否违反了应用于 Google Cloud 资源的现有组织政策和 Security Health Analytics 检测器。

如需详细了解 IaC 验证,请参阅根据 Google Cloud 组织的政策验证 IaC

准备工作

请完成以下任务,开始使用 GitHub Actions 进行 IaC 验证。

激活 Security Command Center 高级层级或企业版

确认已在组织级层激活 Security Command Center 高级层级或企业层级

激活 Security Command Center 会启用 securityposture.googleapis.comsecuritycentermanagement.googleapis.com API。

创建服务账号

创建一个可用于“分析代码安全性”操作的服务账号。

  1. In the Google Cloud console, go to the Create service account page.

    Go to Create service account
  2. Select your project.
  3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

    In the Service account description field, enter a description. For example, Service account for quickstart.

  4. Click Create and continue.
  5. Grant the Security Posture Shift-Left Validator role to the service account.

    To grant the role, find the Select a role list, then select Security Posture Shift-Left Validator.

  6. Click Continue.
  7. Click Done to finish creating the service account.

如需详细了解 IaC 验证权限,请参阅适用于组织级激活的 IAM

设置身份验证

  1. 使用 GitHub 身份提供方配置 Workload Identity Federation。如需了解相关说明,请参阅工作负载身份联合

  2. 获取您的工作负载身份联合 ID 令牌的网址。例如 https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID

    请考虑以下事项:

    • PROJECT_NUMBER 是您在其中设置了工作负载身份联合的 Google Cloud 项目的编号。
    • POOL_ID 是池名称。
    • PROVIDER_ID 是您的身份提供方的名称。
  3. “向 Google Cloud 进行身份验证”操作添加到您的工作流中,以对 IaC 验证操作进行身份验证。

定义您的政策

定义组织政策Security Health Analytics 检测器。如需使用安全状况定义这些政策,请完成创建和部署安全状况中的任务。

创建 Terraform 方案 JSON 文件

  1. 创建 Terraform 代码。如需了解相关说明,请参阅创建 Terraform 代码

  2. 在 GitHub Actions 中,初始化 Terraform。例如,如果您使用的是 HashiCorp - 设置 Terraform 操作,请运行以下命令:

    - name: Terraform Init
      id: init
      run: terraform init
    
  3. 创建 Terraform 方案文件:

    - name: Create Terraform Plan
      id: plan
      run: terraform plan -out=TF_PLAN_FILE
    

    TF_PLAN_FILE 替换为 Terraform 方案文件的名称。例如 myplan.tfplan

  4. 将方案文件转换为 JSON 格式:

    - name: Convert Terraform Plan to JSON
      id: convert
      run: terraform show -no-color -json TF_PLAN_FILE > TF_PLAN_JSON_FILE
    

    TF_PLAN_JSON_FILE 替换为 Terraform 方案文件的名称(采用 JSON 格式)。例如 mytfplan.json

将操作添加到 GitHub Actions 工作流

  1. 在 GitHub 代码库中,浏览到您的工作流。
  2. 打开工作流编辑器。
  3. 在 GitHub Marketplace 边栏中,搜索 Analyze Code Security
  4. 安装部分,复制相应语法。
  5. 将该语法作为新步骤粘贴到工作流中。
  6. 替换以下值:

    • workload_identity_provider 与指向您的 Workload Identity Federation ID 令牌网址的链接。
    • service_account 替换为您为相应操作创建的服务账号的电子邮件地址。
    • organization_id 替换为您的 Google Cloud 组织 ID。
    • scan_file_ref 为 Terraform 方案文件的路径,采用 JSON 格式。
    • failure_criteria,其中包含用于确定操作何时失败的失败阈值条件。阈值条件取决于 IaC 验证扫描遇到的严重、高、中和低严重级别问题的数量。failure_criteria 用于指定允许出现的每种严重程度的问题数量,以及如何汇总问题(ANDOR)。例如,如果您希望在操作遇到一个严重问题一个高严重程度问题时失败,请将 failure_criteria 设置为 Critical:1,High:1,Operator:OR。默认值为 Critical:1,High:1,Medium:1,Low:1,Operator:OR,这意味着如果 IaC 验证扫描遇到任何问题,相应操作都必须失败。

现在,您可以运行工作流来验证 Terraform 计划文件。如需手动运行工作流,请参阅手动运行工作流

查看 IaC 违规报告

  1. 在 GitHub 代码库中,点击操作,然后选择您的工作流。

  2. 点击工作流的最近一次运行作业。

    工件部分,您可以找到以 ZIP 文件格式提供的违规报告 (ias-scan-sarif.json)。该报告包含以下字段:

    • rules 字段,用于描述 Terraform 方案违反了哪些政策。每条规则都包含一个 ruleID,您可以将其与报告中包含的结果进行匹配。
    • results 字段,用于描述违反特定规则的建议资源修改。
  3. 请先解决 Terraform 代码中的所有违规问题,然后再应用这些代码。

后续步骤