本文档介绍了如何创建和管理制品安全防护政策。如需简要了解该服务,请参阅 制品安全防护概览。
准备工作
在创建制品安全防护政策之前,您必须在 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 控制台中创建制品安全防护政策,请按照以下步骤操作:
- 在 Google Cloud 控制台中,依次前往安全性 > 规则,然后点击创建制品安全防护政策或创建政策。
- 输入政策 ID 和政策说明,然后点击继续。
- 选择政策范围和操作:
- 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 集群。
- CI/CD 平台
- 定义政策规则。政策规则是一组条件,用于确定您的环境中允许哪些漏洞和软件包。政策规则包含以下内容:
- 严重程度阈值:设置漏洞的最低严重程度,以便将其纳入政策评估。
漏洞必须达到或超过此阈值才能纳入。
例如,将规则配置为中,则评估中会包含所有中、高和严重漏洞。
- 漏洞数量阈值:设置在应用其他政策过滤条件后允许的最大漏洞数量。只有当这些特定的过滤后漏洞的数量超过限制时,才会违反政策。
例如,如果您将严重性阈值设置为高,排除修复不可用的漏洞,并将数量阈值设置为 5,那么如果 build 包含超过 5 个评级为高或严重的可修复漏洞,则该 build 会失败。
- 漏洞状态:指定是否仅包含有可用修复的漏洞。这样一来,您就可以通过定位所有漏洞或仅定位可修复的漏洞来优先进行修复。
- 例外情况和限制:您可以在这些部分中创建可覆盖常规政策的特定允许或阻止规则。
- 豁免的 CVE:指定在指定时长内被视为在您的环境中可接受的 CVE。这有助于实现临时变通方法。您可以为这些例外情况设置到期日期。在此日期之后,该漏洞将不再被允许,并会导致政策失败。
- 受限 CVE:指定始终要屏蔽的 CVE,无论其严重程度评级如何。这对于表示对特定应用或基础设施构成独特风险的漏洞特别有用。
- 允许的软件包:列出被视为安全的软件包。可以定义软件包版本;否则,允许所有版本。
- 受限软件包:要限制的软件包的列表。 受限软件包会导致政策失败。可以定义软件包版本;否则,所有版本都会受到限制。
- 严重程度阈值:设置漏洞的最低严重程度,以便将其纳入政策评估。
漏洞必须达到或超过此阈值才能纳入。
- 点击创建。
规则页面上的表格中列出了可用的制品安全防护政策。
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 控制台中更新制品安全防护政策,请按以下步骤操作:
- 在 Google Cloud 控制台中,依次前往安全性 > 规则。
- 在规则表格中,点击要修改的政策的名称。
- 在政策详情页面上,点击修改或修改要更新的字段,例如范围、漏洞规则或启用状态。
- 点击保存或更新。
gcloud CLI
如需使用 gcloud CLI 查看现有政策并更新它们,请使用以下命令:
列出政策
gcloud alpha scc artifact-guard policies list PARENT
替换以下内容:
PARENT:组织或项目。父资源的有效格式包括:organizations/ORGANIZATION_ID/locations/LOCATIONprojects/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_IDprojects/PROJECT_NUMBER/locations/LOCATION/policies/POLICY_IDPOLICY_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_namedescriptionscopeenablement_statevulnerability_policyannotations
政策验证
当您创建或更新政策时,制品安全防护会验证政策定义。如果验证失败,制品安全防护会拒绝请求并提供详细的出错提示。
删除政策
控制台
如需在 Google Cloud 控制台中删除制品防护政策,请按以下步骤操作:
- 在 Google Cloud 控制台中,依次前往安全性 > 规则。
- 在规则表格中,点击要删除的政策旁边的 ,然后选择删除。
- 按照确认提示删除政策。点击取消即可中止。
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