本文档介绍了如何创建和管理制品安全防护政策。如需简要了解该服务,请参阅 制品安全防护概览。
准备工作
在创建制品安全防护政策之前,您必须在 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:
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
问题排查
本部分概述了制品安全防护政策字段以及常见错误及其解决方案。
一般政策字段
| 名称 | 说明 | 必需 | 限制条件 | 示例值 |
|---|---|---|---|---|
| 父级 | 定义政策的应用范围。 | 是 | 仅支持 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 漏洞发现结果消息中,如下所示:
// 添加到 SCC“发现结果” ArtifactGuardPolicies artifact_guard_policies = X;
message ArtifactGuardPolicies { string resource_id = 1; // 例如,//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; // 例如,organizations/3392779/locations/global/policies/prod-policy string failure_reason = 3; // 例如,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(仅限运行时)。 |
| 每个组织的政策数量超过了上限… | 您所在组织的政策数量已达到上限 (1000)。 | 请先删除未使用的政策,然后再创建新政策。 |
| 漏洞政策的数量 … 超出了上限… | 您已达到漏洞政策数量上限 (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 支持团队联系。 |