| <!-- | |
| Licensed to the Apache Software Foundation (ASF) under one | |
| or more contributor license agreements. See the NOTICE file | |
| distributed with this work for additional information | |
| regarding copyright ownership. The ASF licenses this file | |
| to you 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. | |
| --> | |
| # GCP Security Analyzer | |
| This document describes the implementation of a security analyzer for Google Cloud Platform (GCP) resources. The analyzer is designed to enhance security monitoring within our GCP environment by capturing critical events and generating alerts for specific security-sensitive actions. | |
| ## How It Works | |
| 1. **Log Sinks**: The system uses [GCP Log Sinks](https://cloud.google.com/logging/docs/export/configure_export_v2) to capture specific security-related log entries. These sinks are configured to filter for events like IAM policy changes or service account key creation. | |
| 2. **Log Storage**: The filtered logs are routed to a dedicated Google Cloud Storage (GCS) bucket for persistence and analysis. | |
| 3. **Report Generation**: A scheduled job runs weekly, executing the `log_analyzer.py` script. | |
| 4. **Email Alerts**: The script analyzes the logs from the past week, compiles a summary of security events, and sends a report to a configured email address. | |
| ## Configuration | |
| The behavior of the log analyzer is controlled by a `config.yml` file. Here’s an overview of the configuration options: | |
| - `project_id`: The GCP project ID where the resources are located. | |
| - `bucket_name`: The name of the GCS bucket where logs will be stored. | |
| - `logging`: Configures the logging level and format for the script. | |
| - `sinks`: A list of log sinks to be created. Each sink has the following properties: | |
| - `name`: A unique name for the sink. | |
| - `description`: A brief description of what the sink monitors. | |
| - `filter_methods`: A list of GCP API methods to include in the filter (e.g., `SetIamPolicy`). | |
| - `excluded_principals`: A list of service accounts or user emails to exclude from monitoring, such as CI/CD service accounts. | |
| ### Example Configuration (`config.yml`) | |
| ```yaml | |
| project_id: your-gcp-project-id | |
| bucket_name: your-log-storage-bucket | |
| sinks: | |
| - name: iam-policy-changes | |
| description: Monitors changes to IAM policies. | |
| filter_methods: | |
| - "SetIamPolicy" | |
| excluded_principals: | |
| - "ci-cd-account@your-project.iam.gserviceaccount.com" | |
| ``` | |
| ## Usage | |
| The `log_analyzer.py` script provides two main commands for managing the security analyzer. | |
| ### Initializing Sinks | |
| To create or update the log sinks in GCP based on your `config.yml` file, run the following command: | |
| ```bash | |
| python log_analyzer.py --config config.yml initialize | |
| ``` | |
| This command ensures that the log sinks are correctly configured to capture the desired security events. | |
| ### Generating Weekly Reports | |
| To generate and send the weekly security report, run this command: | |
| ```bash | |
| python log_analyzer.py --config config.yml generate-report | |
| ``` | |
| This is typically run as a scheduled job (GitHub Action) to automate the delivery of weekly security reports. | |