solutions/gke/configconnector/gke-setup/logging-monitoring/alerts.yaml (207 lines of code) (raw):
# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#########
# GKE Security Posture Dashboard Alert Policies
# https://cloud.google.com/kubernetes-engine/docs/concepts/about-security-posture-dashboard
# GKE Security Posture Critical Severity Alert Policy
# SI-4(5) - Provide real-time alerts when policy violation occurs.
apiVersion: monitoring.cnrm.cloud.google.com/v1beta1
kind: MonitoringAlertPolicy
metadata:
name: project-id-gke-security-posture-critical-severity-alert # kpt-set: ${project-id}-gke-security-posture-critical-severity-alert
namespace: client-name-logging # kpt-set: ${client-name}-logging
annotations:
config.kubernetes.io/depends-on: resourcemanager.cnrm.cloud.google.com/namespaces/client-name-projects/Project/${project-id} # kpt-set: resourcemanager.cnrm.cloud.google.com/namespaces/${client-name}-projects/Project/${project-id}
cnrm.cloud.google.com/project-id: project-id # kpt-set: ${project-id}
spec:
alertStrategy:
# auto close after 7 days
autoClose: 604800s
notificationRateLimit:
# one notification per day
period: 86400s
combiner: OR
conditions:
- conditionMatchedLog:
filter: |-
LOG_ID("containersecurity.googleapis.com/finding")
jsonPayload.severity="SEVERITY_CRITICAL"
labelExtractors:
# This extracts the name of the affected resource
namespace: EXTRACT(jsonPayload.resourceName)
displayName: Log match condition
name: gke-security-posture-critical-severity-alert
# SI-4(5)
displayName: GKE Security Posture Critical Severity
documentation:
content: |-
A critical severity alert, ${policy.display_name}, has been triggered for the ${resource.label.cluster_name} GKE cluster hosted inside the ${resource.project} project.
-
The affected workload is ${log.extracted_label.namespace}. Please consult the GKE Security Posture Dashboard and Concerns page for more information.
enabled: true
notificationChannels:
- name: project-id-gke-monitoring-group-notify # kpt-set: ${project-id}-gke-monitoring-group-notify
---
# GKE Security Posture High Severity Alert Policy
apiVersion: monitoring.cnrm.cloud.google.com/v1beta1
kind: MonitoringAlertPolicy
metadata:
name: project-id-gke-security-posture-high-severity-alert # kpt-set: ${project-id}-gke-security-posture-high-severity-alert
namespace: client-name-logging # kpt-set: ${client-name}-logging
annotations:
config.kubernetes.io/depends-on: resourcemanager.cnrm.cloud.google.com/namespaces/client-name-projects/Project/${project-id} # kpt-set: resourcemanager.cnrm.cloud.google.com/namespaces/${client-name}-projects/Project/${project-id}
cnrm.cloud.google.com/project-id: project-id # kpt-set: ${project-id}
spec:
alertStrategy:
# auto close after 7 days
autoClose: 604800s
notificationRateLimit:
# one notification per day
period: 86400s
combiner: OR
conditions:
- conditionMatchedLog:
filter: |-
LOG_ID("containersecurity.googleapis.com/finding")
jsonPayload.severity="SEVERITY_HIGH"
labelExtractors:
# This extracts the name of the affected resource
namespace: EXTRACT(jsonPayload.resourceName)
displayName: Log match condition
name: gke-security-posture-high-severity-alert
displayName: GKE Security Posture High Severity
# SI-4(5)
documentation:
content: |-
A high severity alert, ${policy.display_name}, has been triggered for the ${resource.label.cluster_name} GKE cluster hosted inside the ${resource.project} project.
-
The affected workload is ${log.extracted_label.namespace}. Please consult the GKE Security Posture Dashboard and Concerns page for more information.
enabled: true
notificationChannels:
- name: project-id-gke-monitoring-group-notify # kpt-set: ${project-id}-gke-monitoring-group-notify
---
# GKE Security Posture Medium Severity Alert Policy
apiVersion: monitoring.cnrm.cloud.google.com/v1beta1
kind: MonitoringAlertPolicy
metadata:
name: project-id-gke-security-posture-medium-severity-alert # kpt-set: ${project-id}-gke-security-posture-medium-severity-alert
namespace: client-name-logging # kpt-set: ${client-name}-logging
annotations:
config.kubernetes.io/depends-on: resourcemanager.cnrm.cloud.google.com/namespaces/client-name-projects/Project/${project-id} # kpt-set: resourcemanager.cnrm.cloud.google.com/namespaces/${client-name}-projects/Project/${project-id}
cnrm.cloud.google.com/project-id: project-id # kpt-set: ${project-id}
spec:
alertStrategy:
# auto close after 7 days
autoClose: 604800s
notificationRateLimit:
# one notification per day
period: 86400s
combiner: OR
conditions:
- conditionMatchedLog:
filter: |-
LOG_ID("containersecurity.googleapis.com/finding")
jsonPayload.severity="SEVERITY_MEDIUM"
labelExtractors:
# This extracts the name of the affected resource
namespace: EXTRACT(jsonPayload.resourceName)
displayName: Log match condition
name: gke-security-posture-medium-severity-alert
displayName: GKE Security Posture Medium Severity
# SI-4(5)
documentation:
content: |-
A medium severity alert, ${policy.display_name}, has been triggered for the ${resource.label.cluster_name} GKE cluster hosted inside the ${resource.project} project.
-
The affected workload is ${log.extracted_label.namespace}. Please consult the GKE Security Posture Dashboard and Concerns page for more information.
enabled: true
notificationChannels:
- name: project-id-gke-monitoring-group-notify # kpt-set: ${project-id}-gke-monitoring-group-notify
---
# GKE Security Posture Low Severity Alert Policy
apiVersion: monitoring.cnrm.cloud.google.com/v1beta1
kind: MonitoringAlertPolicy
metadata:
name: project-id-gke-security-posture-low-severity-alert # kpt-set: ${project-id}-gke-security-posture-low-severity-alert
namespace: client-name-logging # kpt-set: ${client-name}-logging
annotations:
config.kubernetes.io/depends-on: resourcemanager.cnrm.cloud.google.com/namespaces/client-name-projects/Project/${project-id} # kpt-set: resourcemanager.cnrm.cloud.google.com/namespaces/${client-name}-projects/Project/${project-id}
cnrm.cloud.google.com/project-id: project-id # kpt-set: ${project-id}
spec:
alertStrategy:
# auto close after 7 days
autoClose: 604800s
notificationRateLimit:
# one notification per day
period: 86400s
combiner: OR
conditions:
- conditionMatchedLog:
filter: |-
LOG_ID("containersecurity.googleapis.com/finding")
jsonPayload.severity="SEVERITY_LOW"
labelExtractors:
# This extracts the name of the affected resource
namespace: EXTRACT(jsonPayload.resourceName)
displayName: Log match condition
name: gke-security-posture-low-severity-alert
displayName: GKE Security Posture Low Severity
# SI-4(5)
documentation:
content: |-
A low severity alert, ${policy.display_name}, has been triggered for the ${resource.label.cluster_name} GKE cluster hosted inside the ${resource.project} project.
-
The affected workload is ${log.extracted_label.namespace}. Please consult the GKE Security Posture Dashboard and Concerns page for more information.
enabled: true
notificationChannels:
- name: project-id-gke-monitoring-group-notify # kpt-set: ${project-id}-gke-monitoring-group-notify
---
# GKE Cluster Event Notification Alert Policy
# Cloud Pub/Sub Publish Requests (pubsub.googleapis.com/topic/send_request_count) Metric Alert Policy
# This metric alert policy checks for published messages to the Pub/Sub Topic ID configured for GKE Cluster Notifications
apiVersion: monitoring.cnrm.cloud.google.com/v1beta1
kind: MonitoringAlertPolicy
metadata:
name: project-id-gke-cluster-event-notification-alert # kpt-set: ${project-id}-gke-cluster-event-notification-alert
namespace: client-name-logging # kpt-set: ${client-name}-logging
annotations:
config.kubernetes.io/depends-on: resourcemanager.cnrm.cloud.google.com/namespaces/client-name-projects/Project/${project-id} # kpt-set: resourcemanager.cnrm.cloud.google.com/namespaces/${client-name}-projects/Project/${project-id}
cnrm.cloud.google.com/project-id: project-id # kpt-set: ${project-id}
spec:
alertStrategy:
# auto close after 7 days
autoClose: 604800s
combiner: OR
conditions:
- conditionThreshold:
aggregations:
- alignmentPeriod: 60s
crossSeriesReducer: REDUCE_COUNT
groupByFields:
- resource.label.project_id
- resource.label.topic_id
perSeriesAligner: ALIGN_COUNT
comparison: COMPARISON_GT
duration: 0s
filter: |-
resource.type = "pubsub_topic" AND resource.labels.topic_id = "gke-cluster-notification-pubsub-topic"
AND metric.type = "pubsub.googleapis.com/topic/send_request_count"
trigger:
count: 1
displayName: Publish Message Count
name: gke-cluster-event-notification-alert
displayName: GKE Cluster Event Detected
# SI-4(5)
documentation:
content: |-
A message has been received by the gke-cluster-notification-pubsub-topic Cloud Pub/Sub topic.
-
For more details, please visit the Cloud Pub/Sub Console, and pull messages from the gke-cluster-notification-pubsub-sub
Cloud Pub/Sub Subscription.
enabled: true
notificationChannels:
- name: project-id-gke-monitoring-group-notify # kpt-set: ${project-id}-gke-monitoring-group-notify
---
# GKE Cluster Upgrade Notification
apiVersion: monitoring.cnrm.cloud.google.com/v1beta1
kind: MonitoringAlertPolicy
metadata:
name: project-id-gke-cluster-upgrade-alert # kpt-set: ${project-id}-gke-cluster-upgrade-alert
namespace: client-name-logging # kpt-set: ${client-name}-logging
annotations:
config.kubernetes.io/depends-on: resourcemanager.cnrm.cloud.google.com/namespaces/client-name-projects/Project/${project-id} # kpt-set: resourcemanager.cnrm.cloud.google.com/namespaces/${client-name}-projects/Project/${project-id}
cnrm.cloud.google.com/project-id: project-id # kpt-set: ${project-id}
spec:
alertStrategy:
# auto after 7 days
autoClose: 604800s
notificationRateLimit:
# one notification per day
period: 86400s
combiner: OR
conditions:
- conditionMatchedLog:
filter: |-
resource.type="gke_cluster"
proto_payload.method_name="google.container.v1.ClusterManager.UpdateCluster"
protoPayload.metadata.operationType="UPGRADE_MASTER"
labelExtractors:
# This extracts the version numbers of the previous and current Master GKE Versions
previousMasterVersion: EXTRACT(protoPayload.metadata.previousMasterVersion)
currentMasterVersion: EXTRACT(protoPayload.metadata.currentMasterVersion)
displayName: Log match condition
name: gke-cluster-upgrade-alert
displayName: GKE Cluster Upgrade Notification
# SI-4(5)
documentation:
content: |-
A GKE cluster upgrade notification, ${policy.display_name}, has been triggered for the ${resource.label.cluster_name} GKE cluster hosted inside the ${resource.project} project.
-
The GKE cluster has been upgraded from ${log.extracted_label.previousMasterVersion} to ${log.extracted_label.currentMasterVersion}. Please consult the GKE Kubernetes Console and logs for more details.
enabled: true
notificationChannels:
- name: project-id-gke-monitoring-group-notify # kpt-set: ${project-id}-gke-monitoring-group-notify