配置 Cloud IDS

按照以下说明为您的应用配置 Cloud IDS。如需了解 Cloud IDS 的概念性信息,请参阅 Cloud IDS 概览

准备工作

如要配置 Cloud IDS,必须先满足以下要求。

设置 Cloud IDS IAM 权限

Cloud IDS 提供多个 Identity and Access Management (IAM) 角色。可以使用示例命令向主账号授予必要的 IAM 权限。

  • Cloud IDS Admin 角色 (roles/ids.admin):具有此角色的项目主账号可以创建 IDS 端点。如果您是项目所有者,那么您已经拥有此权限,无需明确的 ids.admin 角色即可创建 IDS 端点。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --role=roles/ids.admin \
       --member=user:USER_NAME ;
    

    此角色允许执行以下操作:

    • 创建端点
    • 删除端点
    • 获取端点
    • 列出端点
  • Cloud IDS Viewer 角色 (roles/ids.viewer):具有此角色的项目查看者和主账号对 IDS 端点具有只读权限。如果您是项目所有者、编辑者或查看者,则您已拥有此权限。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --role=roles/ids.viewer \
       --member=user:USER_NAME ;
    
  • Compute Packet Mirroring User 角色 (roles/compute.packetMirroringUser):需要此角色才能将数据包镜像政策关联到 IDS 端点。如果您拥有 compute.securityAdmincontainer.serviceAgent 角色,则已经拥有此权限。如需详细了解此角色,请参阅 IAM 基本角色和预定义角色参考文档

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --role=roles/compute.packetMirroringUser \
       --member=user:USER_NAME ;
    
  • Logs Viewer 角色 (roles/logging.viewer):需要额外授予此角色才能查看近期威胁,这是 Cloud IDS 的一项关键核心功能。如需详细了解此角色,请参阅访问权限控制指南

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --role=roles/logging.viewer \
       --member=user:USER_NAME ;
    

此外,还需要以下其他权限:

  • compute.regions.list
  • compute.zones.list

设置专用服务访问通道

如要创建 IDS 端点,必须启用 Service Networking API,并为虚拟私有云 (VPC) 网络设置网络对等互连。此操作可以使用Google Cloud 控制台或 Google Cloud CLI 来完成,并且对于每个客户项目,此操作只需执行一次。分配 IP 地址范围时,该范围必须是符合 RFC 1918 规范的专用 IP 地址范围(10.0.0.0/8172.16.0.0/12192.168.0.0/16),否则端点创建会失败。

请按以下步骤设置专用服务访问通道:

  1. 使用以下命令启用 Service Networking API。将 PROJECT_ID 替换为您的项目 ID。

    gcloud services enable servicenetworking.googleapis.com \
     --project=PROJECT_ID
    
  2. 如果您尚未在网络中分配 IP 地址范围,则必须在 VPC 网络中为 Google 服务分配 IP 范围。在以下命令中,您可以省略 addresses 字段,Google Cloud 会在您的 VPC 网络中选择一个未使用的地址范围:

    gcloud compute addresses create RESERVED_RANGE_NAME \
      --global \
      --purpose=VPC_PEERING \
      --addresses=192.168.0.0 \
      --prefix-length=16 \
      --description="DESCRIPTION" \
      --network=VPC_NETWORK
    

    替换以下内容:

    • RESERVED_RANGE_NAME:已分配范围的名称,例如 my-allocated-range

    • DESCRIPTION:对该范围的描述,例如 allocated for my-service

    • VPC_NETWORK:您的 VPC 网络的名称,例如 my-vpc-network

  3. 创建与服务提供方之间的专用连接。专用连接在您的 VPC 网络和服务提供方的网络之间建立 VPC 网络对等互连连接。

    如果您已有专用连接,请使用 gcloud services vpc-peerings update 命令对其进行更新:

    gcloud services vpc-peerings update \
      --service=servicenetworking.googleapis.com \
      --ranges=RESERVED_RANGE_NAME \
      --network=VPC_NETWORK \
      --project=PROJECT_ID
    

    如果您还没有专用连接,请使用 gcloud services vpc-peerings connect 命令。此命令会启动一个长时间运行的操作,用于返回操作名称。

    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --ranges=RESERVED_RANGE_NAME \
      --network=VPC_NETWORK \
      --project=PROJECT_ID
    

    替换以下内容:

    • RESERVED_RANGE_NAME:一个或多个已分配范围的名称。

    • VPC_NETWORK:您的 VPC 网络的名称

    • PROJECT_ID:包含 VPC 网络的项目的 ID。

    如需检查操作是否成功,请使用 gcloud services vpc-peerings operations describe 命令

    gcloud services vpc-peerings operations describe \
        --name=OPERATION_NAME
    

    OPERATION_NAME 替换为从上一步返回的操作名称。

