Skip to content

GCP Security Baseline: IAM, Logging, Network, and Storage Controls

A practical GCP security baseline covering organization design, IAM, logging, network controls, storage security, risk prioritization, tooling workflow, exception management, and a 30-day hardening roadmap.

/ ARTICLE
[ FIG. 1 ]
Practical GCP security baseline for IAM, logging, network, and storage hardening

Run gcloud projects list against an organisation that has been going for three years and count how many projects you can name an owner for. In most environments the answer is somewhere under half. That number, more than any scanner finding, tells you what state the security posture is in — because every control below depends on someone being accountable for the thing it applies to, and an unowned project is one nobody will fix, nobody will decommission, and nobody will notice going public.

GCP environments get hard to secure through ordinary growth, not sophisticated attacks. Projects, service accounts, firewall rules and buckets appear at the speed of engineering; governance arrives afterwards, if it arrives. The result is predictable: privilege sprawl, partial visibility, and exposure nobody chose.

A baseline is the minimum every project must meet before it scales further. It is not a target architecture and it will not make you secure. It sets a floor, so that the worst project in your estate is merely adequate rather than unknown.

GCP security baseline

Use this as an implementation framework for an internal cloud hardening programme.

1) Why a baseline needs to exist before cloud scale, not after

Waiting until a GCP environment is large and complex to define baseline controls creates a much harder problem. Here’s what you’re preventing by establishing the baseline early:

  • Project sprawl without clear ownership or consistent tagging
  • Broad IAM grants that made sense at the time and then never got narrowed
  • Audit logs that weren’t enabled before an incident that required them
  • Network exposure that accumulated one firewall rule at a time
  • Inconsistent control expectations that engineering teams can’t meet because nobody defined them

Two of those are worse than they look. Audit logs that weren’t enabled before an incident cannot be retrofitted — Data Access logs are not retroactive, so if they were off during the window you care about, that period is simply gone and your investigation becomes inference. And an IAM grant that made sense at the time is nearly impossible to remove later, because nobody can prove what still depends on it.

The honest cost side: a baseline does constrain engineering, whatever the framing. Default-deny egress breaks things. Organisation policy constraints block deployments that used to work. What a baseline buys is that the friction arrives at design time, in a form a team can plan around, rather than at 2 a.m. in a form nobody can.


Advertisement

2) The domains you need to standardize first

Teams that try to build the whole programme at once end up with a long backlog of half-implemented controls, which is worse than a short list of finished ones — a control that is 60% deployed gives you the reporting burden without the protection. Establish these domains in roughly this order, identity and logging before broad workload rollout:

  • Organisation and project hierarchy design
  • IAM roles, groups, and service account governance
  • MFA and identity assurance for privileged users
  • Cloud Audit Logs configuration and retention strategy
  • VPC firewall rules and network segmentation
  • Cloud Storage exposure and access control
  • Public exposure detection and remediation workflows
  • Secret handling and key management hygiene
  • Compute and container hardening essentials
  • Billing alerts and cost anomaly monitoring as a security signal

Reverse that order and risk accumulates faster than governance can catch it. The specific failure is that identity and logging are the two domains that are painful to retrofit: narrowing an IAM grant after workloads depend on it requires proving a negative, and log coverage you turn on today tells you nothing about last month.


3) GCP baseline checklist — use this as a recurring governance artifact

