配置制品安全防护政策

本文档介绍了如何创建和管理制品安全防护政策。如需简要了解该服务,请参阅 制品安全防护概览

准备工作

在创建制品安全防护政策之前,您必须在 Security Command Center 中启用制品安全防护,并获取所需的 Identity and Access Management (IAM) 角色

此外,请熟悉制品安全防护服务限制

如果您计划使用 gcloud CLI 管理政策或 CI/CD 连接器,请查看 gcloud CLI 前提条件

启用制品安全防护服务

按照配置 Security Command Center 服务中的步骤启用制品安全防护。

所需角色

如需获得使用制品防护所需的权限,请让管理员向您授予项目或组织的以下 Identity and Access Management (IAM) 角色:

  • Artifact Scan Guard Evaluation Admin (roles/artifactscanguard.policyEvaluator)

您可以使用 Google Cloud 控制台或运行以下 gcloud CLI 命令来授予此角色:

项目

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/artifactscanguard.policyEvaluator"

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • SERVICE_ACCOUNT_EMAIL:您的服务账号的电子邮件地址。

组织

  gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/artifactscanguard.policyEvaluator"

替换以下内容:

  • ORGANIZATION_ID:您的组织 ID。
  • SERVICE_ACCOUNT_EMAIL:您的服务账号的电子邮件地址。

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

如需了解更多制品安全防护角色,请参阅制品安全防护角色和权限

gcloud CLI 前提条件

如需使用 gcloud CLI 管理政策或 CI/CD 连接器,请确保您的环境满足以下要求:

  • 您的 gcloud CLI 版本为 559.0.0 或更高版本。
  • 您的项目已设置为配置项目。

如需更新 gcloud CLI 并设置项目,请运行以下命令:

gcloud components update --version=559.0.0
gcloud config set project PROJECT_ID

PROJECT_ID 替换为您的项目 ID。

创建政策

控制台

如需在 Google Cloud 控制台中创建制品安全防护政策,请按照以下步骤操作:

  1. 在 Google Cloud 控制台中,依次前往安全性 > 规则,然后点击创建制品安全防护政策创建政策
  2. 输入政策 ID 和政策说明,然后点击继续
  3. 选择政策范围和操作:
    • CI/CD 平台
      • 选择连接器:选择要与此政策关联的连接器。扫描器会针对与所选连接器关联的每个 CI/CD build 评估此政策。
      • 政策操作:选择违反政策时要采取的操作。
        • 阻止不符合政策的 build:如果政策失败,则 build 会被阻止。
        • 允许构建但发送提醒:关联的 build 流水线会显示 CI/CD 扫描器政策评估结果。
    • 注册表
      • Container Analysis 项目:此设置仅适用于组织,不适用于项目。添加要应用此政策的 Google Cloud 项目。
      • Artifact Registry 制品库:选择要应用此政策的制品库。这些必须是有效的 Artifact Registry 仓库。如果留空,制品安全防护会向所有代码库应用相应政策。
      • 政策操作:选择违反政策时要采取的操作。
        • 仅审核:制品安全防护会评估政策并记录任何违规情况以供审核,但不会阻止资源。
        • 准入控制:如果在政策评估期间发生违规行为,准入控制会阻止部署资源。
          • 将 Binary Authorization 政策设置为试运行模式:如需详细了解试运行模式,请参阅启用试运行模式
          • Binary Authorization 项目:此设置仅适用于组织,不适用于项目。添加要应用准入控制的 Google Cloud 项目。
          • GKE 集群:如果留空,准入控制将应用于所有 GKE 集群。
          • 覆盖 Binary Authorization 政策:选中此复选框可更新准入控制的 Binary Authorization 政策。
    • 运行时
      • 运行时项目:此设置仅适用于组织,不适用于项目。添加包含 GKE 集群的运行时项目。
      • GKE 集群:选择要应用此政策的 GKE 集群。如果留空,制品安全防护会将政策应用于所选项目中的所有 GKE 集群。
  4. 定义政策规则。政策规则是一组条件,用于确定您的环境中允许哪些漏洞和软件包。政策规则包含以下内容:
    • 严重程度阈值:设置漏洞的最低严重程度,以便将其纳入政策评估。 漏洞必须达到或超过此阈值才能纳入。

      例如,将规则配置为,则评估中会包含所有严重漏洞。

    • 漏洞数量阈值:设置在应用其他政策过滤条件后允许的最大漏洞数量。只有当这些特定的过滤后漏洞的数量超过限制时,才会违反政策。

      例如,如果您将严重性阈值设置为,排除修复不可用的漏洞,并将数量阈值设置为 5,那么如果 build 包含超过 5 个评级为严重的可修复漏洞,则该 build 会失败。

    • 漏洞状态:指定是否仅包含有可用修复的漏洞。这样一来,您就可以通过定位所有漏洞或仅定位可修复的漏洞来优先进行修复。
    • 例外情况和限制:您可以在这些部分中创建可覆盖常规政策的特定允许或阻止规则。
      • 豁免的 CVE:指定在指定时长内被视为在您的环境中可接受的 CVE。这有助于实现临时变通方法。您可以为这些例外情况设置到期日期。在此日期之后,该漏洞将不再被允许,并会导致政策失败。
      • 受限 CVE:指定始终要屏蔽的 CVE,无论其严重程度评级如何。这对于表示对特定应用或基础设施构成独特风险的漏洞特别有用。
      • 允许的软件包:列出被视为安全的软件包。可以定义软件包版本;否则,允许所有版本。
      • 受限软件包:要限制的软件包的列表。 受限软件包会导致政策失败。可以定义软件包版本;否则,所有版本都会受到限制。
  5. 点击创建