针对要监控的每个 VPC 网络,重复第 2 步和第 3 步。

可选:启用 VPC Service Controls

启用专用服务访问通道后,您可以选择在 Cloud IDS 上启用 VPC Service Controls。启用后,您可以运行 services vpc-peerings enable-vpc-service-controls 命令,为所有对等互连连接启用 VPC Service Controls:

gcloud services vpc-peerings enable-vpc-service-controls \
    --service=servicenetworking.googleapis.com \
    --network=VPC_NETWORK \
    --project=PROJECT_ID

替换以下内容:

  • VPC_NETWORK:您的 VPC 网络的名称

  • PROJECT_ID:包含 VPC 网络的项目的 ID。

创建 Cloud IDS 端点

我们建议您为部署了工作负载的每个区域创建一个 IDS 端点。您也可以为每个区域创建多个 IDS 端点。请按以下步骤操作,创建 IDS 端点并为其分配 IDS 服务配置文件。

控制台

  1. 在 Google Cloud 控制台中,前往 IDS 端点

    前往“IDS 端点”

配置端点:

  1. 点击创建端点
  2. 端点名称字段中输入名称。
  3. 可选:在说明字段中输入说明。
  4. 点击网络下拉列表,然后选择要让 Cloud IDS 检查的网络。
  5. 区域可用区下拉列表中,选择您的网络或子网所在的区域和可用区。
  6. 点击继续

选择 Cloud IDS 服务配置文件:

  1. 点击选择 IDS 服务配置文件
  2. 最低威胁严重级别下,选择所需的提醒级别。
  3. 点击创建。创建过程可能需要 10-15 分钟。

创建 IDS 端点后,将数据包镜像政策关联到 IDS 端点:

  1. 选择端点标签页。
  2. 点击 IDS 端点旁边的关联
  3. 政策名称字段中,为数据包镜像政策输入一个名称。
  4. 点击下一步
  5. 选择要镜像的子网或实例。您可以选择多个子网和实例。
  6. 点击下一步
  7. 确定您是要镜像所有流量,还是要过滤流量:
    1. 如果您想镜像所有流量,请确保已选择镜像所有流量
    2. 如果您想根据协议、IP 地址范围或入站流量/出站流量来过滤流量,请选择镜像过滤的流量
      1. 选择允许所有协议允许特定协议
      2. 选择允许所有 IP 范围允许特定 IP 范围
  8. 点击提交。端点创建完毕。

现在,您可以检查是否已生成任何威胁日志。以下是可选步骤:

  1. 点击 IDS 威胁标签页。
  2. 点击某个威胁名称,即可查看相应威胁的威胁详情页面。
  3. 返回到威胁标签页。
  4. 点击 IDS 端点右侧的 菜单,然后选择查看威胁日志

gcloud

可选标志

本部分中的命令可能包含以下部分或全部可选标志:

--no-async
等待正在进行的操作完成,而不是立即返回。
--filter=EXPRESSION
将布尔值过滤条件表达式应用于要列出的每个资源项。如果表达式的计算结果为 True,则会列出该项。如需详细了解过滤条件表达式并查看示例,请运行 $ gcloud topic filters。此标志与按以下顺序应用的其他标志交互:--flatten--sort-by--filter--limit
--limit=LIMIT
要列出的资源数量上限。默认值为无限制。此标志与按以下顺序应用的其他标志交互:--flatten--sort-by--filter--limit
--page-size=PAGE_SIZE
Cloud IDS 会将资源列表输出结果分组到页面中。此标志用于指定每页的资源数量上限。如果服务支持分页,则默认值由服务确定;否则,默认值为无限制(不分页)。可以根据服务的不同,在 --filter--limit 之前或之后应用分页。
--sort-by=[FIELD,…]
要排序的资源字段键名的英文逗号分隔列表。默认顺序是升序。 为字段添加表示该字段以降序排列的前缀 ``~´´。此标志与按以下顺序应用的其他标志交互:--flatten--sort-by--filter--limit
--uri
输出资源 URI 列表,而不是默认输出。
--threat-exceptions
要从此端点的提醒中排除的威胁 ID 的逗号分隔列表。每个端点最多只能有 99 个例外。

说明