Baseline Control AreaMinimum StandardValidation MethodOwner
Organisation StructureProjects grouped by environment and business function with clear ownershipOrg/project inventory reviewCloud platform owner
IAM Role DesignLeast-privilege roles; no unnecessary Owner-level assignmentsIAM bindings auditIAM/security team
Service AccountsDedicated service accounts per workload with scoped permissionsService account inventory + policy reviewPlatform engineering
MFA EnforcementMFA required for all privileged access pathsIdentity policy verificationIdentity admin
Cloud Audit LogsAdmin activity and data-access logs enabled at appropriate scopeLogging policy and sink checksSecurity operations
VPC Firewall RulesIngress and egress aligned to approved services onlyFirewall rule audit + change reviewNetwork/cloud ops
Cloud Storage SecurityBuckets private by default with documented explicit exceptionsBucket ACL/IAM policy scanData/platform owner
Public Exposure ControlExternal endpoints inventoried and reviewed with named ownersExposure report + owner confirmationCloud security
Secrets ManagementNo secrets in code or environment variables where avoidable; managed storage usedCI scan + config reviewDevSecOps
Compute HardeningBaseline images, patch process, and metadata protections in placeImage/policy compliance checksCompute owner
Container SecurityWorkload identity, least privilege, and image scanning controls activeCluster and CI policy checksKubernetes/platform team
Billing and AlertingBudget alerts and anomaly monitoring enabled across projectsBilling config reviewFinOps + security

A note on the Data Access half of the audit-log row, because it is the one control here with a bill attached: Admin Activity logs are enabled by default and free, but Data Access logs are opt-in and charged by volume, and on a busy project they can generate more log data than the workload generates traffic. Turning them on organisation-wide without scoping is how teams end up with a logging invoice that gets the control switched off again three months later. Enable them where the data justifies it, and decide that scope deliberately rather than discovering it on a bill.

This table belongs in your governance review cadence, not just in onboarding documentation.


4) Practical risk prioritization — not all gaps are equal

When you’re looking at a gap register with dozens of findings, you need a way to decide what to fix first. Prioritise by the combination of exposure, privilege level, and potential business impact.

Highest-priority risk categories

  1. Public exposure with weak or absent access controls
  2. Privileged identities with broad or unmanaged access
  3. Missing or incomplete audit logging before it’s needed
  4. Unmanaged service account keys and stale credentials sitting in automation
  5. Overly permissive firewall rules that opened for a reason and never closed
Risk PatternLikelihoodBusiness ImpactPriority
Public bucket with sensitive data potentialHighHighCritical
Excessive Owner role usage across projectsMedium-HighHighHigh
Missing audit logs for privileged actionsMediumHighHigh
Stale service account keys in automationMediumMedium-HighHigh
Broad firewall ingress on non-public servicesMediumHighHigh
Project naming/ownership inconsistencyHighMediumMedium

If two or more high-priority risks coexist in a production environment, treat baseline remediation as an urgent programme with dedicated resources — not a background task competing with feature work.


5) Tooling workflow for baseline assessments

Use tooling for visibility and repeatability, then validate by hand before changing anything. Automated tools surface findings fast and are confidently wrong about a meaningful fraction of them — a “publicly exposed” bucket that fronts a static site, a “stale” service account that runs a quarterly job. Acting on scanner output without context is how a hardening programme causes its first outage and loses the engineering goodwill it needs.

Tool / PlatformPractical Use in Baseline Work
gcloud CLIControlled inventory, policy inspection, and validation commands
Security Command CenterCentralised misconfiguration and exposure signal aggregation across your org
Cloud Asset InventoryAsset ownership, IAM bindings, and configuration relationship mapping
Cloud LoggingAudit event review and control verification
Cloud MonitoringOperational signal and alerting configuration
SIEM export pipelineCross-domain correlation and long-term incident analysis

Assessment sequence that works in practice:

  1. Pull your asset and IAM inventory using Cloud Asset Inventory or gcloud
  2. Compare current state against your baseline checklist controls
  3. Score gaps by risk priority using the matrix above
  4. Validate findings with actual service owners before assuming the finding is a problem
  5. Plan phased remediation with rollback readiness for changes that could affect production

Step 4 matters more than it sounds. Context from service owners frequently changes the priority or the remediation approach — and skipping it is the difference between a programme engineers cooperate with and one they route around.

Security Command Center deserves a specific caveat: its Standard tier covers a limited set of detectors, and most of the findings people expect from it — including the deeper misconfiguration and threat detection — sit in the Premium or Enterprise tiers. If your baseline assumes SCC is watching something, verify which tier you are on before you write that assumption into a control document.