规则页面上的表格中列出了可用的制品安全防护政策。

gcloud CLI

如需使用 gcloud CLI 创建政策,请运行以下命令:

gcloud alpha scc artifact-guard policies create \
    (POLICY_ID --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)) \
    --policy-file-path=PATH_TO_FILE

替换以下内容:

  • POLICY_ID:政策的标识符(例如 my-policy)。
  • LOCATION:存储数据的 Security Command Center 位置。仅支持 global
  • ORGANIZATION_ID:组织 ID。
  • PROJECT_NUMBER:数字项目编号。
  • PATH_TO_FILE:包含政策定义的 YAML 文档的本地路径。如需详细了解 YAML 文件结构,请参阅本文档的 YAML 文件部分

更新政策

控制台

如需在 Google Cloud 控制台中更新制品安全防护政策,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,依次前往安全性 > 规则
  2. 在规则表格中,点击要修改的政策的名称。
  3. 在政策详情页面上,点击修改或修改要更新的字段,例如范围、漏洞规则或启用状态。
  4. 点击保存更新

gcloud CLI

如需使用 gcloud CLI 查看现有政策并更新它们,请使用以下命令:

列出政策

gcloud alpha scc artifact-guard policies list PARENT

替换以下内容:

PARENT:组织或项目。父资源的有效格式包括:
  • organizations/ORGANIZATION_ID/locations/LOCATION
  • projects/PROJECT_NUMBER/locations/LOCATION

描述政策

gcloud alpha scc artifact-guard policies describe \
    (POLICY --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER))

替换以下内容:

POLICY:政策的完整标识符,采用以下格式之一:
  • organizations/ORGANIZATION_ID/locations/LOCATION/policies/POLICY_ID
  • projects/PROJECT_NUMBER/locations/LOCATION/policies/POLICY_ID
  • POLICY_ID --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)

更新政策

gcloud alpha scc artifact-guard policies update \
    (POLICY --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)) \
    --policy-file-path=PATH_TO_FILE [--allow-missing] \
    [--update-mask=UPDATE_MASK]

--allow_missing 是一个可选标志。如果包含此标志,则在指定政策不存在时创建新政策。

替换以下内容:

UPDATE-MASK:要更新的字段的英文逗号分隔列表。空字符串或 * 表示完整政策更新。更新掩码的有效字段包括:
  • display_name
  • description
  • scope
  • enablement_state
  • vulnerability_policy
  • annotations

政策验证

当您创建或更新政策时,制品安全防护会验证政策定义。如果验证失败,制品安全防护会拒绝请求并提供详细的出错提示。

删除政策

控制台

如需在 Google Cloud 控制台中删除制品防护政策,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,依次前往安全性 > 规则
  2. 在规则表格中,点击要删除的政策旁边的 ,然后选择删除
  3. 按照确认提示删除政策。点击取消即可中止。

gcloud CLI

如需使用 gcloud CLI 删除政策,请运行以下命令:

gcloud alpha scc artifact-guard policies delete \
    (POLICY --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)) \
    [--etag=ETAG]

替换以下内容:

ETAG:用于并发控制的可选实体标记。如果您提供值,则只有当资源的 etag 与该值匹配时,请求才会继续。

YAML 文件

使用 gcloud CLI 创建或管理制品安全防护政策时,YAML 文件必须遵循以下模板:

  displayName: <Human-readable display name for the policy>
  description: <Description of the policy>

  vulnerabilityPolicy: # (at least one of these rules must be defined)
    exemptedCves:
      - id: <cve-id-1>
        gracePeriodExpirationTime: <optional-grace-period-expiration-time>
      - id: <cve-id-2>
        gracePeriodExpirationTime: <optional-grace-period-expiration-time>

    maxAllowedSeverity: <The maximum severity allowed in the detected
    vulnerabilities. The severity values can be LOW, MEDIUM, HIGH, CRITICAL>

    maximumAllowedVulnerabilities: <The maximum number of vulnerabilities that
    can be detected>

    excludeUnfixable: <Whether to exclude the vulnerabilities without an
    available fix from the purview of the policy evaluation>

    restrictedCves:
      - <restricted-cve-id-1>
      - <restricted-cve-id-2>

    allowedPackages:
      - name: <allowed_package_name_1>
        version: <optional_version_of_allowed_package_1. If unspecified, all the
        versions of the package are allowed>
      - name: <allowed_package_name_2>
        version: <optional_version_of_allowed_package_2>

    restrictedPackages:
      - name: <restricted_package_name_1>
        version: <optional_version_of_restricted_package_1. If unspecified, all
        the versions of the package are restricted>
      - name: <restricted_package_name_2>
        version: <optional_version_of_restricted_package_2>

  scope:
    pipeline:
      connectorIds:
        - <connector_id_1>
        - <connector_id_2>
      enforcementAction: <action to take in case the policy evaluation fails.
      The supported values are AUDIT_ONLY or BLOCK_BUILD>

    registry:
      projectIds:
        - <project_id_1>
      garRepositoryNamePatterns:
        - <repository_name_pattern_1>
      imageNamePatterns:
        - <image_name_pattern_1>
      enforcementAction: <AUDIT_ONLY or ADMISSION_CONTROL>
      admissionControl:
        deploymentProjectIds:
          - <project_id_1>
        gkeClusterNames:
          - <cluster_name_1>
        dryRun: <bool>
        overrideBinauthzPolicy: <bool>

    runtime