Control: 2.9 Ensure that the log metric filter and alerts exist for VPC network changes
Description
It is recommended that a metric filter and alarm be established for Virtual Private Cloud (VPC) changes.
It is possible to have more than one VPC within a project. In addition, it is also possible to create a peer connection between two VPCs enabling network traffic to route between VPCs.
Monitoring changes to a VPC will help ensure VPC traffic flow is not getting impacted.
Remediation
From Console
Create the prescribed log metric:
- Go to
Logging/Logs-based Metrics
by visiting https://console.cloud.google.com/logs/metrics and click "CREATE METRIC". - Click the down arrow symbol on
Filter Bar
at the rightmost corner and selectConvert to Advanced Filter
. - Clear any text and add:
resource.type=gce_networkAND (protoPayload.methodName="beta.compute.networks.insert"OR protoPayload.methodName="beta.compute.networks.patch"OR protoPayload.methodName="v1.compute.networks.delete"OR protoPayload.methodName="v1.compute.networks.removePeering" OR protoPayload.methodName="v1.compute.networks.addPeering")
- Click
Submit Filter
. Display logs appear based on the filter text entered by the user. - In the
Metric Editor
menu on the right, fill out the name field. SetUnits
to1
(default) andType
toCounter
. This ensures that the log metric counts the number of log entries matching the user's advanced logs query. - Click
Create Metric
.
Create the prescribed alert policy:
- Identify the newly created metric under the section
User-defined Metrics
at https://console.cloud.google.com/logs/metrics. - Click the 3-dot icon in the rightmost column for the new metric and select
Create alert from Metric
. A new page appears. - Fill out the alert policy configuration and click
Save
. Choose the alerting threshold and configuration that makes sense for the user's organization. For example, a threshold of 0 for the most recent value will ensure that a notification is triggered for every owner change in the project:
Set `Aggregator` to `Count`Set `Configuration`:- Condition: above- Threshold: 0- For: most recent value
- Configure the desired notifications channels in the section
Notifications
. - Name the policy and click
Save
.
From Command Line
Create the prescribed Log Metric:
- Use the command: gcloud logging metrics create
Create the prescribed Alert Policy:
- Use the command: gcloud alpha monitoring policies create
Usage
Run the control in your terminal:
powerpipe control run gcp_compliance.control.cis_v200_2_9
Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run gcp_compliance.control.cis_v200_2_9 --share
SQL
This control uses a named query:
with filter_data as ( select m.project as project, display_name alert_name, count(m.name) metric_name from gcp_monitoring_alert_policy, jsonb_array_elements(conditions) as filter_condition join gcp_logging_metric m on m.filter ~ '\s*resource\.type\s*=\s*gce_network\s*AND\s*\(\s*protoPayload\.methodName\s*=\s*"beta\.compute\.networks\.insert"\s*OR\s*protoPayload\.methodName\s*=\s*"beta\.compute\.networks\.patch"\s*OR\s*protoPayload\.methodName\s*=\s*"v1\.compute\.networks\.delete"\s*OR\s*protoPayload\.methodName\s*=\s*"v1\.compute\.networks\.removePeering"\s*OR\s*protoPayload\.methodName\s*=\s*"v1\.compute\.networks\.addPeering"\s*\)' and filter_condition -> 'conditionThreshold' ->> 'filter' like '%metric.type="' || m.metric_descriptor_type || '"%' where enabled group by m.project, display_name, m.name)select 'https://cloudresourcemanager.googleapis.com/v1/projects/' || project_id resource, case when d.metric_name > 0 then 'ok' else 'alarm' end as status, case when d.metric_name > 0 then 'Log metric and alert exist for network changes.' else 'Log metric and alert do not exist for network changes.' end as reason , project_id as projectfrom gcp_project as p left join filter_data as d on d.project = p.name