6) IAM baseline specifics — this is where drift causes the most long-term damage

IAM drift is the largest sustained risk in most GCP estates because it is incremental and quiet. Nobody ever grants Owner maliciously. Somebody is blocked on a Friday, the fastest unblock is a broad role, and the follow-up ticket to narrow it is never the most urgent thing in anyone’s week. Repeat for two years.

The asymmetry is what makes it stick: granting a role takes thirty seconds and carries no risk to the person doing it, while removing one requires proving nothing depends on it — and GCP will not tell you that. IAM Recommender helps, since it bases suggestions on 90 days of observed usage, but read its blind spot carefully: a role used only by a quarterly process looks unused for most of the year. Treat its output as a candidate list to check with owners, never as a list to action.

IAM hardening controls:

  • Stop using primitive roles (Owner, broad Editor bindings) as a convenience shortcut
  • Prefer group-based access over direct user bindings — it’s easier to manage and audit
  • Scope role assignments at the lowest practical resource level (project or resource, not organisation where avoidable)
  • Maintain clear separation between human admin identities and workload service accounts
  • Review service account key age and usage; rotate or remove stale keys
  • Enforce an approval process for any privileged role grants
IAM CheckWhat to Look ForAction
Primitive role overuseExcess Owner or broad Editor bindings across projectsReplace with scoped predefined or custom roles
Direct user privilege grantsIndividual high-privilege bindings to specific usersMigrate to managed groups with an approval workflow
Service account sprawlUnclear ownership and ambiguous role purposeTag ownership and progressively reduce role scope
Key hygiene issuesOld or unused service account keysRotate and revoke; prefer Workload Identity Federation for keyless patterns

Workload Identity Federation lets external workloads authenticate with short-lived tokens instead of downloaded key files, and it is well supported across the major CI/CD systems. If your automation still ships around JSON key files, this is the single highest-value migration on the list — a service account key is a bearer credential with no expiry that will sit in a CI variable until somebody deliberately revokes it, and its usage looks identical whether it is your pipeline or someone who copied it.

The cost is real: WIF requires trust configuration on both sides, the failure messages when the subject or audience mapping is wrong are unhelpful, and it is genuinely harder to debug than “paste the key and it works”. Budget a day per CI system for the first one. You can also block the problem at source with the iam.disableServiceAccountKeyCreation organisation policy constraint — worth applying to new folders early, before anyone builds a dependency on key files that you then have to unpick.


7) Logging baseline — without reliable logs, incident response is guesswork

Logging is the only control on this list whose value is entirely retrospective, which is exactly why it loses budget arguments. It also has a property that makes it unforgiving: coverage is not retroactive. Enable Data Access logs today and you learn nothing about yesterday. The investigation you cannot run is the one where an attacker was present three weeks before anyone noticed.

Logging baseline controls:

  • Enable required Cloud Audit Logs at the appropriate scope — org, folder, or project — for Admin Activity and Data Access events
  • Route critical log events to durable, separate storage and/or a SIEM via log sinks
  • Define retention periods that align with your policy and regulatory requirements
  • Protect log integrity with access controls and separation of duties between teams that generate logs and those who could modify them
  • Monitor for logging pipeline failures and dropped events — a silent logging failure is worse than a noisy one
SignalInterpretationFollow-up
Sudden drop in auth or admin eventsIngestion or configuration driftValidate sinks and logging policies immediately
Missing events for privileged operationsCoverage gap in audit configurationCorrect log type enablement and re-verify
High delay between event time and availabilityPipeline latency issueTune routing and processing path

One practical control is worth more than the rest of this section: alert on log volume, not just on log content. A broken sink, a revoked writer permission, or an exclusion filter somebody widened produces no error anywhere — it produces silence, and silence is indistinguishable from a quiet week. Every detection you have built sits downstream of ingestion, so a pipeline failure disables all of them at once while every dashboard stays green. Set a threshold on expected volume per critical project and page on the floor being breached.

