在 Security Command Center 中忽略发现结果

本页面介绍了如何通过忽略发现结果来减少您在 Security Command Center 中收到的发现结果数量。

忽略发现结果会将其隐藏在发现结果的默认视图中,具体如下: Google Cloud 控制台。您可以手动或以编程方式忽略发现结果,并创建过滤条件以根据您指定的条件自动忽略现有和未来的发现结果。

Security Command Center 检测服务提供针对 但您可能会发现某些发现结果 与您的组织或项目相关。大量的发现结果还可能导致安全分析师难以有效识别和消除最关键的风险。忽略发现结果可以节省您的时间 审核或响应隔离资产的安全发现结果 也不在可接受的业务参数之内

与忽略发现结果相比, 停用检测器

  • 您可以创建自定义过滤条件,以微调忽略哪些发现结果。
  • 您可以使用忽略规则暂时或无限期忽略发现结果。
  • 忽略发现结果不会停止扫描底层资源。发现结果仍会生成,但在您决定查看它们之前会保持隐藏状态。

权限

如需忽略发现结果,您需要组织文件夹项目级别的以下某个 Identity and Access Management (IAM) 角色:

  • 查看忽略规则:
    • Security Center Admin Viewer (roles/securitycenter.adminViewer)
    • Security Center Settings Viewer (roles/securitycenter.settingsViewer)
    • Security Center Mute Configurations Viewer (roles/securitycenter.muteConfigsViewer)
  • 查看、创建、更新和删除忽略规则:
    • Security Center Admin (roles/securitycenter.admin)
    • Security Center Admin Editor (roles/securitycenter.adminEditor)
    • Security Center Settings Editor (roles/securitycenter.settingsEditor)
    • Security Center Mute Configurations Editor (roles/securitycenter.muteConfigsEditor)
  • 手动忽略发现结果:
    • Security Center Findings Editor (roles/securitycenter.findingsEditor)

您还可以创建并授予具有以下部分或全部权限的自定义角色

  • 忽略规则读取权限
    • securitycenter.muteconfigs.get
    • securitycenter.muteconfigs.list
  • 忽略规则写入权限
    • securitycenter.muteconfigs.create
    • securitycenter.muteconfigs.update
    • securitycenter.muteconfigs.delete
  • 发现结果写入权限
    • securitycenter.findings.setMute
    • securitycenter.findings.bulkMuteUpdate

您忽略发现结果的能力遵循在组织、文件夹或项目级层授予的角色。您可以忽略特定文件夹或项目中的发现结果,并限制其他人员根据他们获得的访问权限忽略发现结果的能力。例如,如果您有权访问单个项目,则只能忽略该项目中的发现结果。如果您有权访问某一文件夹,则可以忽略该文件夹内任何子文件夹或项目中的发现结果。

如需详细了解 Security Command Center 角色,请参阅 访问权限控制

创建和管理忽略规则

忽略规则是 Security Command Center 配置,它们使用您创建的过滤条件,根据您指定的条件自动忽略未来和现有的发现结果。您可以使用静态动态忽略规则创建过滤器。

静态忽略规则会无限期地忽略未来的发现结果。动态静音 规则会暂时忽略未来和现有发现结果,直到指定的日期为止 或无限期,直到发现结果不再与配置匹配为止。

忽略规则类型

Security Command Center 支持静态和动态忽略规则配置。虽然您可以同时使用静态和动态静音规则,但我们不建议这样做。静态忽略规则在应用于同一应用时会覆盖动态忽略规则 查找。因此,动态忽略规则将无法按预期运行,这可能会在管理发现结果时造成混淆。因此,我们建议您仅使用一种静音规则类型。

除非您已在使用静态忽略规则,否则我们建议您使用动态静音 因为它们更加灵活

下表概要比较了这两种静音规则类型。 有关详情,请参阅静态忽略规则动态 忽略规则

静态忽略规则 动态忽略规则
无限期根据发现结果采取行动。 可以对 临时查找具有到期时间,或者无限期查找 未设置有效期。
不会应用于现有发现。 适用于现有和新发现。
优先于动态忽略规则。 是 当 类型适用于发现结果。

静态忽略规则

  • 静态忽略规则会无限期有效。当发现结果与您的静态静音匹配时 配置,Security Command Center 会自动设置 mute 属性 将发现结果更改为 MUTED,直到您手动进行更改。
  • 静态忽略规则对现有发现结果没有影响。这些规则仅适用于在定义规则后新创建或更新的发现。如果您 还想忽略类似的现有发现结果,请使用相同的过滤条件批量 忽略发现结果
  • 静态忽略规则优先于动态忽略规则。因此,所有新的 即使发现结果与定义的静态忽略规则匹配, 也符合定义的动态忽略规则

动态忽略规则

  • 动态忽略规则可以暂时针对具有过期日期的发现结果执行操作 时间或无限期(如果未设置到期时间)。现有或新的 创建的发现结果与您的动态忽略配置 Security Command Center 自动将发现结果的 mute 属性设置为 MUTED,直到 或直到发现结果或 配置本身当动态忽略规则到期后,Security Command Center 从发现结果中移除该规则。如果发现结果与任何其他动态忽略规则都不匹配,mute 属性会自动重置为 UNDEFINED
  • 动态忽略规则会自动应用于与您的搜索条件相匹配的现有发现结果 配置,以及新创建或更新的发现结果。
  • 动态忽略规则的优先级较低,会被静态忽略规则替换 两种类型的规则都适用于发现结果。

我们建议您仅使用动态忽略规则。能够临时 将发现结果设为“忽略”和“自动取消忽略”,使动态忽略规则更加灵活 选项比静态忽略规则选项更高。

如果您使用静态忽略规则来减少需要手动审核的发现结果数量,并且想要迁移到动态忽略规则,请参阅从静态忽略规则迁移到动态忽略规则

忽略规则的范围

在创建过滤器时,请考虑忽略规则的范围。

例如,如果编写了一个过滤条件来忽略 Project A 中的发现结果,但 过滤条件本身是在 Project B 下创建的,则该过滤条件可能不匹配 任何发现结果。

同样,如果数据驻留 启用时,忽略规则的范围 仅限于忽略规则所在的 Security Command Center 位置 创建。例如,如果您在美国 (us) 位置创建了忽略规则,则该忽略规则不会忽略存储在欧盟 (eu) 或全球 (global) 位置的发现结果。如需详细了解数据驻留和忽略规则,请参阅 忽略规则、持续导出和数据驻留

如需详细了解如何创建过滤条件,请参阅过滤通知

忽略规则限制

忽略规则并不支持所有发现结果属性。有关 忽略规则不支持,请参阅 忽略规则的发现结果属性不受支持

您可以根据 IAM 角色的范围创建、查看、更新和删除忽略规则。使用组织级层角色,您可以查看组织中所有文件夹和项目的忽略规则。如果您拥有文件夹级层角色,则可以访问和管理特定文件夹以及这些文件夹中所有子文件夹和项目的忽略规则。项目级层角色可让您管理特定项目中的忽略规则。

Security Command Center Premium 支持在组织、文件夹和项目级层授予角色。Security Command Center Standard 仅支持在组织级层授予角色。如需了解详情,请参阅访问权限控制

数据驻留和忽略规则

如果数据驻留处于启用状态,用于定义静音规则的配置(muteConfig 资源)将受数据驻留控制措施的约束,并存储在您选择的 Security Command Center 位置中。

如需将忽略规则应用于 Security Command Center 位置中的发现结果,您必须在要应用忽略规则的发现结果所在的位置创建该规则。

由于忽略规则中使用的过滤条件 可以包含受驻留控制措施、 请务必先指定正确的位置,然后再创建它们。 Security Command Center 不会限制您在哪个位置创建静音规则或流式导出。

忽略规则仅存储在创建规则的位置, 可在其他位置查看或修改。

创建静音规则后,您无法更改其位置。如需更改位置,您需要删除忽略规则,然后在新位置重新创建该规则。

如需在 Google Cloud 控制台中查看静音规则,您首先需要将 Google Cloud 控制台视图设置为规则的创建位置。

这些规则同样适用于忽略规则 MuteConfig 的 API 表示法。

如需使用 API 调用检索 MuteConfig,请执行以下操作: 您需要在实例的完整资源名称中指定位置 MuteConfig。例如:

GET https://securitycenter.googleapis.com/v2/{name=organizations/123/locations/eu/muteConfigs/my-mute-rule-01}

同样,如需使用 gcloud CLI 检索 muteConfig,您可以使用 --locations 标志指定位置。例如:

gcloud scc muteconfigs list --organizations=123
--location=us

创建忽略规则

您的组织最多可以创建 1,000 条忽略规则。

您可以使用 Google Cloud 控制台、 gcloud CLI 或 Security Command Center API。我们建议您在忽略规则配置中仅使用动态忽略规则,因为它们比静态忽略规则更灵活。对于 忽略规则类型的比较,请参阅忽略规则类型

如需查看创建忽略规则的示例代码,请参阅 创建忽略规则

如需创建忽略规则,请点击要采用的流程对应的标签页:

控制台

  1. 在 Google Cloud 控制台中,前往 Security Command Center 的发现结果页面。

    转至“发现结果”

  2. 如有必要,请选择您的 Google Cloud 项目或组织。

  3. 可选:如果为 Security Command Center 启用了数据驻留,请根据需要更改数据位置。

    如需更改数据位置,请点击操作栏中的位置选择器。

    系统会显示位置列表。选择新位置。

  4. 点击忽略选项,然后选择管理忽略规则

  5. 点击创建忽略规则,然后选择动态忽略规则静态忽略规则。如需详细了解忽略规则类型,请参阅忽略规则类型

  6. 输入忽略规则 ID。必须提供此值。

  7. 输入忽略规则说明,其提供为何忽略发现结果的上下文。该值是可选的,但我们建议您使用。

    父级资源表示将创建和应用忽略规则的范围。

  8. 如果您要创建无到期期限的静态忽略规则或动态忽略规则,请继续执行下一步。如果您创建的是动态静音 规则来暂时忽略发现结果,请完成以下步骤:

    1. 选中暂时忽略匹配的发现结果复选框。
    2. 选择或输入动态静音规则的失效日期。这个 值表示规则将忽略匹配发现结果的时长。
  9. 发现结果查询字段中,通过点击添加过滤条件来构建查询语句。或者,您也可以输入查询 语句。

    您可以通过 Select filter 对话框选择支持的发现结果 属性和值。

    1. 选择发现结果特性或在搜索发现结果特性框中输入其名称。 系统会显示可用子特性的列表。
    2. 选择子特性。一个选择字段,显示您可以构建查询语句的位置 一个查询运算符,以及该子属性的一个或多个值。
    3. 从面板中选择运算符以及子属性的一个或多个值。 如需详细了解查询运算符及其使用的函数,请参阅“添加过滤条件”菜单中的查询运算符
    4. 点击应用

      对话框将会关闭,并且您的查询即会更新。

    5. 重复这些步骤,直到发现结果查询包含所需的所有特性。
  10. 查看过滤条件,以确保准确性。如需进行更改,请根据需要删除或添加属性和过滤条件值。

  11. 点击预览匹配的发现结果

    表会显示与您的查询匹配的发现结果。

  12. 点击保存

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需创建忽略规则,请运行 gcloud scc muteconfigs create 命令:

    gcloud scc muteconfigs create CONFIG_ID \
    --PARENT=PARENT_ID \
    --location=LOCATION
    --description="RULE_DESCRIPTION" \
    --filter="FILTER" \
    --type=MUTE_TYPE \
    --expiry-time=TIMESTAMP
    

    替换以下内容:

    • CONFIG_ID:忽略规则的名称。ID 必须使用字母数字字符和连字符,长度介于 1 到 63 个字符之间。
    • PARENT:资源层次结构中的范围 organizationfolderproject 等忽略规则的应用。
    • PARENT_ID:上级组织的 ID。 文件夹或项目,并以 organizations/123folders/456projects/789
    • LOCATION:如果数据驻留处于启用状态,则为创建静音规则的 Security Command Center 位置;如果数据驻留处于停用状态,则使用值 global
    • RULE_DESCRIPTION:静音的说明 不能超过 1,024 个字符。
    • FILTER:您定义要过滤的表达式 结果。例如,如需忽略 OPEN_FIREWALL 发现结果,您的过滤条件可以是 FILTER="category=\"OPEN_FIREWALL\""
    • MUTE_TYPE:您要创建的忽略规则的类型。有效的静音规则类型为 DYNAMICSTATIC。默认情况下,忽略规则类型设置为STATIC。 忽略规则创建后,您将无法更改其类型。
    • TIMESTAMP:仅适用于您要创建 动态忽略规则。指明动态 忽略规则到期。该值必须设置为 否则该请求将被拒绝。如需了解时间格式,请参阅 gcloud topic datetimes。使用动态静音 规则到期后,系统会将该规则从所有匹配的发现结果中移除。如果您希望动态忽略规则对匹配的发现结果无限期执行操作,请省略此字段。

    响应中包含忽略规则 ID,您可以使用该 ID 查看、更新和删除忽略规则,如管理忽略规则中所述。

