This page provides an overview of custom modules for Event Threat Detection.
You can configure modules, also known as detectors , to process your Cloud Logging stream and detect threats based on parameters you specify. This feature extends the monitoring capabilities of Event Threat Detection and lets you add modules with your own detection parameters, remediation guidance, and severity designations for configurations that the built-in detectors might not support.
Custom modules are useful if you need modules with detection rules that meet the unique needs of your organization. For example, you can add a custom module that creates findings if log entries show that a resource is connected to specific IP addresses or is created in a restricted region.
How custom modules for Event Threat Detection work
Custom modules are a select group of Event Threat Detection detectors that you can configure with your own detection parameters. You can create an Event Threat Detection custom module through the Google Cloud console. Alternatively, you can create one by updating a custom module template and sending the custom module to Security Command Center through the Google Cloud CLI. For information about available templates, see Custom modules and templates .
Custom module templates are written in JSON and let you define detection
parameters that control what events in log entries should trigger findings. For
example, the built-in Malware: Bad IP
detector checks
Virtual Private Cloud Flow Logs for evidence of connections to known suspicious IP
addresses. However, you can enable and modify the Configurable Bad IP
custom
module with a list of suspicious IP addresses that you maintain. If your logs
indicate a connection to any of your supplied IP addresses, a finding is
generated and written to Security Command Center.
Module templates also let you define the severity of threats and provide custom remediation steps to help your security teams fix issues.
With custom modules, you have more control over how Event Threat Detection detects threats and reports findings. Custom modules include your supplied parameters, but still utilize Event Threat Detection's proprietary detection logic and threat intelligence, including tripwire indicator matching. You can implement a broad set of threat models tailored to your organization's unique requirements.
Event Threat Detection custom modules run alongside the built-in detectors. Enabled modules run in real-time mode, which triggers scans whenever new logs are created.
Custom modules and templates
The following table contains a list of supported custom module types, descriptions, required logs, and JSON module templates.
You need these JSON module templates if you want to use the gcloud CLI to create or update custom modules. To see a template, click the expand icon next to its name. For information about using custom modules, see Configure and manage custom modules .
CONFIGURABLE_BAD_IP
{ "metadata": { "severity": " SEVERITY ", "description": " DESCRIPTION ", "recommendation": " RECOMMENDATION " }, "ips": [ " IP_ADDRESS_1 ", " IP_ADDRESS_2 " ] }
Replace the following:
-
SEVERITY
: The severity of findings to be produced by this module. The valid values areLOW
,MEDIUM
,HIGH
, andCRITICAL
. -
DESCRIPTION
: A description of the threat that the custom module detects. This description is used to populate theexplanation
property of each finding generated by this module. -
RECOMMENDATION
: An explanation of the recommended steps that security teams can take to resolve the detected issue. This explanation is used to populate thenextSteps
property of each finding generated by this module.
-
IP_ADDRESS_1
: A publicly-routable IPv4 or IPv6 address or CIDR block to watch for—for example,192.0.2.1
or192.0.2.0/24
. -
IP_ADDRESS_2
: Optional. A publicly-routable IPv4 or IPv6 address or CIDR block to watch for—for example,192.0.2.1
or192.0.2.0/24
.
CONFIGURABLE_BAD_DOMAIN
{ "metadata": { "severity": " SEVERITY ", "description": " DESCRIPTION ", "recommendation": " RECOMMENDATION " }, "domains": [ " DOMAIN_1 "," DOMAIN_2 " ] }
Replace the following:
-
SEVERITY
: The severity of findings to be produced by this module. The valid values areLOW
,MEDIUM
,HIGH
, andCRITICAL
. -
DESCRIPTION
: A description of the threat that the custom module detects. This description is used to populate theexplanation
property of each finding generated by this module. -
RECOMMENDATION
: An explanation of the recommended steps that security teams can take to resolve the detected issue. This explanation is used to populate thenextSteps
property of each finding generated by this module.
-
DOMAIN_1
: A domain name to watch for—for example,example.com
. A value oflocalhost
is not permitted. Unicode and Punycode domain names are normalized. For example, 例子.example and xn--fsqu00a.example are equivalent. -
DOMAIN_2
: Optional. A domain name to watch for—for example,example.com
. A value oflocalhost
is not permitted. Unicode and Punycode domain names are normalized. For example, 例子.example and xn--fsqu00a.example are equivalent.
CONFIGURABLE_ALLOWED_COMPUTE_ENGINE_INSTANCE_TYPE
Admin Activity logs
{ "metadata": { "severity": " SEVERITY ", "description": " DESCRIPTION ", "recommendation": " RECOMMENDATION " }, "instances": [ { "series": " SERIES ", "cpus": { "minimum": MINIMUM_NUMBER_OF_CPUS , "maximum": MAXIMUM_NUMBER_OF_CPUS }, "ram_mb": { "minimum": MINIMUM_RAM_SIZE , "maximum": MAXIMUM_RAM_SIZE }, "gpus": { "minimum": MINIMUM_NUMBER_OF_GPUS , "maximum": MAXIMUM_NUMBER_OF_GPUS }, "projects": [ " PROJECT_ID_1 ", " PROJECT_ID_2 " ], "regions": [ " REGION_1 ", " REGION_2 " ] }, { "series": " ... ", ... "regions": [ ... ] } ] }
Replace the following:
-
SEVERITY
: The severity of findings to be produced by this module. The valid values areLOW
,MEDIUM
,HIGH
, andCRITICAL
. -
DESCRIPTION
: A description of the threat that the custom module detects. This description is used to populate theexplanation
property of each finding generated by this module. -
RECOMMENDATION
: An explanation of the recommended steps that security teams can take to resolve the detected issue. This explanation is used to populate thenextSteps
property of each finding generated by this module.
-
SERIES
: Optional. The Compute Engine machine series—for example,C2
. If empty, the module permits all series. For more information, see Machine families resource and comparison guide . -
MINIMUM_NUMBER_OF_CPUS
: Optional. The minimum number of CPUs to allow. If not present, there is no minimum. Must not be negative. -
MAXIMUM_NUMBER_OF_CPUS
: Optional. The maximum number of CPUs to allow. If not present, there is no maximum. Must be greater than or equal tominimum
and less than or equal to 1,000. -
MINIMUM_RAM_SIZE
: Optional. The minimum RAM size to allow, in megabytes. If not present, there is no minimum. -
MAXIMUM_RAM_SIZE
: Optional. The maximum RAM size to allow, in megabytes. If not present, there is no maximum. Must be greater than or equal tominimum
and less than or equal to 10,000,000. -
MINIMUM_NUMBER_OF_GPUS
: Optional. The minimum number of GPUs to allow. If not present, there is no minimum. Must not be negative. -
MAXIMUM_NUMBER_OF_GPUS
: Optional. The maximum number of GPUs to allow. If not present, there is no maximum. Must be greater than or equal tominimum
and less than or equal to 100. -
PROJECT_ID_1
: Optional. The ID of a project that you want to apply this module to—for example,projects/example-project
. If empty or unset, the module is applied to instances created in all projects within the current scope. -
PROJECT_ID_2
: Optional. The ID of a project that you want to apply this module to—for example,projects/example-project
. -
REGION_1
: Optional. A region where you want to apply this module—for example,us-central1
. If empty or unset, the module is applied to instances created in all regions. -
REGION_2
: Optional. A region where you want to apply this module—for example,us-central1
.
CONFIGURABLE_ALLOWED_COMPUTE_ENGINE_SOURCE_IMAGE
Admin Activity logs
{ "metadata": { "severity": " SEVERITY ", "description": " DESCRIPTION ", "recommendation": " RECOMMENDATION " }, "patterns": [ { "pattern": " PATTERN_1 ", "name": " NAME_1 " }, { "pattern": " PATTERN_2 ", "name": " NAME_2 " } ] }
Replace the following:
-
SEVERITY
: The severity of findings to be produced by this module. The valid values areLOW
,MEDIUM
,HIGH
, andCRITICAL
. -
DESCRIPTION
: A description of the threat that the custom module detects. This description is used to populate theexplanation
property of each finding generated by this module. -
RECOMMENDATION
: An explanation of the recommended steps that security teams can take to resolve the detected issue. This explanation is used to populate thenextSteps
property of each finding generated by this module.
-
PATTERN_1
: An RE2 regular expression to check images against—for example,debian-image-1
. If an image is used to create a Compute Engine instance and the name of that image isn't matched by any of the specified regular expressions, a finding is generated. -
NAME_1
: A descriptive name for this pattern—for example,first-image
. -
PATTERN_2
: Optional. Another RE2 regular expression to check images against—for example,debian-image-2
. -
NAME_2
: Optional. A descriptive name for the second pattern—for example,second-image
.
CONFIGURABLE_ALLOWED_COMPUTE_ENGINE_REGION
Admin Activity logs
{ "metadata": { "severity": " SEVERITY ", "description": " DESCRIPTION ", "recommendation": " RECOMMENDATION " }, "regions": [ { "region": " REGION_1 " }, { "region": " REGION_2 " } ] }
Replace the following:
-
SEVERITY
: The severity of findings to be produced by this module. The valid values areLOW
,MEDIUM
,HIGH
, andCRITICAL
. -
DESCRIPTION
: A description of the threat that the custom module detects. This description is used to populate theexplanation
property of each finding generated by this module. -
RECOMMENDATION
: An explanation of the recommended steps that security teams can take to resolve the detected issue. This explanation is used to populate thenextSteps
property of each finding generated by this module.
-
REGION_1
: The name of a region to permit—for example,us-west1
. If a Compute Engine instance is created in a region that is not specified in the list, Event Threat Detection generates a finding. -
REGION_2
: Optional. The name of a region to permit—for example,us-central1
. If a Compute Engine instance is created in a region that is not specified in the list, Event Threat Detection generates a finding.
CONFIGURABLE_BREAKGLASS_ACCOUNT_USED
{ "metadata": { "severity": " SEVERITY ", "description": " DESCRIPTION ", "recommendation": " RECOMMENDATION " }, "accounts": [ " BREAKGLASS_ACCOUNT_1 ", " BREAKGLASS_ACCOUNT_2 " ] }
Replace the following:
-
SEVERITY
: The severity of findings to be produced by this module. The valid values areLOW
,MEDIUM
,HIGH
, andCRITICAL
. -
DESCRIPTION
: A description of the threat that the custom module detects. This description is used to populate theexplanation
property of each finding generated by this module. -
RECOMMENDATION
: An explanation of the recommended steps that security teams can take to resolve the detected issue. This explanation is used to populate thenextSteps
property of each finding generated by this module.
-
BREAKGLASS_ACCOUNT_1
: A breakglass account to watch for—for example,test@example.com
. A finding is generated if this account is used for an action that is recorded in a Cloud Audit Logs entry. -
BREAKGLASS_ACCOUNT_2
: Optional. A breakglass account to watch for—for example,test@example.com
. A finding is generated if this account is used for an action that is recorded in a Cloud Audit Logs entry.
CONFIGURABLE_UNEXPECTED_ROLE_GRANT
Admin Activity logs
{ "metadata": { "severity": " SEVERITY ", "description": " DESCRIPTION ", "recommendation": " RECOMMENDATION " }, "roles": [" ROLE_1 ", " ROLE_2 "] }
Replace the following:
-
SEVERITY
: The severity of findings to be produced by this module. The valid values areLOW
,MEDIUM
,HIGH
, andCRITICAL
. -
DESCRIPTION
: A description of the threat that the custom module detects. This description is used to populate theexplanation
property of each finding generated by this module. -
RECOMMENDATION
: An explanation of the recommended steps that security teams can take to resolve the detected issue. This explanation is used to populate thenextSteps
property of each finding generated by this module.
-
ROLE_1
: An IAM role to watch for—for example,roles/owner
. A finding is generated if this role is granted. -
ROLE_2
: Optional. An IAM role to watch for—for example,roles/editor
. A finding is generated if this role is granted.
CONFIGURABLE_CUSTOM_ROLE_WITH_PROHIBITED_PERMISSION
Admin Activity logs
{ "metadata": { "severity": " SEVERITY ", "description": " DESCRIPTION ", "recommendation": " RECOMMENDATION " }, "permissions": [ " PERMISSION_1 ", " PERMISSION_2 " ] }
Replace the following:
-
SEVERITY
: The severity of findings to be produced by this module. The valid values areLOW
,MEDIUM
,HIGH
, andCRITICAL
. -
DESCRIPTION
: A description of the threat that the custom module detects. This description is used to populate theexplanation
property of each finding generated by this module. -
RECOMMENDATION
: An explanation of the recommended steps that security teams can take to resolve the detected issue. This explanation is used to populate thenextSteps
property of each finding generated by this module.
-
PERMISSION_1
: An IAM permission to watch for—for example,storage.buckets.list
. Event Threat Detection generates a finding if a custom IAM role containing this permission is granted to a principal. -
PERMISSION_2
: Optional. An IAM permission to watch for—for example,storage.buckets.get
. Event Threat Detection generates a finding if a custom IAM role containing this permission is granted to a principal.
CONFIGURABLE_UNEXPECTED_CLOUD_API_CALL
{ "metadata": { "severity": " SEVERITY ", "description": " DESCRIPTION ", "recommendation": " RECOMMENDATION " }, "caller_pattern": " CALLER_PATTERN ", "method_pattern": " METHOD_PATTERN ", "resource_pattern": " RESOURCE_PATTERN " }
Replace the following:
-
SEVERITY
: The severity of findings to be produced by this module. The valid values areLOW
,MEDIUM
,HIGH
, andCRITICAL
. -
DESCRIPTION
: A description of the threat that the custom module detects. This description is used to populate theexplanation
property of each finding generated by this module. -
RECOMMENDATION
: An explanation of the recommended steps that security teams can take to resolve the detected issue. This explanation is used to populate thenextSteps
property of each finding generated by this module.
-
CALLER_PATTERN
: An RE2 regular expression to check principals against. For example,.*
matches any principal. -
METHOD_PATTERN
: An RE2 regular expression to check methods against—for example,^cloudsql\\.instances\\.export$
. -
RESOURCE_PATTERN
: An RE2 regular expression to check resources against—for example,example-project
.
Pricing and quota
This feature is free of charge to Security Command Center Premium customers.
Event Threat Detection custom modules are subject to quota limits.
The default quota limit for the creation of custom modules is 200.
API calls to custom module methods are also subject to quota limits. The following table shows the default quota limits for custom module API calls.
API call type | Limit |
---|---|
Get, List | 1,000 API calls per minute, per organization |
Create, Update, Delete | 60 API calls per minute, per organization |
Module size limits
Each Event Threat Detection custom module has a size limit of 6 MB.
Rate limits
The following rate limits apply:
- 30 findings per custom module per hour.
- 200 custom module findings per parent resource (organization or project) per hour. Each finding counts towards either an organization or project, depending on which level the source custom module was created in.
These limits can't be increased.
What's next
- Learn how to create and manage custom modules .