The trade-off with sinks to separate storage is cost and duplication: you are paying to store the same events twice, once in Cloud Logging and once in your SIEM. Decide retention per destination rather than defaulting to the longest period everywhere.


8) Network and storage baseline — most cloud exposure comes from misconfiguration, not intrusion

The majority of public cloud exposure incidents involve no attack technique at all. A firewall rule opened for a debugging session in 2023. A bucket made public so a contractor could fetch one file. A default nobody changed. The adversary’s contribution was running a scanner, which is not a capability worth defending against so much as an ambient condition — anything reachable is found within hours.

Two GCP-specific defaults are worth knowing. The auto-created default VPC ships with permissive rules including SSH and RDP open to 0.0.0.0/0, so a project created casually starts life exposed; the compute.skipDefaultNetworkCreation constraint prevents that at the organisation level. And storage exposure is best solved by the storage.publicAccessPrevention constraint rather than by scanning for public buckets after the fact, since a policy constraint stops the mistake being possible while a scanner only tells you it already happened.

The trade-off on both is the same: an organisation policy that blocks a thing engineers currently do will surface as a confusing permission denial in someone’s Terraform run. Announce the constraint before you enforce it, and have the exception process ready on the day it goes live rather than a week later.

Network baseline essentials:

  • Default-deny ingress where practical — allow lists beat deny lists for security posture
  • Restrict management interfaces and administrative access to approved network paths
  • Segment workloads by environment and trust level using separate VPCs or subnets
  • Apply egress controls to sensitive workloads to prevent unexpected data exfiltration paths
  • Document every exception with a named owner and an expiry date — undocumented exceptions become permanent

Storage baseline essentials:

  • Private-by-default bucket policy enforced at the organisation level through Organization Policy constraints
  • All public access exceptions require explicit approval and documentation
  • Bucket and object access governed by least-privilege IAM, not legacy ACLs where avoidable
  • Monitoring configured for policy or ACL changes that could increase exposure
  • Access and retention controls aligned to data classification
AreaHigh-Risk PatternBaseline Expectation
VPC FirewallBroad internet ingress rules to internal servicesExplicit allow rules only for required sources and services
Admin Access PathsDirect broad admin access from the public internetControlled access with strict identity verification and network controls
Cloud StoragePublic bucket access enabled by default or accidentallyPublic access disabled at org policy level unless documented exception
Inter-project ConnectivityUntracked or undocumented trust paths between projectsDocumented and periodically reviewed connectivity policies

9) Managing exceptions without letting them accumulate into hidden risk

Exceptions are not a failure of the baseline; a baseline with no exception process gets bypassed silently instead, which is strictly worse because you lose the visibility as well as the control. The problem is the untracked exception — the one nobody remembers approving, protecting a workload nobody can name, that everyone is now too nervous to remove.

Every exception record needs:

  • The specific control being bypassed
  • A clear business justification for why the deviation is necessary
  • A named risk acceptance owner who is accountable
  • Compensating controls that reduce the risk of the deviation
  • An expiration date and review schedule
  • Validation evidence showing the compensating controls are working
Exception AttributeRequired Value
ApprovalNamed accountable manager + security reviewer
DurationTime-bounded with an explicit review date
Compensating ControlDocumented technical or operational mitigation
VisibilityIncluded in monthly governance reporting
Closure CriteriaDefined condition that would allow the exception to be removed

No exception should be permanent without periodic executive-level review. If something has been “temporary” for two years, it needs a hard decision: fix it, accept it formally, or escalate.


10) Common GCP baseline mistakes to avoid

