将 IaC 验证与 GitHub Actions 集成

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

有关 IaC 验证的详细信息,请参阅根据 Google Cloud 组织的 政策

准备工作

完成以下任务,开始使用 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 替换为您的 工作负载身份联合 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 代码中的所有违规问题,然后再应用代码。

后续步骤