将 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。

创建服务账号

创建可用于 Analyze Code Security 的服务账号 操作。

  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 身份提供方配置工作负载身份联合。如需了解相关说明,请参阅工作负载身份联合

  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. 添加 Authenticate to 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_criteriaCritical:1,High:1,Operator:OR。默认值为 Critical:1,High:1,Medium:1,Low:1,Operator:OR,这表示如果 IaC 验证扫描遇到任何问题,该操作必须失败。

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

查看 IaC 违规报告

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

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

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

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

后续步骤