Organization has Essential Contacts configured
Google Cloud organization has Essential Contacts defined at the organization level for categories such as SECURITY, BILLING, LEGAL, SUSPENSION, TECHNICAL, or PRODUCT_UPDATES.
Evaluates whether at least one contact is configured.
Risk
Missing Essential Contacts means security, abuse, and billing notices can go unnoticed or to inappropriate recipients, slowing response.
Consequences: data exposure via unaddressed alerts (C), unauthorized changes persisting (I), and suspensions/outages from unresolved issues (A).
Run this check with Prowler
Run in Prowler Cloudprowler gcp --checks iam_organization_essential_contacts_configuredRecommendation
Configure Essential Contacts at the organization (and inherit to folders/projects) with group aliases for SECURITY, BILLING, LEGAL, SUSPENSION, TECHNICAL, and PRODUCT_UPDATES.
Apply least privilege and separation of duties. Review quarterly, verify delivery, and restrict contacts to approved domains.
Remediation
CLI
gcloud essential-contacts create --email=<EMAIL> --notification-categories=all --organization=<ORGANIZATION_ID>Terraform
resource "google_essential_contacts_contact" "<example_resource_name>" {
parent = "organizations/<example_resource_id>" # Critical: set at org level to satisfy the check
email = "<EMAIL>" # Critical: creates the essential contact
notification_category_subscriptions = ["ALL"] # Critical: required; ensures the contact is created
}Other
Check Code
from prowler.lib.check.models import Check, Check_Report_GCP
from prowler.providers.gcp.services.iam.essentialcontacts_client import (
essentialcontacts_client,
)
class iam_organization_essential_contacts_configured(Check):
def execute(self) -> Check_Report_GCP:
findings = []
for org in essentialcontacts_client.organizations:
report = Check_Report_GCP(
metadata=self.metadata(),
resource=org,
project_id=essentialcontacts_client.default_project_id,
location=essentialcontacts_client.region,
)
report.status = "FAIL"
report.status_extended = (
f"Organization {org.name} does not have essential contacts configured."
)
if org.contacts:
report.status = "PASS"
report.status_extended = (
f"Organization {org.name} has essential contacts configured."
)
findings.append(report)
return findings