如需创建新的 IDS 端点,请执行以下步骤:

  1. 使用 gcloud ids endpoints create 命令。将 ENDPOINT_NAMEVPC_NETWORKZONESEVERITY 替换为与您的应用匹配的信息。

    gcloud ids endpoints create ENDPOINT_NAME \
      --network=VPC_NETWORK \
      --zone=ZONE \
      --severity=SEVERITY \
     [--no-async] \
     [GCLOUD_WIDE_FLAG...]
    
  2. 严重级别标志是必需的,并且采用以下值之一:

    • 信息
    • HIGH
    • 严重
  3. 创建端点后,请将数据包镜像政策关联到该端点。首先,使用以下命令从 endpoint_forwarding_rule 字段中获取网址:

    gcloud ids endpoints describe ENDPOINT_NAME
    
  4. 使用以下命令来创建数据包镜像政策:

    gcloud compute packet-mirrorings create POLICY_NAME \
    --region=REGION --collector-ilb=ENDPOINT_FORWARDING_RULE \
    --network=VPC_NETWORK --mirrored-subnets=SUBNET
    
  5. 数据包镜像有多个可选标志,包括可用于根据协议、IP 地址范围或入站流量/出站流量过滤流量的标志。如需详细了解这些可选标志,请参阅数据包镜像参考文档

如需删除 IDS 端点,请使用命令 gcloud ids endpoints delete。将 ENDPOINT_NAMEPROJECT_IDZONE 替换为与您的应用匹配的信息:

gcloud ids endpoints delete ENDPOINT_NAME \
   [--project=PROJECT_ID] \
   [--zone=ZONE] \
   [--no-async] \
   [GCLOUD_WIDE_FLAG...]

如需描述 IDS 端点,请使用命令 gcloud ids endpoints describe。将 ENDPOINT_NAMEPROJECT_IDZONE 替换为与您的应用匹配的信息:

gcloud ids endpoints describe ENDPOINT_NAME \
   [--project=PROJECT_ID] \
   [--zone=ZONE] \
   [GCLOUD_WIDE_FLAG...]

如需列出 IDS 端点,请使用命令 gcloud ids endpoints list

gcloud ids endpoints list /
    [--filter=EXPRESSION] \
    [--limit=LIMIT] \
    [--page-size=PAGE_SIZE] \
    [--sort-by=[FIELD,...]] \
    [--uri] \
    [GCLOUD_WIDE_FLAG...]

API

Cloud IDS 端点资源具有以下字段:

字段 类型 字段说明
createTime 字符串 [输出专用] 创建时间戳,采用 RFC 3339 文本格式。
updateTime 字符串 [输出专用] 上次更新时间戳,采用 RFC 3339 文本格式。
name 字符串 [输出专用] 端点的名称,格式为 projects/{project_id}/locations/{locationId}/endpoints/{endpointId}
网络 字符串 连接到 IDS 端点的 VPC 网络的名称。此字段可以是 VPC 网络名称本身(如 "src-net"),也可以是网络的完整网址(如 "projects/{project_id}/global/networks/src-net")。创建端点时,这是必填字段。
严重程度 字符串

端点报告的最低提醒严重级别。 可能的值如下所示:

  • 信息
  • HIGH
  • 严重

创建端点时,这是必填字段。

说明 字符串 端点的可选说明。
endpoint_forwarding_rule 字符串 [输出专用] 数据包镜像要将流量发送到的端点网络地址的网址。
端点 字符串 [输出专用] 端点网络入口点的内部 IP 地址。

如需创建 Cloud IDS 端点,请使用如下所示的 HTTP POST 请求,并根据需要替换变量。ENDPOINT_NAME 必须介于 1-63 个字符之间;只能包含小写字母、数字和连字符;必须以小写字母开头;不能以连字符结尾。

POST https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints?endpointId=ENDPOINT_NAME
{
    "network": "NETWORK_NAME",
    "severity": "SEVERITY_LEVEL",
}

如需删除 Cloud IDS 端点,请使用如下所示的 HTTP DELETE 请求,并根据需要替换变量:

DELETE https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints?endpointId=ENDPOINT_NAME

如需获取 Cloud IDS 端点,请使用如下所示的 HTTP GET 请求,并根据需要替换变量:

GET https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints?endpointId=ENDPOINT_NAME

如需列出某个可用区中的所有 Cloud IDS 端点,请使用如下所示的 HTTP GET 请求,并根据需要替换变量:

GET https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints

或者,如要列出所有可用区中的所有 Cloud IDS 端点,可以将 ZONE 替换为连字符,如下所示:

GET https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/-/endpoints

可选:配置威胁例外情况

在创建或更新 Cloud IDS 端点时,您可以使用 --threat-exceptions 标志停用无关或其他不必要的威胁 ID。以下示例更新了现有的 Cloud IDS 端点 ENDPOINT_NAME,以豁免威胁 ID THREAT_ID1THREAT_ID2

   gcloud ids endpoints update ENDPOINT_NAME 
--threat-exceptions=THREAT_ID1,THREAT_ID2

后续步骤