Secure GCP infrastructure

GCP Security Hardening Checklist for Small and Mid-Sized Teams

A practical baseline for teams that run production workloads on Google Cloud without a dedicated security department. Start where the most likely paths to a serious incident are easiest to reduce.

Common GCP threat paths

Most cloud incidents begin with a small ownership or configuration gap. Look for these paths before an attacker does.

  • An over-permissioned user, service account, or workload identity can turn one stolen credential into broad access across projects.
  • An exposed management endpoint, debug port, or permissive firewall rule can bypass every control designed for normal application traffic.
  • A public storage bucket or an overly broad signed URL can disclose customer data without a visible application compromise.
  • Stale workloads create durable risk when old images, forgotten namespaces, unused service accounts, and unowned resources remain deployable.
  • Missing or short-lived audit evidence makes it difficult to identify who changed a policy, when access began, and which data was reached.
  • An untested backup is only a hope. Restore failures, incomplete retention, and inaccessible encryption keys can turn a security event into permanent loss.

Identity and access

Treat identity as the primary control plane. Every human, automation process, and workload should have a distinct identity with a bounded purpose.

Make the resource boundary explicit

Use the organization and folders for guardrails, and separate development, staging, and production into projects or stronger trust boundaries. Apply organization policies at the highest practical level, restrict service usage, and avoid sharing production projects across unrelated products.

Grant the minimum role at the narrowest scope

Prefer predefined or custom roles over broad primitive roles, grant them to groups and workload identities, and use IAM conditions where a resource name or tag can narrow access. Review unused permissions and remove standing production access that belongs only to a break-glass process.

Remove long-lived credentials

Use Workload Identity Federation for GKE so pods receive short-lived credentials without exported service-account keys. Block key creation and upload with organization policy where possible, inventory any remaining keys, and alert on high-risk IAM changes in Cloud Audit Logs.

Network and edge

Assume that some application defect will eventually be reachable from the network. Limit what that defect can access.

Start with deny and add named paths

Use least-privilege VPC firewall rules and Kubernetes NetworkPolicies for pod traffic. Separate environments into distinct networks, document every ingress path, and remove broad debug rules that allow management ports or all protocols from large address ranges.

Keep nodes and control planes private

Disable external IP addresses on GKE nodes. Prefer the DNS-based private control-plane endpoint, and when an IP endpoint is unavoidable, restrict it with authorized networks. Give workloads a deliberate egress path instead of broad internet access.

Publish only deliberate public services

Expose applications through a reviewed gateway or load balancer, not incidental pod or node addresses. Terminate TLS on managed certificates, restrict ingress hosts and paths, apply request and rate limits, and keep administration interfaces behind identity-aware access.

Data and secrets

Protect data at rest, in transit, and in use, then prove that you can recover it. Discovery is part of the control.

Prevent accidental public access

Enforce public access prevention and uniform bucket-level access on Cloud Storage. Classify buckets by sensitivity, restrict object and key access, enable logging for high-value data, and use customer-managed encryption keys where your risk or compliance model requires them.

Keep secrets out of images and source

Store credentials in Secret Manager and grant access to a specific workload identity and secret version. Rotate secrets deliberately, avoid copying them into Git or container images, and do not treat ordinary Kubernetes Secrets as a complete protection boundary.

Test recovery, not only backup creation

Define recovery point and recovery time targets, retain copies beyond the production failure domain, and protect backup and encryption-key access from the workload identity. Restore into an isolated environment on a schedule, verify the data, and record the elapsed time and any manual steps.

GKE hardening

GKE secures the managed control plane, but your cluster configuration, namespaces, admission policies, and workloads remain yours to govern.

Make namespaces the isolation contract

Separate teams and environments into namespaces or clusters, bind narrow Kubernetes RBAC roles there, and apply resource quotas and NetworkPolicies. Avoid cluster-wide write access for application delivery, and give each workload its own service account when it needs a distinct identity.

Admit only images and configurations you trust

Enforce the restricted Pod Security standard or equivalent Policy Controller rules. Deploy images by immutable digest, scan them for vulnerabilities, use Binary Authorization where provenance matters, and reject unexpected host access, privilege escalation, and cluster-admin bindings.

Remove unnecessary container authority

Run as non-root, drop Linux capabilities, use a read-only root filesystem where possible, and apply the RuntimeDefault seccomp profile. Do not mount the service-account token without need, avoid privileged and host namespaces, keep the node service account minimal, and use Shielded Nodes plus Container-Optimized OS.

Detection and recovery

Controls fail. Depend on evidence and rehearsed actions, not confidence that nobody has made a mistake.

Collect the evidence you will need

Keep Cloud Audit Logs and GKE system and workload logs in a central destination with retention that matches your investigation needs. Enable Data Access logs selectively for sensitive data, restrict log access, and record administrative changes to IAM, firewall, storage, and cluster configuration.

Alert on changes with security meaning

Alert on public storage exposure, broad firewall or IAM changes, unexpected service-account keys, admission denials, control-plane exposure, repeated authentication failures, disabled logging, failed backups, and expiring certificates. Route each alert to an owner with the steps to confirm or reject it.

Rehearse the response

Write short runbooks for leaked credentials, public data, compromised workloads, and lost regions or projects. Include who can authorize containment, how to revoke access, how to preserve evidence, and how to restore service. Test the runbooks with the people who will use them.

A prioritized 30, 60, and 90 day checklist

If you are starting from an incomplete baseline, sequence the work to reduce exposure first and make later reviews repeatable.

Days 1 to 30: stop the obvious paths

Inventory projects and owners, remove unused and long-lived credentials, confirm audit logging, block public buckets, review the widest firewall and IAM grants, identify production backup gaps, and fix any unowned public endpoint. Assign an owner and due date to every finding.

Days 31 to 60: make the baseline repeatable

Move network, identity, and workload configuration into reviewed infrastructure as code and GitOps delivery. Adopt Workload Identity, private nodes, restricted Pod Security, trusted image checks, centralized logs, and alerts for the changes that matter most.

Days 61 to 90: prove and sustain it

Run restore tests and an incident tabletop, review privileged access and exception expiry, scan images and dependencies again, verify that owners receive alerts, and measure the gaps that remain. Put the checks on a recurring review cycle before the evidence becomes stale.

Use this checklist as a starting point. Snow Tree can apply the baseline through a managed platform operation or a focused consulting engagement.

Official references

Use Google's current guidance as the technical source of truth when platform defaults or product capabilities change.

Managed platform

Have Snow Tree build, host, and operate the software.

Start a project