配置 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 端点的只读权限。如果您是 Project Owner、Project Editor 或 Project Viewer,那么您已经拥有此权限。

    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 Endpoints

配置端点:

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

选择 Cloud IDS 服务配置文件:

  1. 点击 Select IDS service profile(选择 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. 返回 Threats(威胁)标签页。
  4. 点击 IDS 端点右侧的 菜单,然后选择查看威胁日志

gcloud

可选标志

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

--no-async
等待正在进行的操作完成,而不是立即返回。
--filter=EXPRESSION
对要列出的每个资源项应用布尔过滤条件 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. 严重级别标志是必需的,采用以下值之一:

    • 信息
    • MEDIUM
    • 严重
  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")。创建端点时,此字段为必填字段。
和程度上减少 字符串

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

  • 信息
  • MEDIUM
  • 严重

创建端点时,此字段为必填字段。

说明 字符串 端点的说明(可选)。
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

后续步骤