Go

以下示例使用 v1 API。修改 v2 的示例,将 v1 替换为 v2,并添加 将 /locations/LOCATION 设置为资源名称。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请在资源名称的 /sources/SOURCE_ID 后面添加 /locations/LOCATION,其中 SOURCE_ID 是发出发现结果的 Security Command Center 服务的 ID。


import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
)

// createMuteRule: Creates a mute configuration under a given scope that will mute
// all new findings that match a given filter.
// Existing findings will not be muted.
func createMuteRule(w io.Writer, parent string, muteConfigId string) error {
	// parent: Use any one of the following options:
	//             - organizations/{organization_id}
	//             - folders/{folder_id}
	//             - projects/{project_id}
	// parent := fmt.Sprintf("projects/%s", "your-google-cloud-project-id")
	// muteConfigId: Set a random id; max of 63 chars.
	// muteConfigId := "random-mute-id-" + uuid.New().String()
	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer client.Close()

	muteConfig := &securitycenterpb.MuteConfig{
		Description: "Mute low-medium IAM grants excluding 'compute' ",
		// Set mute rule(s).
		// To construct mute rules and for supported properties, see:
		// https://cloud.google.com/security-command-center/docs/how-to-mute-findings#create_mute_rules
		Filter: "severity=\"LOW\" OR severity=\"MEDIUM\" AND " +
			"category=\"Persistence: IAM Anomalous Grant\" AND " +
			"-resource.type:\"compute\"",
	}

	req := &securitycenterpb.CreateMuteConfigRequest{
		Parent:       parent,
		MuteConfigId: muteConfigId,
		MuteConfig:   muteConfig,
	}

	response, err := client.CreateMuteConfig(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to create mute rule: %w", err)
	}
	fmt.Fprintf(w, "Mute rule created successfully: %s", response.Name)
	return nil
}

Java

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。


import com.google.cloud.securitycenter.v1.CreateMuteConfigRequest;
import com.google.cloud.securitycenter.v1.MuteConfig;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;
import java.util.UUID;

public class CreateMuteRule {

  public static void main(String[] args) {
    // TODO: Replace the variables within {}

    // parentPath: Use any one of the following options:
    //             - organizations/{organization_id}
    //             - folders/{folder_id}
    //             - projects/{project_id}
    String parentPath = String.format("projects/%s", "your-google-cloud-project-id");

    // muteConfigId: Set a random id; max of 63 chars.
    String muteConfigId = "random-mute-id-" + UUID.randomUUID();
    createMuteRule(parentPath, muteConfigId);
  }

  // Creates a mute configuration under a given scope that will mute
  // all new findings that match a given filter.
  // Existing findings will not be muted.
  public static void createMuteRule(String parentPath, String muteConfigId) {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      MuteConfig muteConfig =
          MuteConfig.newBuilder()
              .setDescription("Mute low-medium IAM grants excluding 'compute' ")
              // Set mute rule(s).
              // To construct mute rules and for supported properties, see:
              // https://cloud.google.com/security-command-center/docs/how-to-mute-findings#create_mute_rules
              .setFilter(
                  "severity=\"LOW\" OR severity=\"MEDIUM\" AND "
                      + "category=\"Persistence: IAM Anomalous Grant\" AND "
                      + "-resource.type:\"compute\"")
              .build();

      CreateMuteConfigRequest request =
          CreateMuteConfigRequest.newBuilder()
              .setParent(parentPath)
              .setMuteConfigId(muteConfigId)
              .setMuteConfig(muteConfig)
              .build();

      // ExecutionException is thrown if the below call fails.
      MuteConfig response = client.createMuteConfig(request);
      System.out.println("Mute rule created successfully: " + response.getName());
    } catch (IOException e) {
      System.out.println("Mute rule creation failed! \n Exception: " + e);
    }
  }
}

Python

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。



def create_mute_rule(parent_path: str, mute_config_id: str) -> None:
    """
    Creates a mute configuration under a given scope that will mute
    all new findings that match a given filter.
    Existing findings will NOT BE muted.
    Args:
        parent_path: use any one of the following options:
                     - organizations/{organization_id}
                     - folders/{folder_id}
                     - projects/{project_id}
        mute_config_id: Set a unique id; max of 63 chars.
    """

    from google.cloud import securitycenter

    client = securitycenter.SecurityCenterClient()

    mute_config = securitycenter.MuteConfig()
    mute_config.description = "Mute low-medium IAM grants excluding 'compute' "
    # Set mute rule(s).
    # To construct mute rules and for supported properties, see:
    # https://cloud.google.com/security-command-center/docs/how-to-mute-findings#create_mute_rules
    mute_config.filter = (
        'severity="LOW" OR severity="MEDIUM" AND '
        'category="Persistence: IAM Anomalous Grant" AND '
        '-resource.type:"compute"'
    )

    request = securitycenter.CreateMuteConfigRequest()
    request.parent = parent_path
    request.mute_config_id = mute_config_id
    request.mute_config = mute_config

    mute_config = client.create_mute_config(request=request)
    print(f"Mute rule created successfully: {mute_config.name}")

REST API

在 Security Command Center API 中,使用 muteConfigs create 方法创建静音规则。请求正文是 MuteConfig 的实例。

除非已启用数据驻留,否则您可以使用 Security Command Center API 的 v1 或 v2 版本。API v2 以预览版的形式提供。启用数据驻留后,API v2 是唯一可用的 API。

如果您使用的是 Security Command Center API v1,请使用版本 1 端点调用 muteConfigs create。在请求正文中,使用版本 1 MuteConfig 定义:

POST https://securitycenter.googleapis.com/v1/PARENT/PARENT_ID/muteConfigs?muteConfigId=MUTE_CONFIG_ID -d

  {
    "description": "RULE_DESCRIPTION",
    "filter": "FILTER",
    "type": "MUTE_TYPE",
    "expiryTime": "TIMESTAMP"
  }

如果您使用的是 Security Command Center API v2,请使用版本 2 端点调用 muteConfigs create。在请求正文中,使用版本 2 MuteConfig 定义:

POST https://securitycenter.googleapis.com/v2/PARENT/PARENT_ID/locations/LOCATION/muteConfigs?muteConfigId=MUTE_CONFIG_ID -d

  {
    "description": "RULE_DESCRIPTION",
    "filter": "FILTER",
    "type": "MUTE_TYPE",
    "expiryTime": "TIMESTAMP"
  }

替换以下内容:

  • PARENT:忽略规则的父级资源(organizationsfoldersprojects
  • PARENT_ID:上级组织的 ID。 文件夹或项目
  • LOCATION:如果数据驻留处于启用状态,则为创建静音规则的 Security Command Center 位置;如果数据驻留处于停用状态,则使用值 global
  • MUTE_CONFIG_ID:忽略规则的名称 (长度介于 1 到 63 个字符之间)
  • RULE_DESCRIPTION:忽略规则的说明(最多 1,024 个字符)
  • FILTER:您定义来过滤发现结果的表达式

    例如,如需忽略 OPEN_FIREWALL 发现结果,您的过滤条件可以是 "category=\"OPEN_FIREWALL\""

  • MUTE_TYPE:您要创建的忽略规则的类型。有效的忽略规则类型包括 DYNAMICSTATIC。您无法在创建静音规则后更改其类型。

  • TIMESTAMP:仅适用于您创建动态忽略规则的情况。日期/时间字符串,表示动态静音规则的到期时间。此值必须设置为至少 1 天后的日期,否则请求将被拒绝。对于 有关时间格式的信息,请参阅 gcloud topic datetimes。使用动态静音 规则到期后,系统会将该规则从所有匹配的发现结果中移除。如果您希望 动态忽略规则,以无限期地对匹配的发现结果采取行动,请忽略此项 字段。

响应包括忽略配置 ID,您可以使用该 ID 查看、更新和删除忽略规则,如管理忽略规则中所述。

与过滤条件完全匹配的新发现结果会被隐藏,发现结果的 mute 特性设置为 MUTED

忽略规则不支持的发现结果属性

忽略规则未必支持过滤条件中的所有发现结果属性。忽略规则过滤条件不支持以下属性。

  • createTime
  • eventTime
  • mute
  • mute_initiator
  • mute_update_time
  • name
  • parent
  • security_marks
  • source_properties
  • state

列出忽略规则

您可以通过以下方式列出组织、文件夹或项目中的忽略规则: 使用 Google Cloud 控制台 gcloud CLI 或 Security Command Center API。

您是否能够列出给定范围的忽略规则,取决于 您向 IAM 授予的权限 角色。

如果为 Security Command Center 启用数据驻留, list 命令也仅限于 Security Command Center 位置

如需查看列出忽略规则的示例代码,请参阅 列出忽略规则

要列出某个组织、文件夹或 请点击您要执行的 使用:

控制台

  1. 在 Google Cloud 控制台中,转到 Security Command Center 设置页面中的忽略规则标签页。

    转到“忽略规则”

  2. 如有必要,请选择您的 Google Cloud 项目或组织。

  3. 可选:如果为 Security Command Center 启用了数据驻留,请根据需要更改数据位置。

    如需更改数据位置,请点击操作栏中的位置选择器。

    系统随即会显示营业地点列表。选择新位置。

  4. 忽略规则部分中,您会看到有效忽略规则的详细信息,包括以下内容:

    • 名称:忽略规则 ID
    • 父级资源:忽略规则所在的资源
    • 说明:忽略规则的说明(如有)
    • 上次更新者为:上次更新规则的主账号
    • 上次更新时间:上次更新规则的日期和时间

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需列出忽略规则,请运行 gcloud scc muteconfigs list 命令:

    gcloud scc muteconfigs list --PARENT=PARENT_ID
    --location=LOCATION
    

    替换以下内容:

    • PARENT:要为其列出忽略规则的父级 organizationfolderproject
    • PARENT_ID:父级组织、文件夹或项目的 ID
    • LOCATION:如果数据驻留处于启用状态,则为列出静音规则的 Security Command Center 位置;如果数据驻留处于停用状态,则使用值 global

Go

以下示例使用 v1 API。修改 v2 的示例,将 v1 替换为 v2,并添加 将 /locations/LOCATION 设置为资源名称。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请在资源名称的 /sources/SOURCE_ID 后面添加 /locations/LOCATION,其中 SOURCE_ID 是发出发现结果的 Security Command Center 服务的 ID。

import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
	"google.golang.org/api/iterator"
)