Every one of these turns up in assessments often enough to be predictable:

  • Project sprawl without naming conventions or ownership assignment
  • Owner-level access granted for convenience and never scoped down
  • Buckets accidentally made public through IAM changes or default setting changes
  • Missing log retention and no validation that log pipelines are actually working
  • Service account key files left active long after they’re needed
  • Firewall rules broadened during an incident or change window and never reverted afterward
  • Baseline documented once in a wiki and then never operationalised or revisited

The last one is the most common and the least discussed. A baseline that exists only as a document is not a control, it is a description of a control, and the gap between the two is where every assessment finding lives.

Anti-drift guardrails that actually help:

  • Monthly baseline conformance review with a fixed agenda and named participants
  • Change-control integration for IAM, network, and storage policy changes
  • Automated compliance checks in CI/CD pipelines where infrastructure is code
  • Quarterly exception review to close or formally re-accept accumulating exceptions

11) 30-day GCP hardening roadmap

Thirty days gets you meaningful coverage on the highest-risk projects, not a finished programme, and it is worth saying that out loud to whoever asked for the plan. The sequencing is deliberate: visibility first, because remediating what you cannot see is guesswork; identity and exposure second, because they carry the largest blast radius; logging third, because it is what makes month two survivable.

Week 1: Establish visibility and ownership

You can’t fix what you can’t see. Inventory all projects, identities, service accounts, and storage buckets. Tag owners for critical workloads and classify them by risk level. Identify your top public exposure and privilege risks so Week 2 is focused.

Output: baseline gap register v1

Week 2: Address critical identity and exposure gaps

Reduce the highest-risk IAM grants — prioritise Owner-level bindings and direct user assignments to sensitive resources. Lock down any public storage exposures immediately. Tighten the most dangerous firewall rules that are providing no legitimate business value.

Output: critical-risk remediation change set

Week 3: Logging, monitoring, and detection alignment

Validate that audit log coverage actually exists where you think it does. Check that log sinks are functioning and routing to the right destinations. Integrate high-value signals into SIEM workflows. Set up alerts for privileged changes and exposure drift.

Output: logging assurance and detection baseline report

Week 4: Governance hardening and sustainability

Implement an exception register with a defined review cadence. Finalise baseline policy documentation in a format engineering teams can actually use. Present status, residual risk, and next-quarter priorities to leadership.

Output: 30-day hardening completion report + roadmap


12) Metrics that indicate baseline maturity

MetricWhy It MattersTarget Direction
% projects with defined owner tagsFoundation of all governance — you can’t manage what nobody ownsUp
% privileged identities with MFA enforcedIdentity assurance maturity for high-impact accessUp
Count of public-exposure exceptions with documentationExposure risk and governance discipline combinedDown (while documented count stays up)
% service accounts using Workload Identity Federation or recent key rotationCredential hygiene qualityUp
Audit log coverage across critical projectsIncident readiness — can you investigate when something happens?Up
Mean time to remediate critical baseline gapsProgram execution speed and team responsivenessDown

One caution on metrics: every one of these can be gamed, and the pressure to game them arrives the moment they reach a leadership slide. Owner tags get filled with a team alias nobody reads. Exception counts fall because exceptions stopped being recorded. Read the metrics alongside the underlying register, and treat a suspiciously fast improvement as a question rather than a win.

A strong baseline is an operating rhythm, not a checkbox exercise: consistent control definitions, clear ownership, evidence-backed validation, and reviews frequent enough that cloud growth stays inside boundaries somebody chose.


Baseline operations worksheet for GCP teams

WorkstreamOwnerFirst ActionValidation Signal
Project governanceCloud platform leadEnforce naming and owner standards for all new and existing projectsFewer orphaned or ambiguous projects in monthly audit
IAM hygieneIdentity adminAudit primitive role usage and stale service accounts with keysMeasurable reduction in broad-access assignments
Logging assuranceSecurity operationsValidate audit log coverage and verify log sink integrityReliable event visibility for critical administrative actions
Exposure controlCloud security engineerReview public endpoints and bucket exposures on a weekly cadenceFaster closure of accidental exposure findings

