本文档介绍了如何创建和管理制品安全防护政策。如需简要了解该服务、功能和优势,请参阅制品安全防护概览。
准备工作
在创建制品安全防护政策之前,您必须在 Security Command Center 中启用制品安全防护,并获取所需的 Identity and Access Management (IAM) 角色和权限。
然后,您可以在 Google Cloud 控制台中或使用 Google Cloud CLI 创建政策。
启用制品安全防护服务
按照配置 Security Command Center 服务中的步骤启用制品安全防护。
所需角色
如需获得使用制品安全防护所需的权限,请让管理员向您授予项目或组织的以下 Identity and Access Management (IAM) 角色:
- Artifact Scan Guard Evaluation Admin (
roles/artifactscanguard.policyEvaluator)
您可以使用 Google Cloud 控制台或运行以下 Google Cloud CLI 命令来授予此角色:
项目
gcloud organizations add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:YOUR_SERVICE_ACCOUNT_EMAIL" \
--role="roles/artifactscanguard.policyEvaluator" \
替换以下内容:
PROJECT_IDYOUR_SERVICE_ACCOUNT_EMAIL
组织
gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
--member="serviceAccount:YOUR_SERVICE_ACCOUNT_EMAIL" \
--role="roles/artifactscanguard.policyEvaluator" \
替换以下内容:
ORGANIZATION_IDYOUR_SERVICE_ACCOUNT_EMAIL
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
如需了解更多制品安全防护角色,请参阅制品安全防护角色和权限。
在 Google Cloud 控制台中创建政策
如需在 Google Cloud 控制台中创建制品安全防护政策,请按照以下步骤操作:
在 Google Cloud 控制台中,前往安全性 > 规则,然后点击创建制品安全防护政策或创建政策。
输入政策的政策 ID 和说明,然后点击继续。
选择政策范围和操作:
CI/CD 平台
- 选择连接器:此政策应关联的连接器。系统将针对与所选连接器关联的每个 CI/CD build 评估此政策。
- 政策操作:选择违反政策时要采取的操作。
- 阻止不符合政策的 build
- 允许构建但发送提醒:CI/CD 扫描器政策评估结果会显示在关联的构建流水线中。
Registry
- Container Analysis 项目:此设置仅适用于组织,而不适用于项目。添加您希望此政策应用于的 Google Cloud 项目。
- Artifact Registry 代码库:选择要应用此政策的代码库。这些必须是有效的 Artifact Registry 代码库。如果留空,则相应政策将应用于所有代码库。
- 政策操作:选择违反政策时要采取的操作。
- 仅审核:系统会评估政策,并记录任何违规行为以供审核,但不会阻止资源。如需查看任何违规情况,您必须使用
ListArtifactPoliciesEvaluations和GetArtifactPoliciesEvaluation调用 API。 - 准入控制:如果在评估政策时发生违规行为,系统会阻止资源继续运行。
- 将 Binary Authorization 政策设置为试运行模式:如需了解详情,请参阅启用试运行模式。
- Binary Authorization 项目:此设置仅适用于组织,不适用于项目。添加您要应用准入控制的 Google Cloud 项目。
- GKE 集群:如果留空,则准入控制将应用于所有 GKE 集群。
- 覆盖 Binary Authorization 政策:必须选中此复选框才能更新准入控制的 Binary Authorization 政策。
- 仅审核:系统会评估政策,并记录任何违规行为以供审核,但不会阻止资源。如需查看任何违规情况,您必须使用
运行时
- 运行时项目:此设置仅适用于组织,不适用于项目。添加包含 GKE 集群的运行时项目。
- GKE 集群:选择要应用此政策的 GKE 集群。如果留空,则政策将应用于所选项目中的所有 GKE 集群。
定义政策规则。政策规则是一组条件,用于确定您的环境中允许哪些漏洞和软件包。政策规则包含以下内容:
严重程度阈值:设置漏洞的最低严重程度,以便将其纳入政策评估。漏洞必须达到或超过此阈值才能纳入。
例如,将规则配置为中会使评估中包含所有中、高和严重漏洞。
漏洞数量阈值:设置应用其他政策过滤条件后允许的最大漏洞数量。只有当这些经过过滤的特定漏洞的数量超过限制时,才会违反政策。
例如,如果您将严重性阈值设置为高,排除修复不可用的漏洞,并将数量阈值设置为 5,那么如果 build 包含超过 5 个评级为高或严重的可修复漏洞,则该 build 会失败。
漏洞状态:指定是否仅包含有可用修复的漏洞。这样一来,您就可以通过定位所有漏洞或仅定位可修复的漏洞来优先进行修复。
例外情况和限制:您可以在这些部分中创建可覆盖常规政策的特定允许或禁止规则。
- 豁免的 CVE:指定在您的环境中被视为可接受的 CVE,并指定持续时间。这有助于实现临时变通方法。您可以为这些例外情况设置到期日期。在此日期之后,该漏洞将不再被允许,并会导致政策失败。
- 受限 CVE:指定要始终屏蔽的 CVE,无论其严重程度评级如何。这对于表示对特定应用或基础设施构成独特风险的漏洞特别有用。
- 允许的软件包:列出被视为安全的软件包。可以定义软件包版本;否则,允许所有版本。
- 受限软件包:列出要限制的软件包。受限软件包会导致政策失败。可以定义软件包版本;否则,所有版本都会受到限制。
点击创建。
规则页面上的表格中列出了可用的制品安全防护政策。
使用 Google Cloud CLI 创建政策
本部分概述了可用于制品安全防护的 gcloud CLI 命令以及如何使用这些命令。
Google Cloud CLI 前提条件
- 确保您的 gcloud CLI 版本为 559.0.0 或更高版本。
- 将您的项目设置为配置项目。
为此,请运行以下 gcloud CLI 命令:
gcloud components update --version=559.0.0
gcloud config set project PROJECT_ID
Google Cloud CLI 命令
create
gcloud alpha scc artifact-guard policies create \ (POLICY --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)) \ --policy-file-path=PATH_TO_FILE
- 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)}
- PATH_TO_FILE:包含政策定义的 YAML 文档的本地路径。如需详细了解 YAML 文件结构,请参阅本文档的 YAML 文件部分。
get
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)}
list
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 delete \ (POLICY --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)) \ [--etag=ETAG]
- 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)}
- etag:可选。用于并发控制。只有在资源的 etag 匹配时,请求才会继续。
update
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]
- 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)}
- PATH_TO_FILE:包含要更新的字段定义的 YAML 文档的本地路径。
- allow_missing:可选的布尔值。如果为
true,则在指定政策不存在时创建新政策。 - update-mask:要更新的字段的英文逗号分隔列表。空字符串或“*”表示完全更新政策。更新掩码的有效字段包括:
display_namedescriptionscopeenablement_statevulnerability_policyannotations
YAML 文件
制品安全防护政策定义的 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:
deploymentProjectIds:
- <project_id_1>
gkeClusterNames:
- <cluster_name_1>
dryRun: <bool>
overrideBinauthzPolicy: <bool>
enforcementAction: <AUDIT_ONLY or BLOCK_DEPLOYMENT>
enablementState: <The enablement state of the policy. The supported values are
ACTIVE, INACTIVE>
以下是制品安全防护政策文件示例:
displayName: 'A sample policy'
description: Vulnerability Policy
vulnerabilityPolicy:
exemptedCves:
- id: CVE-2022-40897
gracePeriodExpirationTime: '2026-09-10T18:58:08Z'
- id: CVE-2024-6345
maxAllowedSeverity: MEDIUM
maximumAllowedVulnerabilities: 5
excludeUnfixable: true
restrictedCves:
- CVE-2013-4392
- CVE-2024-4143
allowedPackages:
- name: systemd
version: '257.7'
- name: util-linux
restrictedPackages:
- name: ncurses
version: 6.5+20250216
- name: setuptools
scope:
pipeline:
connectorIds:
- organizations/123/locations/global/connectors/demoConnector
enforcementAction: BLOCK_BUILD
registry:
projectIds:
- projects/my-registry-project-id
- projects/another-registry-project
garRepositoryNamePatterns:
- us-west1-docker.pkg.dev/my-registry-project-id/my-repo
- gcr.io/team-a/internal-artifacts
imageNamePatterns:
- my-repo/service-a:.*
- my-repo/service-b:v1\..*
enforcementAction: ADMISSION_CONTROL
admissionControl:
deploymentProjectIds:
- projects/my-deployment-project
gkeClusterNames:
- //container.googleapis.com/projects/my-deployment-project/locations/us-central1/clusters/gke-cluster-a
- //container.googleapis.com/projects/my-deployment-project/locations/us-central1/clusters/gke-cluster-b
dryRun: true
overrideBinauthzPolicy: true
runtime:
deploymentProjectIds:
- projects/my-deployment-project
gkeClusterNames:
- //container.googleapis.com/projects/my-deployment-project/locations/us-central1/clusters/gke-cluster-a
- //container.googleapis.com/projects/my-deployment-project/locations/us-central1/clusters/gke-cluster-b
dryRun: false
overrideBinauthzPolicy: false
enforcementAction: BLOCK_DEPLOYMENT
enablementState: ACTIVE
性能和限制
- 每个父级资源的最大政策数:一个父级资源(组织或项目)最多可以定义 1,000 个政策。这包括制品安全防护中配置的所有类型的安全政策。
- 每个父资源的最大漏洞政策数:在总体政策限制范围内,专注于漏洞发现的政策数量也有限制。父资源(组织或项目)最多可以有 500 项以漏洞为目标的政策。
- 每个流水线的政策数量上限:对于集成了制品安全防护政策以在构建时强制执行的每个 CI/CD 流水线,最多允许 100 项政策。
- 每周每项政策的更新次数上限:对于每项政策,每周最多可以进行 100 次更新。
- 每个政策的流水线连接器数量上限:每个政策最多可以关联 100 个流水线连接器。
- 每项政策可豁免和限制的 CVE 数量上限:每项政策最多可豁免和限制 100 个 CVE。
- 每项政策允许和限制的软件包数量上限:每项政策最多可以允许和限制 100 个软件包。
如需了解其他限制,请参阅问题排查。
问题排查
本部分概述了制品安全防护政策字段以及常见错误及其解决方法。
政策验证
当您创建或更新政策时,制品安全防护会验证政策定义。如果验证失败,制品安全防护会拒绝请求并提供详细的出错提示。
一般政策字段
| 名称 | 说明 | 必需 | 限制条件 | 示例值 |
|---|---|---|---|---|
| 父级 | 定义政策的应用范围。 | 是 | 仅支持位于 global 位置的政策。 |
|
| 政策 ID | 政策的唯一标识符。 | 是 | 最多 100 个字符。必须以字母开头,以字母数字字符结尾,并且只能包含字母、数字、连字符或下划线。 | my-policy-1 |
| 显示名称 | 简单易懂的政策名称。 | 否 | 最多 63 个字符。建议保持唯一性。 | My vulnerability policy |
| 说明 | 政策的说明。 | 否 | 最多 2048 个字符。 | Checks for critical vulnerabilities. |
| 政策类型 | 所定义政策的类型。 | 是 | 仅支持 vulnerability_policy。 |
vulnerability_policy |
| 启用状态 | 政策的启用状态。 | 是 | 必须为 ACTIVE 或 INACTIVE。 |
ACTIVE |
漏洞政策
| 名称 | 说明 | 多值 | 限制条件 | 示例值 |
|---|---|---|---|---|
| maximumAllowedVulnerabilities | 在违反政策之前允许的最大漏洞数量。 | 否 | 如果设置,则必须为非负数。 | 10 |
| maxAllowedSeverity | 政策允许的漏洞的最高严重程度。 | 否 | 必须为 LOW、MEDIUM、HIGH 或 CRITICAL。 |
|
| exemptedCves | 不受此政策约束的 CVE 列表。 | 是 | 最多 100 个条目。每个 ID 都必须采用 CVE-YYYY-NNNN 格式。
如果提供了宽限期到期时间,则该时间必须是有效的时间戳。不能与 restrictedCves 重叠。 |
- id: CVE-2024-12345gracePeriodExpirationTime: 2027-01-01T00:00:00Z- id: CVE-2025-4000 |
| restrictedCves | 此政策明确禁止的 CVE 列表。 | 是 | 最多 100 个条目。每个 ID 都必须采用 CVE-YYYY-NNNN 格式。
不能与 exemptedCves 重叠。 |
- CVE-2024-54321- CVE-2025-5001 |
| allowedPackages | 允许的软件包列表,可能会替换其他规则。 | 是 | 最多 100 个条目。软件包名称不能为空。不得与 restrictedPackages 冲突。 |
- name: nginxversion: 1.0- name: pythonversion: 3.12.4 |
| restrictedPackages | 明确禁止的软件包的列表。 | 是 | 最多 100 个条目。软件包名称不能为空。不得与 allowedPackages 冲突。 |
- name: npmversion: 9.0.0 |
| excludeUnfixable | 是否排除没有可用修复的漏洞。 | 否 | 布尔值。默认值为 false。 |
true |
| exemptionDaysPostDisclosure | 自漏洞披露日期起,可豁免漏洞的天数。 | 否 | 如果设置,则必须为非负数。默认值为 0。 |
30 |
政策范围
流水线范围
| 名称 | 说明 | 必需 | 限制条件 | 示例值 |
|---|---|---|---|---|
| connectorIds | 在 CI/CD 流水线扫描期间,政策所适用的连接器 ID 列表。 | 是 | 最少 1 个条目,最多 100 个条目。您的组织或项目必须已纳入 CI/CD 扫描。每个 ID 都必须采用正确的格式,属于您的组织或项目,并且指向现有的连接器。 |
|
| enforcementAction | 违反政策时要采取的措施。 | 是 | 必须是 AUDIT_ONLY 或 BLOCK_BUILD。 |
BLOCK_BUILD |
注册表范围
| 名称 | 说明 | 必需 | 限制条件 | 示例值 |
|---|---|---|---|---|
| projectIds | 政策适用的项目 ID 列表。 | 否 | 最少 1 个条目。每个 ID 都必须是有效的 Google Cloud 项目 ID。 | projects/123, projects/456 |
| garRepositoryNamePatterns | Google Cloud Artifact Registry 代码库名称模式的列表。 | 否 | 最多 100 个条目。必须是有效的 Google Cloud Artifact Registry 仓库模式。 | us-west1-docker.pkg.dev/my-project/my-repo, gcr.io/team-a/* |
| imageNamePatterns | 完全限定映像名称的正则表达式模式。 | 否 | 最多 100 个条目。必须是有效的正则表达式。 | 'my-repo/service-a:.*', 'my-repo/service-b:v1..*' |
| enforcementAction | 违反政策时要采取的操作。 | 是 | 必须是 AUDIT_ONLY 或 ADMISSION_CONTROL。 |
ADMISSION_CONTROL |
| admissionControl | 准入控制的配置详细信息。 | 否 | 如果 enforcementAction 为 ADMISSION_CONTROL,则必须提供。 |
运行时范围
借助运行时范围,制品安全防护可以主动监控 GKE 环境中正在运行的容器映像。当政策应用于此范围时,Security Command Center 漏洞发现结果会自动通过政策元数据进行增强,以用于部署在指定项目或集群中的映像。
| 名称 | 说明 | 必需 | 限制条件 | 示例值 |
|---|---|---|---|---|
| projectIds | 部署了 GKE 集群并启用了漏洞评估的项目 ID 列表。 | 是 | 必须在组织级层选择。 | projects/my-gke-deployment-123 |
| gkeClusterNames | 需要评估政策的具体 GKE 集群。 | 否 | 可在组织或项目级层选择。 | projects/prod-env/locations/us-central1/clusters/main-cluster |
如果受监控的 GKE 集群中运行的容器映像违反了某项政策,则 ArtifactGuardPolicies 元数据会添加到 Security Command Center 漏洞发现结果消息中,如下所示:
// Added to the SCC 'message Finding'
ArtifactGuardPolicies artifact_guard_policies = X;
message ArtifactGuardPolicies {
string resource_id = 1; // e.g., //us-docker.pkg.dev/google-samples/containers/gke/security/...
repeated Policy failing_policies = 2;
}
message Policy {
enum Type {
TYPE_UNSPECIFIED = 0;
VULNERABILITY = 1;
}
Type type = 1;
string policy_id = 2; // e.g., organizations/3392779/locations/global/policies/prod-policy
string failure_reason = 3; // e.g., severity=HIGH AND max_vuln_count=2
}
违规处置措施
对于 BLOCK_BUILD 和 BLOCK_DEPLOYMENT 操作,政策评估会返回建议的强制执行操作。不过,您必须使用此建议在流水线配置中配置实际的强制执行。
政策删除
有效政策无法删除,否则会导致 FAILED_PRECONDITION 错误。如需删除政策,请先将其状态设置为 Inactive。
常见错误
下表列出了一些常见错误以及如何解决这些错误。
| 错误消息提示 | 原因 | 解决方法 |
|---|---|---|
| 必须提供父级资源 | 请求中缺少父字段。 | 请提供以下格式之一的有效父级:
|
| 需要政策定义 | 请求中缺少政策对象。 | 在请求中提供有效的政策对象。 |
| 显示名称的长度上限为... | 显示名称的长度超过了 63 个字符。 | 缩短显示名称,使其不超过 63 个字符。 |
| 说明的长度上限为... | 说明已超出 2048 个字符。 | 缩短说明,确保不超过 2048 个字符。 |
| 必须提供政策类型 | 请求中缺少政策类型(例如,vulnerabilityPolicy)。 |
向您的政策添加 vulnerabilityPolicy 或其他政策类型。 |
| 启用状态无效 | 使用了无效或已弃用的启用状态。 | 请使用 ACTIVE 或 INACTIVE。 |
| 必须指定范围 | 未定义任何范围(流水线、注册表或运行时)。 | 请为您的政策添加至少一个有效范围。 |
| CVE 名称必须采用以下格式... | exemptedCves 或 restrictedCves 中的 CVE ID 无效。 |
确保所有 CVE ID 都遵循 CVE-YYYY-NNNN 格式。 |
| CVE ... 无法豁免和限制 | exemptedCves 和 restrictedCves 中都存在相同的 CVE ID。 |
请从其中一个列表中移除相应 CVE。 |
| 软件包名称不能为空 | allowedPackages 或 restrictedPackages 中的软件包名称为空。 |
为所有软件包提供名称。 |
| 无法同时允许和限制软件包 ... | 同一软件包同时列在 allowedPackages 和 restrictedPackages 中。 |
从其中一个列表中移除相应软件包。 |
| 必须提供连接器 ID | 流水线范围中缺少“connectorIds”字段。 |
请提供至少一个连接器 ID。 |
| 连接器 ID 必须采用以下格式... | 连接器 ID 格式错误。 | 确保 ID 采用以下某种格式:
|
| 连接器 ID ... 不存在 | 指定的连接器 ID 不存在。 | 验证连接器是否存在,或者将其从列表中移除。 |
| GAR 代码库名称模式必须为... | 在注册表范围内提供了无效的仓库模式。 | 确保模式与有效的 Google Cloud Artifact Registry 代码库格式相匹配。 |
| 项目 ID 必须是有效的 GCP 项目 ID... | 在注册表或运行时范围内提供了无效的项目 ID。 | 提供有效的 Google Cloud 项目 ID。 |
| 应指定违规处置措施 | 流水线或运行时范围中缺少 enforcementAction。 |
设置强制执行操作(例如,AUDIT_ONLY,
BLOCK_BUILD [仅限流水线] 或 BLOCK_DEPLOYMENT [仅限运行时])。 |
| 每个组织的政策数量超过了上限... | 您所在组织的政策数量已达到上限 (1,000)。 | 请先删除未使用的政策,然后再创建新政策。 |
| 漏洞政策的数量 ... 超出了上限... | 您已达到漏洞政策数量上限 (500)。 | 如要创建新的漏洞政策,请先删除未使用的漏洞政策。 |
| 每个流水线的政策数量超出上限... | 连接器关联的政策超过 100 项。 | 减少与连接器关联的政策数量。 |
| 政策修订次数 ... 超出上限... | 您在 7 天内更新了 100 多次政策。 | 等待或降低更新频率。 |
常见的操作问题
除了政策内容验证失败之外,底层Google Cloud 控制平面也可能会出现问题。这些问题可能会影响 API 请求、长时间运行的操作和资源状态,通常表现为特定的错误代码或异常行为。
| 问题 | 症状 | 问题排查方法 |
|---|---|---|
| 并发修改 | UpdatePolicy 或 DeletePolicy 失败,并显示 ABORTED 错误代码和 "Provided etag is out of date" 消息。 |
问题排查:如果请求中的 etag 与政策的当前服务器版本不匹配,则会发生此错误,这表示另一个请求修改了政策。解决方法:重新读取政策以获取最新的 ETag,然后使用新的 ETag 重试请求。 |
| 请求已验证但未执行 | CreatePolicy、UpdatePolicy 或 DeletePolicy 请求成功返回,但您发现资源没有任何变化。 |
问题排查:如果请求中设置了 validate_only: true,通常会发生此错误。此标志指示服务执行所有验证,但不提交任何更改。解决方法:将 validate_only 设置为 false 或在请求中省略该字段。 |
| 更新会创建新政策 | UpdatePolicy 请求会创建政策,而不是在政策不存在时返回“未找到”错误。 |
问题排查:当 allow_missing: true 包含在 UpdatePolicyRequest 中时,这是预期行为。解决方法:如果您只想更新现有政策,请将 allow_missing 设置为 false 或省略该字段。 |
| 权限遭拒或 API 未启用 | 请求失败,并显示 PERMISSION_DENIED 或类似 "Artifact Guard API has not been used in the project before or it is
disabled." 的错误消息 |
问题排查:API 可能已停用,或者调用者可能没有足够的权限。 解决方法:在 Google Cloud 项目中,启用 Artifact Guard API ( artifactscanguard.googleapis.com)。
确认执行操作的用户或服务账号具有必要的 IAM 角色。 |
| 操作超时 | 返回长时间运行的操作 (LRO) 的请求需要很长时间才能完成,或者失败并显示 DEADLINE_EXCEEDED。 |
问题排查:这可能表示后端服务暂时变慢或出现问题。 解决:轮询 LRO 状态。如果失败或超时,请稍等片刻后重试该操作。如果问题仍然存在,请查看Google Cloud 状态信息中心,了解是否有正在发生的突发事件,或与 Google Cloud 支持团队联系。 |