// listMuteRules lists mute configs at the organization level will return all the configs
// at the org, folder, and project levels.
// Similarly, listing configs at folder level will list all the configs
// at the folder and project levels.
func listMuteRules(w io.Writer, parent string) error {
	// Use any one of the following resource paths to list mute configurations:
	//         - organizations/{organization_id}
	//         - folders/{folder_id}
	//         - projects/{project_id}
	// parent := fmt.Sprintf("projects/%s", "your-google-cloud-project-id")
	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer client.Close()

	req := &securitycenterpb.ListMuteConfigsRequest{Parent: parent}

	// List all mute configs present in the resource.
	it := client.ListMuteConfigs(ctx, req)
	for {
		muteconfig, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("it.Next: %w", err)
		}
		fmt.Fprintf(w, "Muteconfig Name: %s, ", muteconfig.Name)
	}
	return nil
}

Java

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。


import com.google.cloud.securitycenter.v1.ListMuteConfigsRequest;
import com.google.cloud.securitycenter.v1.MuteConfig;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;

public class ListMuteRules {

  public static void main(String[] args) {
    // TODO: Replace variables enclosed within {}

    // parent: Use any one of the following resource paths to list mute configurations:
    //         - organizations/{organization_id}
    //         - folders/{folder_id}
    //         - projects/{project_id}
    String parentPath = String.format("projects/%s", "your-google-cloud-project-id");
    listMuteRules(parentPath);
  }

  // Listing mute configs at the organization level will return all the configs
  // at the org, folder, and project levels.
  // Similarly, listing configs at folder level will list all the configs
  // at the folder and project levels.
  public static void listMuteRules(String parent) {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      ListMuteConfigsRequest listMuteConfigsRequest =
          ListMuteConfigsRequest.newBuilder().setParent(parent).build();

      // List all mute configs present in the resource.
      for (MuteConfig muteConfig : client.listMuteConfigs(listMuteConfigsRequest).iterateAll()) {
        System.out.println(muteConfig.getName());
      }
    } catch (IOException e) {
      System.out.println("Listing Mute rule failed! \n Exception: " + e);
    }
  }
}

Python

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请在资源名称的 /sources/SOURCE_ID 后面添加 /locations/LOCATION,其中 SOURCE_ID 是发出发现结果的 Security Command Center 服务的 ID。

def list_mute_rules(parent: str) -> None:
    """
    Listing mute configs at organization level will return all the configs
    at the org, folder and project levels.
    Similarly, listing configs at folder level will list all the configs
    at the folder and project levels.
    Args:
        parent: Use any one of the following resource paths to list mute configurations:
                - organizations/{organization_id}
                - folders/{folder_id}
                - projects/{project_id}
    """
    from google.cloud import securitycenter

    client = securitycenter.SecurityCenterClient()

    request = securitycenter.ListMuteConfigsRequest()
    request.parent = parent

    # List all Mute Configs present in the resource.
    for mute_config in client.list_mute_configs(request):
        print(mute_config.name)

REST API

在 Security Command Center API 中,使用 muteConfigs list 方法列出静音规则。请求正文为空。

除非启用数据驻留,否则您可以使用 Security Command Center API。API v2 是 预览版。当数据驻留 则 API v2 是唯一可用的 API。

如果您使用的是 Security Command Center API v1,请使用 v1 端点调用 muteConfigs list

GET https://securitycenter.googleapis.com/v1/PARENT/PARENT_ID/muteConfigs

如果您使用的是 Security Command Center API v2,请使用 v2 端点来调用 muteConfigs list:

GET https://securitycenter.googleapis.com/v2/PARENT/PARENT_ID/locations/LOCATION/muteConfigs

替换以下内容:

响应包括忽略规则的名称、说明和忽略配置 ID。

查看忽略规则配置

您可以使用 Google Cloud 控制台、gcloud CLI 或 Security Command Center API 查看静音规则配置。

如需查看用于检索忽略规则配置的示例代码,请参阅查看忽略规则

要查看忽略规则配置,请点击 使用:

控制台

  1. 在 Google Cloud 控制台中,前往 Security Command Center 设置页面中的忽略规则标签页。

    转到“忽略规则”

  2. 如有必要,请选择您的 Google Cloud 项目或组织。

  3. 可选:如果启用了数据驻留 ,然后根据需要更改数据位置。

    如需更改数据位置,请点击操作栏中的位置选择器。

    系统会显示位置列表。选择新位置。

  4. 忽略规则部分中,您会看到忽略规则列表。

  5. 点击要查看的规则的名称。

    此时将打开一个页面,其中包含忽略规则的配置。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 要查看忽略规则的配置,请运行 gcloud scc muteconfigs get 命令:

    gcloud scc muteconfigs get MUTE_CONFIG_ID \
     --PARENT=PARENT_ID --location=LOCATION
    

    替换以下内容:

Go

以下示例使用 v1 API。修改 v2 的示例,将 v1 替换为 v2,并添加 将 /locations/LOCATION 设置为资源名称。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。

import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
)

// getMuteRule retrieves a mute configuration given its resource name.
func getMuteRule(w io.Writer, parent string, muteConfigId string) error {
	// Use any one of the following resource paths to get mute configuration:
	//         - organizations/{organization_id}
	//         - folders/{folder_id}
	//         - projects/{project_id}
	// parent := fmt.Sprintf("projects/%s", "your-google-cloud-project-id")
	//
	// Name of the mute config to retrieve.
	// muteConfigId := "mute-config-id"
	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer client.Close()

	req := &securitycenterpb.GetMuteConfigRequest{
		Name: fmt.Sprintf("%s/muteConfigs/%s", parent, muteConfigId),
	}

	muteconfig, err := client.GetMuteConfig(ctx, req)
	if err != nil {
		return fmt.Errorf("Failed to retrieve Muteconfig: %w", err)
	}
	fmt.Fprintf(w, "Muteconfig Name: %s ", muteconfig.Name)
	return nil
}

Java

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。


import com.google.cloud.securitycenter.v1.MuteConfig;
import com.google.cloud.securitycenter.v1.MuteConfigName;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;

public class GetMuteRule {

  public static void main(String[] args) {
    // TODO(Developer): Replace the following variables

    // parentPath: Use any one of the following options:
    //             - organizations/{organization_id}
    //             - folders/{folder_id}
    //             - projects/{project_id}
    String parentPath = String.format("projects/%s", "your-google-cloud-project-id");

    // muteConfigId: Name of the mute config to retrieve.
    String muteConfigId = "mute-config-id";

    getMuteRule(parentPath, muteConfigId);
  }

  // Retrieves a mute configuration given its resource name.
  public static void getMuteRule(String projectId, String muteConfigId) {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {
      // Use appropriate MuteConfigName methods depending on the type of parent.
      // (org -> MuteConfigName.ofOrganizationMuteConfigName()
      // folder -> MuteConfigName.ofFolderMuteConfigName()
      // project -> MuteConfigName.ofProjectMuteConfigName)
      MuteConfig muteConfig =
          client.getMuteConfig(MuteConfigName.ofProjectMuteConfigName(projectId, muteConfigId));

      System.out.println("Retrieved the mute config: " + muteConfig);
    } catch (IOException e) {
      System.out.println("Mute rule retrieval failed! \n Exception: " + e);
    }
  }
}

Python

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。

def get_mute_rule(mute_config_name: str) -> None:
    """
    Retrieves a mute configuration given its resource name.
    Args:
        mute_config_name: Name of the mute config to retrieve.
                          Use any one of the following formats:
                          - organizations/{organization}/muteConfigs/{config_id}
                          - folders/{folder}/muteConfigs/{config_id}
                          - projects/{project}/muteConfigs/{config_id}
    """
    from google.cloud import securitycenter

    client = securitycenter.SecurityCenterClient()

    request = securitycenter.GetMuteConfigRequest()
    request.name = mute_config_name

    mute_config = client.get_mute_config(request)
    print(f"Retrieved the mute rule: {mute_config.name}")

REST API

在 Security Command Center API 中,使用 muteConfigs get 方法返回 忽略规则的配置请求正文为空。

如需获取忽略规则的 CONFIG_ID,请先执行 API 调用以列出忽略规则。响应包含返回的忽略规则的配置 ID。

除非已启用数据驻留,否则您可以使用 Security Command Center API 的 v1 或 v2 版本。API v2 以预览版的形式提供。当数据驻留 则 API v2 是唯一可用的 API。

如果您使用的是 Security Command Center API v1,请使用 v1 端点调用 muteConfigs get

GET https://securitycenter.googleapis.com/v1/PARENT/PARENT_ID/muteConfigs/CONFIG_ID

如果您使用的是 Security Command Center API v2,请使用 v2 端点来调用 muteConfigs get:

GET https://securitycenter.googleapis.com/v2/PARENT/PARENT_ID/locations/LOCATION/muteConfigs/CONFIG_ID

替换以下内容:

更新忽略规则

您可以使用 Google Cloud 控制台、gcloud CLI 或 Security Command Center API。

您无法更改 ID;父级组织、文件夹或项目;或 忽略规则的位置。如需更改其中任何值,您必须创建新的忽略规则。

如果您之前已取消忽略某些发现结果,但它们与 Google Cloud 控制台中更新的忽略规则匹配,则系统会再次忽略这些发现结果。如需了解详情,请参阅取消忽略个别发现结果

如需查看用于更新忽略规则的示例代码,请参阅更新忽略规则

要更新忽略规则,请点击 使用:

控制台

  1. 在 Google Cloud 控制台中,转到 Security Command Center 设置页面中的忽略规则标签页。

    转到“忽略规则”

  2. 选择要修改的忽略规则的父资源的 Google Cloud 项目或组织。

  3. 可选:如果为 Security Command Center 启用了数据驻留,请根据需要更改数据位置。

    要更改数据位置,请点击操作栏中的位置选择器。

    系统会显示位置列表。选择新位置。

  4. 点击要修改的忽略规则的名称。

    如果您没有选择适当的项目或组织,可能会看到一条通知,指出您无权修改忽略规则。

  5. 输入新说明,然后点击保存

  6. 对于动态忽略规则,请更新或更改规则的到期时间。

  7. 更新或更改过滤条件。

    如需了解相关说明,请参阅创建忽略规则

  8. 如需查看与更新后的过滤条件匹配的发现结果,请点击预览匹配的发现结果

    系统会加载表,其中包含与新查询匹配的发现结果。

  9. 点击保存

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需更新忽略规则,请运行 gcloud scc muteconfigs update 命令:

      gcloud scc muteconfigs update MUTE_CONFIG_ID \
        --PARENT=PARENT_ID \
        --location=LOCATION
        --description=RULE_DESCRIPTION \
        --filter=FILTER
        --type=MUTE_TYPE \
        --expiry-time=TIMESTAMP
    

    替换以下内容:

    • MUTE_CONFIG_ID:忽略规则的 ID。
    • PARENT:忽略规则的父级资源(organizationfolderproject)。
    • PARENT_ID: 组织、文件夹或项目。
    • LOCATION: 如果启用了数据驻留,则 Security Command Center 更新忽略规则的位置;如果未启用数据驻留,则使用 global
    • RULE_DESCRIPTION:忽略规则的说明(最多 1,024 个字符)。
    • FILTER:您定义要过滤的表达式 结果。

      例如,如需忽略 OPEN_FIREWALL 发现结果,您的过滤条件可能是 FILTER="category=\"OPEN_FIREWALL\""

    • MUTE_TYPE:您要更新的忽略规则的类型。有效的静音规则类型为 DYNAMICSTATIC。忽略规则一经创建便无法更改其类型。

    • TIMESTAMP:仅适用于更新动态忽略规则的情况。指明动态 忽略规则到期。该值必须设置为 否则该请求将被拒绝。有关时间的信息 格式,请参阅 gcloud topic datetimes。使用动态静音 规则到期后,系统会将该规则从所有匹配的发现结果中移除。如果您希望 动态忽略规则,以无限期地对匹配的发现结果采取行动,请忽略此项 字段。

Go

以下示例使用 v1 API。修改 v2 的示例,将 v1 替换为 v2,并添加 将 /locations/LOCATION 设置为资源名称。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。


import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
	"google.golang.org/protobuf/types/known/fieldmaskpb"
)

// updateMuteRule Updates an existing mute configuration.
// The following can be updated in a mute config: description and filter.
func updateMuteRule(w io.Writer, muteConfigName string) error {
	// Specify the name of the mute config to delete.
	// muteConfigName: Use any one of the following formats:
	//                 - organizations/{organization}/muteConfigs/{config_id}
	//                 - folders/{folder}/muteConfigs/{config_id}
	//                 - projects/{project}/muteConfigs/{config_id}
	// muteConfigName := fmt.Sprintf("projects/%s/muteConfigs/%s", "project-id", "mute-config")
	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer client.Close()

	updateMuteConfig := &securitycenterpb.MuteConfig{
		Name:        muteConfigName,
		Description: "Updated mute config description",
	}

	req := &securitycenterpb.UpdateMuteConfigRequest{
		MuteConfig: updateMuteConfig,
		// Set the update mask to specify which properties of the mute config should be
		// updated.
		// If empty, all mutable fields will be updated.
		// Make sure that the mask fields match the properties changed in 'updateMuteConfig'.
		// For more info on constructing update mask path, see the proto or:
		// https://cloud.google.com/security-command-center/docs/reference/rest/v1/folders.muteConfigs/patch?hl=en#query-parameters
		UpdateMask: &fieldmaskpb.FieldMask{
			Paths: []string{
				"description",
			},
		},
	}

	response, err := client.UpdateMuteConfig(ctx, req)
	if err != nil {
		return fmt.Errorf("mute rule update failed! %w", err)
	}
	fmt.Fprintf(w, "Mute rule updated %s", response.Name)
	return nil
}

Java

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。


import com.google.cloud.securitycenter.v1.MuteConfig;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import com.google.cloud.securitycenter.v1.UpdateMuteConfigRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;

public class UpdateMuteRule {

  public static void main(String[] args) {
    // TODO: Replace the variables within {}

    // Specify the name of the mute config to delete.
    // muteConfigName: Use any one of the following formats:
    //                 - organizations/{organization}/muteConfigs/{config_id}
    //                 - folders/{folder}/muteConfigs/{config_id}
    //                 - projects/{project}/muteConfigs/{config_id}
    String muteConfigName = "{any-one-of-the-above-formats}";
    updateMuteRule(muteConfigName);
  }

  // Updates an existing mute configuration.
  // The following can be updated in a mute config: description and filter.
  public static void updateMuteRule(String muteConfigName) {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient securityCenterClient = SecurityCenterClient.create()) {

      MuteConfig updateMuteConfig =
          MuteConfig.newBuilder()
              .setName(muteConfigName)
              .setDescription("Updated mute config description")
              .build();

      UpdateMuteConfigRequest updateMuteConfigRequest =
          UpdateMuteConfigRequest.newBuilder()
              .setMuteConfig(updateMuteConfig)
              // Set the update mask to specify which properties of the mute config should be
              // updated.
              // If empty, all mutable fields will be updated.
              // Make sure that the mask fields match the properties changed in 'updateMuteConfig'.
              // For more info on constructing update mask path, see the proto or:
              // https://cloud.google.com/security-command-center/docs/reference/rest/v1/folders.muteConfigs/patch?hl=en#query-parameters
              .setUpdateMask(FieldMask.newBuilder().addPaths("description").build())
              .build();

      MuteConfig response = securityCenterClient.updateMuteConfig(updateMuteConfigRequest);
      System.out.println(response);
    } catch (IOException e) {
      System.out.println("Mute rule update failed! \n Exception: " + e);
    }
  }
}

Python

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。

def update_mute_rule(mute_config_name: str) -> None:
    """
    Updates an existing mute configuration.
    The following can be updated in a mute config: description, and filter/ mute rule.
    Args:
        mute_config_name: Specify the name of the mute config to delete.
                          Use any one of the following formats:
                          - organizations/{organization}/muteConfigs/{config_id}
                          - folders/{folder}/muteConfigs/{config_id}
                          - projects/{project}/muteConfigs/{config_id}
    """
    from google.cloud import securitycenter
    from google.protobuf import field_mask_pb2

    client = securitycenter.SecurityCenterClient()

    update_mute_config = securitycenter.MuteConfig()
    update_mute_config.name = mute_config_name
    update_mute_config.description = "Updated mute config description"

    field_mask = field_mask_pb2.FieldMask(paths=["description"])

    request = securitycenter.UpdateMuteConfigRequest()
    request.mute_config = update_mute_config
    # Set the update mask to specify which properties of the Mute Config should be updated.
    # If empty, all mutable fields will be updated.
    # Make sure that the mask fields match the properties changed in 'update_mute_config'.
    # For more info on constructing update mask path, see the proto or:
    # https://cloud.google.com/security-command-center/docs/reference/rest/v1/folders.muteConfigs/patch?hl=en#query-parameters
    request.update_mask = field_mask

    mute_config = client.update_mute_config(request)
    print(f"Updated mute rule : {mute_config}")

REST API

在 Security Command Center API 中,使用 muteConfigs patch 方法更新忽略规则。请求正文是 MuteConfig 的实例。

如需获取忽略规则的 CONFIG_ID,请对 列出忽略规则。 响应包含返回的忽略规则的配置 ID。

除非已启用数据驻留,否则您可以使用 Security Command Center API 的 v1 或 v2 版本。API v2 是 预览版。启用数据驻留后,API v2 是唯一可用的 API。

如果您使用的是 Security Command Center API v1,请使用 v1 端点执行以下操作 调用 muteConfigs patch

PATCH https://securitycenter.googleapis.com/v1/PARENT/PARENT_ID/muteConfigs/CONFIG_ID

  {
    "description": "RULE_DESCRIPTION",
    "filter": "FILTER",
    "type": "MUTE_TYPE",
    "expiryTime": "TIMESTAMP"
  }

如果您使用的是 Security Command Center API v2,请使用 v2 端点执行以下操作 调用 muteConfigs patch

PATCH https://securitycenter.googleapis.com/v2/PARENT/PARENT_ID/locations/LOCATION/muteConfigs/CONFIG_ID

  {
    "description": "RULE_DESCRIPTION",
    "filter": "FILTER",
    "type": "MUTE_TYPE",
    "expiryTime": "TIMESTAMP"
  }

替换以下内容:

  • PARENT:忽略规则的父级资源(organizationsfoldersprojects
  • PARENT_ID:组织、文件夹或项目的 ID
  • LOCATION: 如果启用了数据驻留,则 Security Command Center 更新忽略规则的位置;如果未启用数据驻留,则使用 global
  • CONFIG_ID:忽略规则的数字 ID
  • RULE_DESCRIPTION:忽略规则的说明 (最多:1,024 个字符)
  • FILTER:您定义来过滤发现结果的表达式

    例如,如需忽略 OPEN_FIREWALL 发现结果,您的过滤条件可以是 "category=\"OPEN_FIREWALL\""

  • MUTE_TYPE:您要更新的忽略规则的类型。有效的忽略规则类型包括 DYNAMICSTATIC。忽略规则一经创建便无法更改其类型。

  • TIMESTAMP:仅适用于更新 动态忽略规则。指示动态静音时间的日期/时间字符串 规则到期。该值必须设置为至少一天后的日期,或者设置为 请求将会被拒绝。如需了解时间格式,请参阅 gcloud topic datetimes。动态忽略规则到期后,系统会将其从所有匹配的发现结果中移除。如果您希望动态忽略规则对匹配的发现结果无限期执行操作,请省略此字段。

与过滤条件完全匹配的新发现结果会被隐藏,发现结果的 mute 特性设置为 MUTED

删除忽略规则

您可以使用 Google Cloud 控制台、 gcloud CLI 或 Security Command Center API。

在删除忽略规则之前,请先了解以下内容:

  • 您无法恢复已删除的忽略规则。
  • 删除静态忽略规则不会自动取消忽略任何 处于静音状态。您必须手动或以编程方式取消静音 发现结果
  • 删除动态忽略规则会自动将该规则从所有 先前匹配的发现结果,如果与任何匹配的发现结果均不匹配,则取消忽略 。
  • 系统不会忽略将来与已删除忽略规则中的过滤条件匹配的发现结果。

如需查看用于删除忽略规则的示例代码,请参阅删除忽略规则

要删除忽略规则,请点击要忽略的 使用:

控制台

  1. 在 Google Cloud 控制台中,转到 Security Command Center 设置页面中的忽略规则标签页。

    转到“忽略规则”

  2. 如有必要,请选择您的 Google Cloud 项目或组织。

  3. 可选:如果启用了数据驻留 ,然后根据需要更改数据位置。

    如需更改数据位置,请点击操作栏中的位置选择器。

    系统随即会显示营业地点列表。选择新位置。

  4. 点击要删除的忽略规则的名称。

  5. 点击 删除

  6. 阅读对话框,如果满意,请点击删除

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需删除忽略规则,请运行 gcloud scc muteconfigs delete 命令:

    gcloud scc muteconfigs delete MUTE_CONFIG_ID \
     --PARENT=PARENT_ID --location=LOCATION
    

    请替换以下内容:

  3. 确认您删除忽略规则的请求。

Go

以下示例使用 v1 API。修改 v2 的示例,将 v1 替换为 v2,并添加 将 /locations/LOCATION 设置为资源名称。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。


import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
)