Governance checklist — run this monthly

  • Confirm owner mapping for all new projects and critical resources added since last review
  • Validate exception register: check for expired approvals and items past their review date
  • Review recent firewall and storage changes for unintended drift
  • Track all unresolved high-priority baseline gaps with assigned owners and due dates

Control validation and handoff pack

When handing off GCP security governance or presenting to leadership or auditors, these artefacts cover what they’ll ask for:

ArtifactMinimum ContentConsumer
Baseline gap registerControl gap, risk level, assigned owner, due dateSecurity + platform leads
Validation evidenceCommands, screenshots, or log references per controlAudit and governance teams
Exception recordJustification, compensating controls, expiry dateRisk owners
Quarterly status briefProgress trends, metric movement, and unresolved risk clustersLeadership stakeholders

Quality checks before any handoff:

  • Are all critical baseline gaps assigned with realistic deadlines and accountable owners?
  • Can each claimed control be validated with actual evidence rather than assumption?
  • Is the exception list shrinking over time, or accumulating without closure?

90-day baseline execution cadence

Days 1–30

Reconcile your project inventory and confirm owner mapping. Prioritise and close the top critical exposure and IAM gaps identified in Week 1 of the 30-day roadmap. Validate that required logging controls are active across your highest-value projects.

Days 31–60

Harden firewall and storage controls in remaining high-risk projects that weren’t addressed in the first month. Improve service account governance — reduce key usage in favour of Workload Identity Federation where possible. Build recurring compliance checks into your infrastructure change workflows.

Days 61–90

Run your first quarterly baseline conformance review. Measure actual risk reduction against your opening baseline gap register. Publish your next-cycle hardening roadmap with specific, measurable targets.

KPIWhy It Matters
Projects with complete owner metadataGovernance completeness — foundational to all other controls
Critical baseline gaps closedCore hardening progress metric
Exception count with valid and current expiry datesException control maturity
Audit log coverage on critical projectsIncident readiness quality

Baseline maturity grows when teams combine technical controls, governance ownership, and recurring validation into a stable operating model rather than treating each as a separate one-time effort.


Baseline verification and drift management

A baseline is only meaningful if you keep verifying it holds. The fastest way to lose posture is to treat baseline work as a project with a completion date — the controls do not decay, but the environment around them changes until they no longer cover it.

Drift signals to monitor actively:

AreaDrift SignalWhy It Matters
IAMNew high-privilege bindings or broad primitive role assignmentsExpands blast radius quickly and quietly
LoggingDisabled sinks, audit logs turned off, reduced retention settingsRemoves your investigation capability exactly when you need it
NetworkNew public IP addresses or expanded firewall allow rulesIncreases attack surface incrementally
StorageBuckets becoming public or IAM policies weakenedCreates data leakage risk that may not be immediately visible

Baseline evidence pack for audits and reviews:

  • IAM review summary covering principals, privileged roles, and documented exceptions
  • Logging configuration snapshot with audit log settings, active sinks, and retention policies
  • Network exposure summary covering public services and firewall rule highlights
  • Storage posture summary covering public access control settings and encryption defaults

Change management standards that prevent drift:

  • Any change introducing public exposure or elevated privileges requires explicit named-owner approval before implementation
  • Exceptions are time-boxed with a hard expiry date and a linked follow-up ticket
  • Baseline controls are reviewed on a fixed cadence — monthly for critical projects, quarterly for everything else
KPITarget Direction
Privileged principals without documented justificationDown to zero
Logging coverage for critical projectsUp to 100%
Publicly exposed services without a documented ownerDown to zero
Baseline exceptions past their expiry dateDown to zero

That is what a working GCP baseline looks like: controls you can verify rather than assert, posture you can measure, and drift and exceptions handled strictly enough that the baseline still means something two years and four hundred projects from now.


Share article

Subscribe to my newsletter

Receive my case study and the latest articles on my WhatsApp Channel.

Warning

Ask CyberROX AI