Back to Checks
Data Access audit logs are enabled for Cloud Storage
cloudstorage_audit_logs_enabled
Service: cloudstorageSeverity: medium
OfficialBuilt-inVerified
Categories:logging
Resource Type:cloudresourcemanager.googleapis.com/Project
Data Access audit logs (DATA_READ and DATA_WRITE) are enabled for Cloud Storage at the project level. Unlike Admin Activity logs (enabled by default), Data Access logs must be explicitly configured to track read and write operations on Cloud Storage objects.
Risk
Without Data Access audit logs, you cannot track who accessed or modified objects in your Cloud Storage buckets, making it difficult to detect unauthorized access, data exfiltration, or compliance violations.
Run this check with Prowler
Run in Prowler CloudRun
prowler gcp --checks cloudstorage_audit_logs_enabledRecommendation
Enable Data Access audit logs (DATA_READ and DATA_WRITE) for Cloud Storage at the project level to track all read and write operations on storage objects for security monitoring and compliance.
Remediation
Terraform
resource "google_project_iam_audit_config" "storage_audit" {
project = var.project_id
service = "storage.googleapis.com"
audit_log_config {
log_type = "DATA_READ"
}
audit_log_config {
log_type = "DATA_WRITE"
}
}Other
11) Console → IAM & Admin → Audit Logs
22) Find 'Google Cloud Storage' in the list of services
33) Check the boxes for 'Data Read' and 'Data Write'
44) Click 'Save' to apply the configuration
5Note: This is a project-level setting that applies to all Cloud Storage buckets in the project.
Check Code
from prowler.lib.check.models import Check, Check_Report_GCP
from prowler.providers.gcp.services.cloudresourcemanager.cloudresourcemanager_client import (
cloudresourcemanager_client,
)
class cloudstorage_audit_logs_enabled(Check):
"""
Ensure GCP Cloud Storage data access audit logs are enabled.
- PASS: Project has audit config for storage.googleapis.com or allServices with
DATA_READ and DATA_WRITE log types enabled.
- FAIL: Project is missing audit config for Cloud Storage,
or missing DATA_READ or DATA_WRITE log types.
"""
def execute(self) -> list[Check_Report_GCP]:
findings = []
for project in cloudresourcemanager_client.cloud_resource_manager_projects:
report = Check_Report_GCP(
metadata=self.metadata(),
resource=cloudresourcemanager_client.projects[project.id],
project_id=project.id,
location=cloudresourcemanager_client.region,
resource_name=(
cloudresourcemanager_client.projects[project.id].name
if cloudresourcemanager_client.projects[project.id].name
else "GCP Project"
),
)
log_types_set = set()
for config in project.audit_configs:
if config.service in ["storage.googleapis.com", "allServices"]:
log_types_set.update(config.log_types)
required_logs = {"DATA_READ", "DATA_WRITE"}
if project.audit_logging:
if required_logs.issubset(log_types_set):
report.status = "PASS"
report.status_extended = f"Project {project.id} has Data Access audit logs (DATA_READ and DATA_WRITE) enabled for Cloud Storage."
else:
report.status = "FAIL"
if not log_types_set:
report.status_extended = f"Project {project.id} has Audit Logs enabled for other services but not for Cloud Storage."
else:
report.status_extended = (
f"Project {project.id} has Audit Logs enabled for Cloud Storage but is missing some required log types"
f"(missing: {', '.join(sorted(required_logs - log_types_set))})."
)
else:
report.status = "FAIL"
report.status_extended = (
f"Project {project.id} does not have Audit Logs enabled."
)
findings.append(report)
return findings