// deleteMuteRule deletes a mute configuration given its resource name.
// Note: Previously muted findings are not affected when a mute config is deleted.
func deleteMuteRule(w io.Writer, parent string, muteConfigId string) error {
	// parent: Use any one of the following options:
	//             - organizations/{organization_id}
	//             - folders/{folder_id}
	//             - projects/{project_id}
	// parent := fmt.Sprintf("projects/%s", "your-google-cloud-project-id")
	//
	// muteConfigId: Specify the name of the mute config to delete.
	// muteConfigId := "mute-config-id"
	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer client.Close()

	req := &securitycenterpb.DeleteMuteConfigRequest{
		Name: fmt.Sprintf("%s/muteConfigs/%s", parent, muteConfigId),
	}

	if err := client.DeleteMuteConfig(ctx, req); err != nil {
		return fmt.Errorf("failed to delete Muteconfig: %w", err)
	}
	fmt.Fprintf(w, "Mute rule deleted successfully: %s", muteConfigId)
	return nil
}

Java

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请在资源名称的 /sources/SOURCE_ID 后面添加 /locations/LOCATION,其中 SOURCE_ID 是发出发现结果的 Security Command Center 服务的 ID。


import com.google.cloud.securitycenter.v1.MuteConfigName;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;

public class DeleteMuteRule {

  public static void main(String[] args) {
    // TODO(Developer): Replace the following variables
    // parentPath: Use any one of the following options:
    //             - organizations/{organization_id}
    //             - folders/{folder_id}
    //             - projects/{project_id}
    String parentPath = String.format("projects/%s", "your-google-cloud-project-id");

    // muteConfigId: Specify the name of the mute config to delete.
    String muteConfigId = "mute-config-id";

    deleteMuteRule(parentPath, muteConfigId);
  }

  // Deletes a mute configuration given its resource name.
  // Note: Previously muted findings are not affected when a mute config is deleted.
  public static void deleteMuteRule(String projectId, String muteConfigId) {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {
      // Use appropriate MuteConfigName methods depending on the type of parent.
      // org -> MuteConfigName.ofOrganizationMuteConfigName()
      // folder -> MuteConfigName.ofFolderMuteConfigName()
      // project -> MuteConfigName.ofProjectMuteConfigName)
      client.deleteMuteConfig(MuteConfigName.ofProjectMuteConfigName(projectId, muteConfigId));

      System.out.println("Mute rule deleted successfully: " + muteConfigId);
    } catch (IOException e) {
      System.out.println("Mute rule deletion failed! \n Exception: " + e);
    }
  }
}

Python

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。

def delete_mute_rule(mute_config_name: str) -> None:
    """
    Deletes a mute configuration given its resource name.
    Note: Previously muted findings are not affected when a mute config is deleted.
    Args:
        mute_config_name: Specify the name of the mute config to delete.
                          Use any one of the following formats:
                          - organizations/{organization}/muteConfigs/{config_id}
                          - folders/{folder}/muteConfigs/{config_id} or
                          - projects/{project}/muteConfigs/{config_id}
    """
    from google.cloud import securitycenter

    client = securitycenter.SecurityCenterClient()

    request = securitycenter.DeleteMuteConfigRequest()
    request.name = mute_config_name

    client.delete_mute_config(request)
    print(f"Mute rule deleted successfully: {mute_config_name}")

REST API

在 Security Command Center API 中,使用 muteConfigs delete 方法 删除忽略规则。请求正文为空。

如需获取忽略规则的 CONFIG_ID,请对 列出忽略规则。 响应包含返回的忽略规则的配置 ID。

除非已启用数据驻留,否则您可以使用 Security Command Center API 的 v1 或 v2 版本。API v2 是 预览版。启用数据驻留后,API v2 是唯一可用的 API。

如果您使用的是 Security Command Center API v1,请使用 v1 端点来调用 muteConfigs delete:

DELETE https://securitycenter.googleapis.com/v1/PARENT/PARENT_ID/muteConfigs/CONFIG_ID

如果您使用的是 Security Command Center API v2,请使用 v2 端点来调用 muteConfigs delete:

DELETE https://securitycenter.googleapis.com/v2/PARENT/PARENT_ID/locations/LOCATION/muteConfigs/CONFIG_ID

替换以下内容:

忽略个别发现结果

您可以使用 Google Cloud 控制台、gcloud CLI 或 Security Command Center 以静态方式忽略单个发现结果 API。

静态地忽略发现结果不会影响其是否处于活动状态。如果某个有效的发现结果被忽略,其 state 属性会保持不变,即仍为 state="ACTIVE"。发现结果被隐藏,但在底层 漏洞、配置错误或威胁问题都得到解决。此外,通过静态忽略某项发现结果,您会覆盖应用于该发现结果的所有动态忽略规则。

忽略恶意组合发现结果会关闭相应的恶意组合 这种情况。

如需忽略与您指定的条件匹配的所有未来发现结果,请参阅 创建忽略规则

如需查看用于静音发现结果的示例代码,请参阅静音发现结果

如需以静态方式忽略单个发现结果,请点击需要执行移除操作的流程的标签页 希望使用:

控制台

  1. 在 Google Cloud 控制台中,转到 Security Command Center 发现结果页面。

    转至“发现结果”

  2. 如有必要,请选择您的 Google Cloud 项目或组织。

  3. 可选:如果为 Security Command Center 启用了数据驻留,请根据需要更改数据位置。

    如需更改数据位置,请点击操作栏中的位置选择器。

    系统会显示位置列表。选择新位置。

  4. 如果您在发现结果的查询结果面板中没有看到需要忽略的发现结果,请在快速过滤条件面板的类别部分选择该发现结果的类别。

  5. 勾选需要忽略的发现结果旁边的复选框。您可以选择一个或多个发现结果。

  6. 发现结果的查询结果操作栏上,点击忽略选项,然后选择应用忽略替换项

    所选发现结果的 mute 属性将被设置为 MUTED,并且该发现结果会从发现结果的查询结果面板中被移除。

或者,您也可以在发现结果的详细信息面板中忽略相应的发现结果:

  1. 发现结果页面的发现结果的查询结果面板中,选择类别列,然后点击需要忽略的发现结果的名称。系统会打开该发现结果的详细信息面板。
  2. 点击执行操作
  3. 采取措施菜单中,选择应用忽略覆盖设置

    如果您选择了忽略此类发现结果,则系统会在创建忽略规则部分 该页面打开,您可以在其中为同一请求的发现结果创建忽略规则 或包含与 Indicator 属性。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需将发现结果的忽略状态设置为 MUTED,请使用 gcloud CLI 中的 set-mute 命令:

    gcloud scc findings set-mute FINDING_ID \
     --PARENT=PARENT_ID \
     --location=LOCATION --source=SOURCE_ID \
     --mute=MUTED
    

    请替换以下内容:

    • FINDING_ID:要忽略的发现结果的 ID

      如需检索发现结果 ID,请使用 Security Command Center API 检索 列出发现结果。 发现结果 ID 是 canonicalName 属性的最后一部分,例如 projects/123456789012/sources/1234567890123456789/findings`/5ee30aa342e799e4e1700826de053aa9

    • PARENT:父资源(projectfolderorganization),区分大小写

    • PARENT_ID:父级组织、文件夹或项目的 ID

    • LOCATION:如果数据驻留处于启用状态,则为要将发现结果静音的 Security Command Center 位置;如果数据驻留处于停用状态,请使用值 global

    • SOURCE_ID:来源 ID

      如需了解如何检索来源 ID,请参阅获取来源 ID

Go

以下示例使用 v1 API。修改 v2 的示例,将 v1 替换为 v2,并添加 将 /locations/LOCATION 设置为资源名称。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。

import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
)

// setMute mutes an individual finding, can also unmute or reset the mute state of a finding.
// If a finding is already muted, muting it again has no effect.
// Various mute states are: UNDEFINED/MUTE/UNMUTE.
func setMute(w io.Writer, findingPath string) error {
	// findingPath: The relative resource name of the finding. See:
	// https://cloud.google.com/apis/design/resource_names#relative_resource_name
	// Use any one of the following formats:
	//  - organizations/{organization_id}/sources/{source_id}/finding/{finding_id}
	//  - folders/{folder_id}/sources/{source_id}/finding/{finding_id}
	//  - projects/{project_id}/sources/{source_id}/finding/{finding_id}
	// findingPath := fmt.Sprintf("projects/%s/sources/%s/finding/%s", "your-google-cloud-project-id", "source", "finding-id")
	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer client.Close()

	req := &securitycenterpb.SetMuteRequest{
		Name: findingPath,
		Mute: securitycenterpb.Finding_MUTED}

	finding, err := client.SetMute(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to set the specified mute value: %w", err)
	}
	fmt.Fprintf(w, "Mute value for the finding: %s is %s", finding.Name, finding.Mute)
	return nil
}

Java

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请在资源名称的 /sources/SOURCE_ID 后面添加 /locations/LOCATION,其中 SOURCE_ID 是发出发现结果的 Security Command Center 服务的 ID。


import com.google.cloud.securitycenter.v1.Finding;
import com.google.cloud.securitycenter.v1.Finding.Mute;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import com.google.cloud.securitycenter.v1.SetMuteRequest;
import java.io.IOException;

public class SetMuteFinding {

  public static void main(String[] args) throws IOException {
    // TODO: Replace the variables within {}

    // findingPath: The relative resource name of the finding. See:
    // https://cloud.google.com/apis/design/resource_names#relative_resource_name
    // Use any one of the following formats:
    //  - organizations/{organization_id}/sources/{source_id}/finding/{finding_id}
    //  - folders/{folder_id}/sources/{source_id}/finding/{finding_id}
    //  - projects/{project_id}/sources/{source_id}/finding/{finding_id}
    String findingPath = "{path-to-the-finding}";
    setMute(findingPath);
  }

  // Mute an individual finding.
  // If a finding is already muted, muting it again has no effect.
  // Various mute states are: MUTE_UNSPECIFIED/MUTE/UNMUTE.
  public static Finding setMute(String findingPath) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      SetMuteRequest setMuteRequest =
          SetMuteRequest.newBuilder().setName(findingPath).setMute(Mute.MUTED).build();

      Finding finding = client.setMute(setMuteRequest);
      System.out.println(
          "Mute value for the finding " + finding.getName() + " is: " + finding.getMute());
      return finding;
    }
  }
}

Python

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。

def set_mute_finding(finding_path: str) -> None:
    """
      Mute an individual finding.
      If a finding is already muted, muting it again has no effect.
      Various mute states are: MUTE_UNSPECIFIED/MUTE/UNMUTE.
    Args:
        finding_path: The relative resource name of the finding. See:
        https://cloud.google.com/apis/design/resource_names#relative_resource_name
        Use any one of the following formats:
        - organizations/{organization_id}/sources/{source_id}/finding/{finding_id},
        - folders/{folder_id}/sources/{source_id}/finding/{finding_id},
        - projects/{project_id}/sources/{source_id}/finding/{finding_id}.
    """
    from google.cloud import securitycenter

    client = securitycenter.SecurityCenterClient()

    request = securitycenter.SetMuteRequest()
    request.name = finding_path
    request.mute = securitycenter.Finding.Mute.MUTED

    finding = client.set_mute(request)
    print(f"Mute value for the finding: {finding.mute.name}")

REST API

在 Security Command Center API 中,使用 setMute 方法将发现结果静音。请求正文是一个枚举,用于指明生成的 静音状态。

除非启用数据驻留,否则您可以使用 Security Command Center API。API v2 是 预览版。当数据驻留 则 API v2 是唯一可用的 API。

如果您使用的是 Security Command Center API v1,请使用 v1 端点调用 setMute


POST https://securitycenter.googleapis.com/v1/PARENT/PARENT_ID/sources/SOURCE_ID/findings/FINDING_ID:setMute

{
  "mute": "MUTED"
}

如果您使用的是 Security Command Center API v2,请调用 setMute 方法是使用 v2 端点:

POST https://securitycenter.googleapis.com/v2/PARENT/PARENT_ID/sources/SOURCE_ID/locations/LOCATION/findings/FINDING_ID:setMute

{
  "mute": "MUTED"
}

替换以下内容:

  • PARENT:父级资源 (organizations, foldersprojects)。
  • PARENT_ID:父级组织、文件夹或项目的 ID。
  • LOCATION:如果数据驻留处于启用状态,则为要将发现结果静音的 Security Command Center 位置;如果数据驻留处于停用状态,请使用值 global
  • SOURCE_ID:来源的数字 ID。

    有关检索媒体 ID 的说明,请参阅 获取来源 ID

  • FINDING_ID:所需发现结果的 ID 静音。

    如需检索发现结果 ID,请使用 Security Command Center API 列出发现结果。发现结果 ID 是 canonicalName 属性的最后一部分, 示例, projects/123456789012/sources/1234567890123456789/findings/5ee30aa342e799e4e1700826de053aa9

忽略发现结果后,其 mute 属性会被设为 MUTED

取消忽略各个发现结果

您可以使用 Google Cloud 控制台、gcloud CLI 或 Security Command Center API 静态取消静音个别发现结果。

当您需要防止发现结果被忽略时,将发现结果取消忽略非常有用 被过于宽泛的忽略规则隐藏,或被可能过于复杂,以至于 修改以排除您认为重要的发现结果。

如需查看用于取消静音发现结果的示例代码,请参阅取消静音发现结果

只有在手动忽略已忽略的发现结果时,系统才会再次忽略未忽略的发现结果。 忽略使用 gcloud CLI 或 Security Command Center API 创建的规则不会生效 会影响已被用户取消忽略的发现结果。

如需查看取消忽略发现结果的示例代码,请参阅将发现结果取消忽略

控制台

  1. 在 Google Cloud 控制台中,转到 Security Command Center 发现结果页面。

    转至“发现结果”

  2. 如有必要,请选择您的 Google Cloud 项目或组织。

    系统随即会打开发现结果页面,并在查询预览部分中显示默认查询。由于默认查询会过滤掉已忽略的发现结果,因此您需要先修改该查询,之后系统才会在发现结果的查询结果面板中显示已忽略的发现结果。

  3. 可选:如果启用了数据驻留 ,然后根据需要更改数据位置。

    如需更改数据位置,请点击操作栏中的位置选择器。

    系统随即会显示营业地点列表。选择新位置。

  4. 查询预览部分右侧,点击修改查询以打开查询编辑器

  5. 查询编辑器字段中,将现有忽略语句替换为以下内容:

    mute="MUTED"
  6. 点击应用发现结果的查询结果面板中的发现结果会相应更新,以仅包含已忽略的发现结果。

  7. 如有必要,您可以过滤掉其他已忽略的发现结果。例如,您可以在快速过滤条件面板下方的类别部分,选择需要取消忽略的发现结果的名称,以过滤掉所有其他类别的发现结果。

  8. 勾选要取消忽略的发现结果旁边的复选框。您可以选择一个或多个发现结果。

  9. 发现结果的查询结果操作栏上,点击忽略选项,然后选择应用取消忽略替换项

    所选发现结果的 mute 属性将被设置为 UNMUTED,并且该发现结果会从发现结果的查询结果面板中被移除。

或者,您也可以在发现结果的详细信息面板中取消忽略相应的发现结果:

  1. 发现结果页面的发现结果的查询结果面板中,选择类别列,然后点击需要取消忽略的发现结果的名称。系统会打开该发现结果的详细信息面板。
  2. 点击执行操作
  3. 执行操作菜单中,选择应用取消忽略替换项

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需将发现结果的忽略状态设置为 UNMUTED,请使用 gcloud CLI 中的 set-mute 命令:

    gcloud scc findings set-mute FINDING_ID \
     --PARENT=PARENT_ID \
     --location=LOCATION --source=SOURCE_ID \
     --mute=UNMUTED
    

    请替换以下内容:

    • FINDING_ID:要忽略的发现结果的 ID

      如需检索发现结果 ID,请使用 Security Command Center API 列出发现结果。发现结果 ID 是 canonicalName 属性的最后一部分,例如 projects/123456789012/sources/1234567890123456789/findings/5ee30aa342e799e4e1700826de053aa9

    • PARENT:父资源(projectfolderorganization),区分大小写

    • PARENT_ID:父级组织、文件夹或项目的 ID

    • LOCATION: 如果启用了数据驻留,则 Security Command Center 取消忽略发现结果的位置;如果未启用数据驻留,则使用 global

    • SOURCE_ID:来源 ID

      有关检索媒体 ID 的说明,请参阅 获取来源 ID

Go

以下示例使用 v1 API。修改 v2 的示例,将 v1 替换为 v2,并添加 将 /locations/LOCATION 设置为资源名称。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请在资源名称的 /sources/SOURCE_ID 后面添加 /locations/LOCATION,其中 SOURCE_ID 是发出发现结果的 Security Command Center 服务的 ID。


import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
)

// setMute mutes an individual finding, can also unmute or reset the mute state of a finding.
// If a finding is already muted, muting it again has no effect.
// Various mute states are: UNDEFINED/MUTE/UNMUTE.
func setUnmute(w io.Writer, findingPath string) error {
	// findingPath: The relative resource name of the finding. See:
	// https://cloud.google.com/apis/design/resource_names#relative_resource_name
	// Use any one of the following formats:
	//  - organizations/{organization_id}/sources/{source_id}/finding/{finding_id}
	//  - folders/{folder_id}/sources/{source_id}/finding/{finding_id}
	//  - projects/{project_id}/sources/{source_id}/finding/{finding_id}
	// findingPath := fmt.Sprintf("projects/%s/sources/%s/finding/%s", "your-google-cloud-project-id", "source", "finding-id")
	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer client.Close()

	req := &securitycenterpb.SetMuteRequest{
		Name: findingPath,
		Mute: securitycenterpb.Finding_UNMUTED}

	finding, err := client.SetMute(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to set the specified mute value: %w", err)
	}
	fmt.Fprintf(w, "Mute value for the finding: %s is %s", finding.Name, finding.Mute)
	return nil
}

Java

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。


import com.google.cloud.securitycenter.v1.Finding;
import com.google.cloud.securitycenter.v1.Finding.Mute;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import com.google.cloud.securitycenter.v1.SetMuteRequest;
import java.io.IOException;

public class SetUnmuteFinding {

  public static void main(String[] args) throws IOException {
    // TODO: Replace the variables within {}

    // findingPath: The relative resource name of the finding. See:
    // https://cloud.google.com/apis/design/resource_names#relative_resource_name
    // Use any one of the following formats:
    //  - organizations/{organization_id}/sources/{source_id}/finding/{finding_id}
    //  - folders/{folder_id}/sources/{source_id}/finding/{finding_id}
    //  - projects/{project_id}/sources/{source_id}/finding/{finding_id}
    String findingPath = "{path-to-the-finding}";
    setUnmute(findingPath);
  }

  // Unmute an individual finding.
  // Unmuting a finding that isn't muted has no effect.
  // Various mute states are: MUTE_UNSPECIFIED/MUTE/UNMUTE.
  public static Finding setUnmute(String findingPath) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      SetMuteRequest setMuteRequest =
          SetMuteRequest.newBuilder().setName(findingPath).setMute(Mute.UNMUTED).build();

      Finding finding = client.setMute(setMuteRequest);
      System.out.println(
          "Mute value for the finding " + finding.getName() + " is: " + finding.getMute());
      return finding;
    }
  }
}

Python

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请在资源名称的 /sources/SOURCE_ID 后面添加 /locations/LOCATION,其中 SOURCE_ID 是发出发现结果的 Security Command Center 服务的 ID。

def set_unmute_finding(finding_path: str) -> None:
    """
      Unmute an individual finding.
      Unmuting a finding that isn't muted has no effect.
      Various mute states are: MUTE_UNSPECIFIED/MUTE/UNMUTE.
    Args:
        finding_path: The relative resource name of the finding. See:
        https://cloud.google.com/apis/design/resource_names#relative_resource_name
        Use any one of the following formats:
        - organizations/{organization_id}/sources/{source_id}/finding/{finding_id},
        - folders/{folder_id}/sources/{source_id}/finding/{finding_id},
        - projects/{project_id}/sources/{source_id}/finding/{finding_id}.
    """
    from google.cloud import securitycenter

    client = securitycenter.SecurityCenterClient()

    request = securitycenter.SetMuteRequest()
    request.name = finding_path
    request.mute = securitycenter.Finding.Mute.UNMUTED

    finding = client.set_mute(request)
    print(f"Mute value for the finding: {finding.mute.name}")

REST API

在 Security Command Center API 中,使用 setMute 方法取消静音发现结果。请求正文是指示最终忽略状态的枚举。

除非启用数据驻留,否则您可以使用 Security Command Center API。API v2 以预览版的形式提供。启用数据驻留后,API v2 是唯一可用的 API。

如果您使用的是 Security Command Center API v1,请使用 v1 端点调用 setMute

POST https://securitycenter.googleapis.com/v1/PARENT/PARENT_ID/sources/SOURCE_ID/findings/FINDING_ID:setMute

{
  "mute": "UNMUTED"
}

如果您使用的是 Security Command Center API v2,请使用 v2 端点调用 setMute

POST https://securitycenter.googleapis.com/v2/PARENT/PARENT_ID/sources/SOURCE_ID/locations/LOCATION/findings/FINDING_ID:setMute

{
  "mute": "UNMUTED"
}

替换以下内容:

  • PARENT:父级资源(organizationsfoldersprojects
  • PARENT_ID:父级组织、文件夹或项目的 ID
  • LOCATION: 如果启用了数据驻留,则 Security Command Center 取消忽略发现结果的位置;如果未启用数据驻留,则使用 global
  • SOURCE_ID:来源的数字 ID

    如需了解如何检索来源 ID,请参阅获取来源 ID

  • FINDING_ID:要忽略的发现结果的 ID。

    如需检索发现结果 ID,请使用 Security Command Center API 检索 列出发现结果。 发现结果 ID 是 canonicalName 属性的最后一部分,例如 projects/123456789012/sources/1234567890123456789/findings/5ee30aa342e799e4e1700826de053aa9

所选的发现结果不再隐藏,并且发现结果的 mute 特性设置为 UNMUTED

从个别发现结果中移除忽略状态替换项

当您有意修改发现结果的忽略状态以静态忽略或取消忽略该发现结果时,您会应用忽略状态替换项。例如,您可能希望 应用忽略状态替换项,以隐藏不值得的低严重级别发现结果 为其创建动态忽略规则

您可以使用 Google Cloud 控制台、 gcloud CLI 或 Security Command Center API。

在从发现结果中移除忽略状态替换项之前,请先了解 以下:

  • 如果发现结果是静态静音或取消静音的,则其静音状态替换值。您可以使用静态忽略规则手动或自动将忽略状态替换项应用于任何发现结果。
  • 忽略状态替换项会无限期地应用于发现结果并具有优先权 忽略任何匹配的忽略规则。
  • 从发现结果中移除忽略状态替换项会重置发现结果的忽略状态,以便系统可以使用静态或动态忽略规则对其进行处理。
  • 移除发现结果的忽略状态替换项与取消忽略发现结果不同。如果您取消忽略发现结果(应用取消忽略的覆盖设置),忽略规则 无法忽略该发现结果,除非您手动移除忽略状态替换项。

如需从单个发现结果中移除忽略替换项,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Security Command Center 发现结果页面。

    转至“发现结果”

  2. 选择您的 Google Cloud 项目或组织。

  3. 可选:如果启用了数据驻留 ,然后根据需要更改数据位置。

    要更改数据位置,请点击操作栏中的位置选择器。

    系统随即会显示营业地点列表。选择新位置。

  4. 查询预览部分右侧,点击修改查询以打开查询编辑器

  5. 查询编辑器字段中,将现有忽略语句替换为以下内容:

    mute="MUTED" OR mute="UNMUTED"
  6. 点击应用发现结果的查询结果面板中的发现结果会相应更新,以包含静态忽略的发现结果和未忽略的发现结果。

  7. 如有必要,您可以过滤掉其他发现结果。例如,您可以在快速过滤条件面板下方的类别部分,选择需要重置的发现结果的名称,以过滤掉所有其他类别的发现结果。

  8. 选中要重置的发现结果旁边的复选框。您可以选择一个或多个发现结果。

  9. 发现结果的查询结果操作栏上,点击忽略选项,然后选择移除忽略替换项

    所选发现结果的 mute 属性将被设置为 UNDEFINED,并且该发现结果会从发现结果的查询结果面板中被移除。

或者,您也可以在发现结果的详细信息面板中取消忽略相应的发现结果:

  1. 发现结果页面的发现结果的查询结果面板中,选择类别列,然后点击需要取消忽略的发现结果的名称。系统会打开该发现结果的详细信息面板。
  2. 点击执行操作
  3. 执行操作菜单中,选择移除忽略设置

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需将发现结果的忽略状态设置为 UNDEFINED,请使用 gcloud CLI 中的 set-mute 命令:

    gcloud scc findings set-mute FINDING_ID \
     --PARENT=PARENT_ID \
     --location=LOCATION --source=SOURCE_ID \
     --mute=UNDEFINED
    

    替换以下内容:

    • FINDING_ID:您要执行的发现结果的 ID 重置

      如需检索发现结果 ID,请使用 Security Command Center API 列出发现结果。发现结果 ID 是 canonicalName 属性的最后一部分,例如 projects/123456789012/sources/1234567890123456789/findings/5ee30aa342e799e4e1700826de053aa9

    • PARENT:父级资源 (project, folderorganization),区分大小写

    • PARENT_ID:上级组织的 ID。 文件夹或项目

    • LOCATION: 如果启用了数据驻留,则 Security Command Center 从发现结果中移除忽略状态替换项的位置;如果未启用数据驻留,则使用 global

    • SOURCE_ID:来源 ID

      如需了解如何检索来源 ID,请参阅获取来源 ID

Go

以下示例使用 v1 API。修改 v2 的示例,将 v1 替换为 v2,并添加 将 /locations/LOCATION 设置为资源名称。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。

import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
)

// setMute mutes an individual finding, can also unmute or reset the mute state of a finding.
// If a finding is already muted, muting it again has no effect.
// Various mute states are: UNDEFINED/MUTE/UNMUTE.
func setMuteUndefined(w io.Writer, findingPath string) error {
	// findingPath: The relative resource name of the finding. See:
	// https://cloud.google.com/apis/design/resource_names#relative_resource_name
	// Use any one of the following formats:
	//  - organizations/{organization_id}/sources/{source_id}/finding/{finding_id}
	//  - folders/{folder_id}/sources/{source_id}/finding/{finding_id}
	//  - projects/{project_id}/sources/{source_id}/finding/{finding_id}
	// findingPath := fmt.Sprintf("projects/%s/sources/%s/finding/%s", "your-google-cloud-project-id", "source", "finding-id")
	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer client.Close()

	req := &securitycenterpb.SetMuteRequest{
		Name: findingPath,
		Mute: securitycenterpb.Finding_UNDEFINED}

	finding, err := client.SetMute(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to set the specified mute value: %w", err)
	}
	fmt.Fprintf(w, "Mute value for the finding: %s is %s", finding.Name, finding.Mute)
	return nil
}

Java

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。


import com.google.cloud.securitycenter.v1.Finding;
import com.google.cloud.securitycenter.v1.Finding.Mute;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import com.google.cloud.securitycenter.v1.SetMuteRequest;
import java.io.IOException;

public class SetMuteUndefinedFinding {

  public static void main(String[] args) throws IOException {
    // TODO: Replace the variables within {}

    // findingPath: The relative resource name of the finding. See:
    // https://cloud.google.com/apis/design/resource_names#relative_resource_name
    // Use any one of the following formats:
    //  - organizations/{organization_id}/sources/{source_id}/finding/{finding_id}
    //  - folders/{folder_id}/sources/{source_id}/finding/{finding_id}
    //  - projects/{project_id}/sources/{source_id}/finding/{finding_id}
    String findingPath = "{path-to-the-finding}";
    setMuteUndefined(findingPath);
  }

  // Reset mute state of an individual finding.
  // If a finding is already reset, resetting it again has no effect.
  // Various mute states are: MUTE_UNSPECIFIED/MUTE/UNMUTE/UNDEFINED.
  public static Finding setMuteUndefined(String findingPath) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      SetMuteRequest setMuteRequest =
          SetMuteRequest.newBuilder().setName(findingPath).setMute(Mute.UNDEFINED).build();

      Finding finding = client.setMute(setMuteRequest);
      System.out.println(
          "Mute value for the finding " + finding.getName() + " is: " + finding.getMute());
      return finding;
    }
  }
}

Python

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请在资源名称的 /sources/SOURCE_ID 后面添加 /locations/LOCATION,其中 SOURCE_ID 是发出发现结果的 Security Command Center 服务的 ID。

def set_undefined_finding(finding_path: str) -> None:
    """
      Reset mute state of an individual finding.
      Resetting a finding that isn't muted or unmuted has no effect.
      Various mute states are: UNDEFINED/MUTE/UNMUTE.
    Args:
        finding_path: The relative resource name of the finding. See:
        https://cloud.google.com/apis/design/resource_names#relative_resource_name
        Use any one of the following formats:
        - organizations/{organization_id}/sources/{source_id}/finding/{finding_id},
        - folders/{folder_id}/sources/{source_id}/finding/{finding_id},
        - projects/{project_id}/sources/{source_id}/finding/{finding_id}.
    """
    from google.cloud import securitycenter

    client = securitycenter.SecurityCenterClient()

    request = securitycenter.SetMuteRequest()
    request.name = finding_path
    request.mute = securitycenter.Finding.Mute.UNDEFINED

    finding = client.set_mute(request)
    print(f"Reset mute value for the finding: {finding.mute.name}")

REST API

在 Security Command Center API 中,使用 setMute 方法重置发现结果的静音状态。请求正文是一个枚举,用于指明生成的 静音状态。

除非启用数据驻留,否则您可以使用 Security Command Center API。API v2 是 预览版。启用数据驻留后,API v2 是唯一可用的 API。

如果您使用的是 Security Command Center API v1,请使用 v1 端点调用 setMute

POST https://securitycenter.googleapis.com/v1/PARENT/PARENT_ID/sources/SOURCE_ID/findings/FINDING_ID:setMute

{
  "mute": "UNDEFINED"
}

如果您使用的是 Security Command Center API v2,请调用 setMute 方法是使用 v2 端点:

POST https://securitycenter.googleapis.com/v2/PARENT/PARENT_ID/sources/SOURCE_ID/locations/LOCATION/findings/FINDING_ID:setMute

{
  "mute": "UNDEFINED"
}

替换以下内容:

忽略或重置多个现有发现结果

您可以使用 gcloud scc findings bulk-mute gcloud CLI 命令或 Security Command Center API 的 bulkMute 方法,对多个现有发现结果执行以下批量忽略操作:

  • 忽略多个现有发现结果。批量忽略现有发现结果会静态忽略这些发现结果,并替换应用于相应发现结果的所有动态忽略规则。如果 您需要忽略类似的未来发现结果,请创建一个忽略 规则

  • 移除对多个现有发现结果的忽略状态替换项。移除发现结果的忽略状态替换项后,您会将忽略状态从 MUTED(静态忽略)或 UNMUTED(静态取消忽略)重置为 UNDEFINED。如果您要从静态忽略规则迁移到动态忽略规则,此功能会很有用。

通过定义一个 发现结果过滤条件。批量忽略过滤条件并不支持所有发现结果属性。如需查看不受支持的属性列表,请参阅忽略规则不支持的发现结果属性

如果为 Security Command Center 启用数据驻留,则批量忽略操作 限制在它们所在的 Security Command Center 位置范围内 。

如需查看批量忽略发现结果的示例代码,请参阅 批量忽略发现结果

如需批量忽略或重置发现结果,请点击 过程:

控制台

在 Google Cloud 控制台中,您只能通过创建忽略规则来批量忽略发现结果。在 Google Cloud 控制台中,创建忽略规则会隐藏现有和未来的发现结果。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如需批量忽略或重置多个发现结果,请运行 gcloud scc findings bulk-mute 命令:

    gcloud scc findings bulk-mute
    --PARENT=PARENT_ID \
    --location=LOCATION \
    --filter="FILTER" \
    --mute-state=MUTE_STATE
    

    替换以下内容:

    • PARENT:资源层次结构中的范围 organizationfolderproject 等忽略规则的应用。
    • PARENT_ID:父级组织、文件夹或项目的 ID,采用 organizations/123folders/456projects/789 格式指定。
    • LOCATION: 如果启用了数据驻留,则 Security Command Center 位置,用于批量忽略或重置发现结果;如果未启用数据驻留,则使用 global

    • FILTER:您定义来过滤发现结果的表达式。

      例如,如需忽略 internal-test 项目中所有现有的低严重级别 OPEN_FIREWALLPUBLIC_IP_ADDRESS 发现结果,您的过滤条件可以是 "category=\"OPEN_FIREWALL\" OR category=\"PUBLIC_IP_ADDRESS\" AND severity=\"LOW\" AND resource.projectDisplayName=\"internal-test\""

    • MUTE_STATE:该值用于指明 发现结果是静态静音还是未静音。有效值为 MUTEDUNDEFINED。此值默认设置为 MUTED。仅设置此值 UNDEFINED(如果要重置多个现有对象的静音状态) 结果。

Go

以下示例使用 v1 API。修改 v2 的示例,将 v1 替换为 v2,并添加 将 /locations/LOCATION 设置为资源名称。

对于大多数资源,请在资源名称的 /PARENT/PARENT_ID 后面添加 /locations/LOCATION,其中 PARENTorganizationsfoldersprojects

对于发现结果,请在资源名称的 /sources/SOURCE_ID 后面添加 /locations/LOCATION,其中 SOURCE_ID 是发出发现结果的 Security Command Center 服务的 ID。


import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
)

// bulkMute kicks off a long-running operation (LRO) to bulk mute findings for a parent based on a filter.
// The parent can be either an organization, folder, or project. The findings
// matched by the filter will be muted after the LRO is done.
func bulkMute(w io.Writer, parent string, muteRule string) error {
	// parent: Use any one of the following options:
	//             - organizations/{organization_id}
	//             - folders/{folder_id}
	//             - projects/{project_id}
	// parent := fmt.Sprintf("projects/%s", "your-google-cloud-project-id")
	// muteRule: Expression that identifies findings that should be muted.
	// To create mute rules, see:
	// https://cloud.google.com/security-command-center/docs/how-to-mute-findings#create_mute_rules
	// muteRule := "filter-condition"
	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer client.Close()

	req := &securitycenterpb.BulkMuteFindingsRequest{
		Parent: parent,
		Filter: muteRule,
	}

	op, err := client.BulkMuteFindings(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to bulk mute findings: %w", err)
	}
	response, err := op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("failed to bulk mute findings: %w", err)
	}
	fmt.Fprintf(w, "Bulk mute findings completed successfully! %s", response)
	return nil
}

Java

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请在资源名称的 /sources/SOURCE_ID 后面添加 /locations/LOCATION,其中 SOURCE_ID 是发出发现结果的 Security Command Center 服务的 ID。


import com.google.cloud.securitycenter.v1.BulkMuteFindingsRequest;
import com.google.cloud.securitycenter.v1.BulkMuteFindingsResponse;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class BulkMuteFindings {

  public static void main(String[] args) {
    // TODO: Replace the variables within {}

    // parentPath: Use any one of the following options:
    //             - organizations/{organization_id}
    //             - folders/{folder_id}
    //             - projects/{project_id}
    String parentPath = String.format("projects/%s", "your-google-cloud-project-id");

    // muteRule: Expression that identifies findings that should be muted.
    // eg: "resource.project_display_name=\"PROJECT_ID\""
    String muteRule = "{filter-condition}";

    bulkMute(parentPath, muteRule);
  }

  // Kicks off a long-running operation (LRO) to bulk mute findings for a parent based on a filter.
  // The parent can be either an organization, folder, or project. The findings
  // matched by the filter will be muted after the LRO is done.
  public static void bulkMute(String parentPath, String muteRule) {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      BulkMuteFindingsRequest bulkMuteFindingsRequest =
          BulkMuteFindingsRequest.newBuilder()
              .setParent(parentPath)
              // To create mute rules, see:
              // https://cloud.google.com/security-command-center/docs/how-to-mute-findings#create_mute_rules
              .setFilter(muteRule)
              .build();

      // ExecutionException is thrown if the below call fails.
      BulkMuteFindingsResponse response =
          client.bulkMuteFindingsAsync(bulkMuteFindingsRequest).get();
      System.out.println("Bulk mute findings completed successfully! " + response);
    } catch (IOException | InterruptedException | ExecutionException e) {
      System.out.println("Bulk mute findings failed! \n Exception: " + e);
    }
  }
}

Python

以下示例使用 v1 API。如需修改 v2 的示例,请将 v1 替换为 v2,并将 /locations/LOCATION 添加到资源名称中。

对于大多数资源,请将 /locations/LOCATION 添加到 资源名称在 /PARENT/PARENT_ID 之后,其中 PARENTorganizationsfolders、 或 projects

对于发现结果,请将 /locations/LOCATION 添加到资源中 名称在 /sources/SOURCE_ID 之后,其中 SOURCE_IDSecurity Command Center 服务 发出该发现结果。

def bulk_mute_findings(parent_path: str, mute_rule: str) -> None:
    """
      Kicks off a long-running operation (LRO) to bulk mute findings for a parent based on a filter.
      The parent can be either an organization, folder, or project. The findings
      matched by the filter will be muted after the LRO is done.
    Args:
        parent_path: use any one of the following options:
                     - organizations/{organization}
                     - folders/{folder}
                     - projects/{project}
        mute_rule: Expression that identifies findings that should be updated.
    """
    from google.cloud import securitycenter

    client = securitycenter.SecurityCenterClient()

    request = securitycenter.BulkMuteFindingsRequest()
    request.parent = parent_path
    # To create mute rules, see:
    # https://cloud.google.com/security-command-center/docs/how-to-mute-findings#create_mute_rules
    request.filter = mute_rule

    response = client.bulk_mute_findings(request)
    print(f"Bulk mute findings completed successfully! : {response}")

REST API

在 Security Command Center API 中,使用 bulkMute 方法忽略或重置 多个现有发现结果的忽略状态。请求正文包含 用于过滤发现结果的表达式。

除非启用数据驻留,否则您可以使用 Security Command Center API。API v2 是 预览版。当数据驻留 则 API v2 是唯一可用的 API。

如果您使用的是 Security Command Center API v1,请调用 bulkMute 方法是使用 v1 端点:

POST https://securitycenter.googleapis.com/v1/PARENT/PARENT_ID/findings:bulkMute -d

{
  "filter": "FILTER",
  "muteState": "MUTE_STATE"
}

如果您使用的是 Security Command Center API v2,请使用 v2 端点调用 bulkMute

POST https://securitycenter.googleapis.com/v2/PARENT/PARENT_ID/locations/LOCATION/findings:bulkMute -d

{
  "filter": "FILTER",
  "muteState": "MUTE_STATE"
}

替换以下内容:

  • PARENT:父级资源(organizationsfoldersprojects)。
  • PARENT_ID:上级组织的 ID。 文件夹或项目。
  • LOCATION: 如果启用了数据驻留,则 Security Command Center 在其中批量忽略或重置发现结果的位置;如果未启用数据驻留,则使用 global
  • FILTER:您定义要过滤的表达式 结果。

    例如,如需忽略 internal-test 项目中所有现有的低严重级别 OPEN_FIREWALLPUBLIC_IP_ADDRESS 发现结果,您的过滤条件可以是 "category=\"OPEN_FIREWALL\" OR category=\"PUBLIC_IP_ADDRESS\" AND severity=\"LOW\" AND resource.projectDisplayName=\"internal-test\""

  • MUTE_STATE:指示发现结果是否已被忽略的值。有效值为 MUTEDUNDEFINED。此值默认设置为 MUTED。仅将此值设置为 UNDEFINED (如果要重置多个现有发现结果的忽略状态)。

系统会隐藏您选择的资源中与过滤条件完全匹配的所有现有发现结果。发现结果的 mute 特性设置为 MUTED

如果忽略发现结果,则系统不会更改其状态。如果有效的发现结果被忽略,这些发现结果会隐藏起来,但在底层漏洞、配置错误或威胁得以消除之前会保持有效状态。

在 Google Cloud 控制台中查看已忽略的发现结果

您可以在 Google Cloud 控制台中修改发现结果,从而查看已忽略的发现结果 查询以选择包含属性值 mute="MUTED" 的发现结果。

例如,以下发现结果查询仅显示已忽略的有效发现结果:

state="ACTIVE"
AND mute="MUTED"

如需显示所有活跃的发现结果(包括已忽略的发现结果和取消忽略的发现结果),请完全省略查询中的 mute 属性:

state="ACTIVE"

默认情况下,Google Cloud 控制台中的发现结果查询仅显示 未忽略的发现结果。

查看已按忽略规则类型忽略的发现结果

以下部分介绍了如何按忽略规则类型查询有效的发现结果。

如需详细了解如何列出特定发现结果,请参阅过滤发现结果

查询结果已被静态忽略规则忽略

显示被静态忽略规则忽略的有效发现结果 请使用以下查询并检查 muteInitiator 属性来确定发现结果是否已被静态忽略规则忽略。

state="ACTIVE" AND
muteInfo.staticMute.applyTime>=TIMESTAMP AND
muteInfo.staticMute.state="MUTED"

TIMESTAMP 替换为 表示您要查询的时间段的开始时间。相关信息 时间格式,请参阅 gcloud topic datetimes

查询结果已被动态忽略规则忽略

显示被动态忽略规则忽略的有效发现结果 请使用以下查询:

state="ACTIVE" AND
muteUpdateTime>=TIMESTAMP AND
contains(muteInfo.dynamicMuteRecords, muteConfig="PARENT_ID/muteConfigs/CONFIG_ID")

替换以下内容:

  • TIMESTAMP:表示 查询时间段的起始时间有关时间的信息 格式,请参阅 gcloud topic datetimes
  • PARENT_ID:父级组织、文件夹或项目的 ID,采用 organizations/123folders/456projects/789 格式指定。
  • CONFIG_ID:忽略规则的名称。身份证件必须使用 字母数字字符和连字符,长度在 1 到 63 个字符之间。

如需详细了解如何修改发现结果查询,请参阅在信息中心内创建或修改发现结果查询

查找与静音相关的属性

本部分列出了与以下对象的静音状态相关的发现结果属性: 并描述了忽略操作对它们的影响:

  • mute:在创建发现结果时设置为 UNDEFINED 并在以下情况下进行更改:
    • MUTED:发现结果被手动忽略或通过忽略规则忽略。
    • UNMUTED:用户取消忽略发现结果。
  • muteUpdateTime:发现结果被忽略或取消忽略的时间。
  • muteInitiator:忽略某个主账号或忽略规则的标识符 查找。
  • muteInfo:与发现结果相关的忽略信息,例如忽略规则类型(静态或动态)以及发现结果匹配的忽略规则。
  • muteInfo.staticMute:静态静音状态会替换任何动态静音 适用于此发现结果的规则。
    • state:静态忽略状态,可通过直接忽略发现结果或使用静态忽略规则进行设置。
    • applyTime:静态静音状态应用于发现结果的时间。
  • muteInfo.dynamicMuteRecords:与发现结果匹配的动态忽略规则的记录。
    • muteConfig: 静音规则的相对资源名称,由创建记录的静音配置表示。例如 organizations/123/muteConfigs/examplemuteconfig
    • matchTime:动态忽略规则与发现结果匹配的时间。

停止已忽略的发现结果的通知和导出

如果您启用发现结果通知,则与通知过滤条件匹配的新发现结果或更新后的已忽略发现结果仍会导出到 Pub/Sub。

如需停止已忽略的发现结果的导出和通知,请在 NotificationConfig 过滤条件中使用 mute 属性排除已忽略的发现结果。例如,以下过滤条件仅发送有关未忽略或未设置忽略特性的有效发现结果的通知:

FILTER="state=\"ACTIVE\" AND -mute=\"MUTED\""

后续步骤

详细了解如何过滤发现结果通知

浏览您可以使用的更多过滤条件示例