
Practical IT | Technical practical guide
A new Google Cloud project can take minutes to create. A governed cloud environment takes a little more thought. The trouble usually starts when projects are provisioned faster than anyone can answer basic questions: Who owns them? Which identities can change them? Which policies are inherited? How are credentials controlled? Where would an accidental exposure or unexpected bill show up?
The goal is not to prevent teams from using cloud services. It is to provide an operating foundation that lets teams work without losing accountability. This guide builds a reusable assessment and validation checklist for general Google Cloud workloads. An internal API and a Google Maps Platform integration appear later as two distinct examples. Neither example defines the scope of the foundation.
What you can do by the end: inspect an organization’s control boundaries, collect baseline evidence from a candidate project, identify priority gaps, plan one small policy or access improvement, and know what proof is required before expanding it.
Operating rule: A documented policy is not the same as an effective control. Check the attachment scope, inspect the effective configuration, and observe the expected behavior before declaring success.
1. Understand where governance actually lives

Google Cloud resource hierarchy — approved Practical IT supporting illustration
Google Cloud’s hierarchy typically reads organization → folders → projects → service resources. Folders are optional, while projects are the primary place to enable services and deploy resources. IAM allows, and organization policies can flow from ancestors, so a permission or restriction may affect many more projects than the one currently on your screen.
An organization lets you manage resource ownership and controls centrally. Folders are useful policy and delegation boundaries, not mandatory reflections of the HR org chart. Projects are natural workload, environment, IAM, quota, and cost-observation boundaries. A sensible starting design separates production from non-production and isolates workloads that have materially different owners, data classifications, or risk tolerances.
Illustrative shape, not a universal prescription:
Organization
├── Shared infrastructure
│ ├── audit-and-security
│ └── network-host
├── Non-production
│ ├── customer-api-dev
│ └── geo-integration-test
└── Production
├── customer-api-prod
└── geo-integration-prod
A smaller team can start with fewer folders. A regulated business may need a more segmented model. What’s important is being able to say where a control is attached, who may change it, and which descendants receive it.
Decision check: Avoid placing broad project-administrator roles at the organization level merely to save time. Document who can create projects, who can move them, who can change IAM, and who can grant exceptions. Separate the people who design policy from the teams who consume it when practical.
Evidence to retain: organization ID, approved folder tree, sample project IDs, designated owners, inherited policy locations, and the reason for any exceptions.
2. Design identity access as a boundary, not a convenience
The first identity question is who is the actor? A human engineer, an automation workflow, an internal service, and an internet browser should not all authenticate in the same way.
For human access, favor managed organizational identities, strong phishing-resistant multifactor protection for privileged accounts, group-based role assignment, and predefined roles scoped to the smallest practical resource. Keep emergency/highly privileged identities separate from day-to-day activity. Never use a shared privileged login as a substitute for accountability.
For applications, prefer identity attached to the workload or short-lived federation/impersonation rather than long-lived downloaded service-account keys. Service account keys create a durable credential that can escape into repositories, build logs, shared files, or obsolete machines. Google’s current security guidance prefers attached identity and federation when applicable.
The inheritance trap
An inherited allow role cannot be fixed simply by removing a role from a child project if the same principal still receives it from an ancestor. However, Google Cloud also supports IAM Deny policies, which can block supported permissions regardless of allow grants. Do not confuse IAM Deny with organization policy constraints, which regulate resource configuration rather than directly granting roles. Deny is a powerful guardrail with potential for outages if mis-scoped.
Actor | Typical access pattern | Review question |
Human operator | Managed identity + group-based IAM | Does the role match the task and environment? |
Google Cloud workload | Attached service identity | Can it reach only required resources? |
External CI/CD or workload | Workload Identity Federation where supported | Is trust narrowly bound to the external identity? |
Internal service caller | Service identity + short-lived ID token where supported | Is the intended audience and recipient enforced? |
Browser/mobile client | Product-specific application mechanism | Is a key required and sufficiently restricted? |
Wrong turn: Treating every credential as an API key, or assigning Editor to a service account because a deployment succeeds with it. A successful deployment proves very little about least privilege.
3. Apply preventive policies carefully
Organization Policy is the control plane for restricting supported resource configurations. IAM determines who may act; organization policy can restrict what configurations may be created or used. A constraint may be set at the organization, folder, or project level, with inheritance behavior dependent on policy type. Inspect effective behavior rather than assuming every constraint combines the same way.
Start with controls that map to demonstrable risks. Candidate areas include restricting service account key creation, preventing public Cloud Storage access, controlling allowed resource locations for applicable services, and limiting risky network exposure. Not every suggested constraint is appropriate for every workload. A public website may intentionally need public ingress, while private backend APIs do not.
Cloud Storage public access prevention is one concrete safeguard. It can be enforced directly on a bucket or inherited from a project/folder/organization policy. Check whether a workload legitimately requires public objects or whether a safer serving method exists before applying a blanket rule.
Pilot policy change checklist
1. Inventory: Identify the target folder/project, resource owners, dependencies, and effective existing policy.
2. Impact: List the operations that should be denied and those that must remain permitted. Record exceptions and rollback authority.
3. Preview: Use policy simulation or dry-run only where the selected constraint supports it. Dry-run is not universally available across legacy constraints.
4. Pilot: Obtain change approval, deploy only to the isolated test scope, and allow for documented propagation time.
5. Validate: Demonstrate at least one expected denied operation and one required permitted operation using designated test resources, with captured logs and timestamps.
6. Back out: If required workflows fail, restore the prior scoped policy/version using the approved change path. Re-check effective policy after rollback.
7. Expand: Move from pilot to additional folders/projects only after owners sign off on actual observed behavior.
Do not test a destructive or access-blocking change directly in production just to obtain proof. If the only available evidence is a simulator report, label the control as not yet end-to-end validated.
4. Protect network, data, and audit visibility
IAM and organization policies do not replace workload-level design. For every application, ask how traffic enters, what can talk to what, how data is exposed, and how a security reviewer would reconstruct a change.
Network exposure. Inventory public IPs, public endpoints, firewall rules, service ingress settings, and private connectivity choices. Public access may be intentional, but it needs an owner, an authentication/authorization design where applicable, a reason, and monitoring. Treat a privately named service as untrusted until its actual ingress and identity checks are verified.
Data exposure. Inventory buckets, databases, secret stores, and data flows. For storage, inspect bucket-level access settings and public access prevention; for other services, assess service-specific access controls and encryption requirements. Decide whether provider-managed encryption meets the risk requirement or whether organizational key-management controls are needed. Do not assume one project policy uniformly covers all products.
Audit and detection. Confirm that you can answer who changed IAM, who changed a policy, which service account was used, and whether public exposure was attempted. Admin Activity audit logs are on by default, while most Data Access audit logs other than BigQuery require explicit enablement. Also plan for log retention, access to sensitive log content, alert routing, and detection coverage.
Evidence to retain: current network and data exposure inventory, intentionally public exceptions, logging configuration, a sample successful log query, notification ownership, and retention policy.
5. Govern APIs without confusing identity and API keys
API governance starts before enabling another product: approve an owner and business purpose, determine authentication, minimize enabled services, review quota and billing exposure, and add telemetry and rotation/revocation procedures appropriate to the credential.
Example A: Private internal API
Imagine one Cloud Run service calling another internal Cloud Run service. Google documents a pattern using a dedicated calling service account, narrowly scoped Cloud Run Invoker permission on the receiving service, and a Google-signed OIDC ID token with the appropriate audience. This is a useful service-to-service pattern and not an instruction to place a long-lived key in an environment variable.
What to validate in a controlled pilot: the intended caller receives the expected response; a caller without the permission is rejected; token audience is correct; service logs identify the principal; and any firewall/ingress requirements are satisfied. The article makes no claim that these tests have been executed in your environment.
Example B: Google Maps Platform integration
Maps APIs and SDKs illustrate a different product-specific credential model. Some browser and mobile SDKs require an API key that can be visible in the client application. Client-visible does not mean unrestricted. Use separate keys per app/platform/environment when practical, and apply both application restrictions (website referrer, server IP, Android app, or iOS app as appropriate) and API restrictions. The selected restriction must be compatible with the actual API/SDK.
A server-to-server Maps API key must remain on the trusted server side rather than being distributed to browsers. For supported products and workloads, assess additional mechanisms such as App Check or signed requests. Do not copy the Maps key pattern into an ordinary authenticated private service where identity-based authorization is appropriate.
Evidence to retain: list of enabled APIs, credential owners, application restriction type, allowed APIs, observed usage by key, quota review, and a documented emergency disable/migration path.
6. Make cost governance measurable
Google Cloud cost accountability depends on project scope, billing association, consistent labels or other cost allocation conventions, service usage visibility, and a team that actually responds to alerts. A budget without an owner and response path is a dashboard element, not an operational control.
Configure alerts-only budgets for relevant project/team scopes, with thresholds that fit the organization’s review frequency. Crucially, an alerts-only budget does not automatically stop spending. Google now also documents spend cap budgets for a limited set of eligible services and single-project/single-service scopes. Those caps are not instantaneous, don’t cover all service costs, and can interrupt workloads; evaluate feature availability and consequences before treating them as a safety net. A Maps Platform workload must not assume it is eligible for the spend cap feature.
For deeper allocation, Cloud Billing export to BigQuery supports cost and usage analysis across dimensions including projects, services, and labels. Enable it early if detailed historical analysis will matter.
Decision guidance: choose quota limits when controlling request volume, budgets for financial alerts, and service-specific spend caps only where supported and operationally appropriate. Do not confuse these controls or present a budget as guaranteed spending protection.
Proof: an alert routed to the correct owner, a checked budget/project scope, verified quota configuration where supported, and a documented response when costs or requests spike.
7. A safe, read-only baseline assessment
This first pass is read-only and is intended for an authorized administrator in a shell with gcloud installed and authenticated. It makes no project changes. It can still expose internal resource IDs and IAM members, so store output in an approved location rather than pasting it into public tickets. Replace angle-bracket placeholders with actual IDs. Some commands require organizational visibility or specific permissions; a permission error is a coverage gap to record, not proof that the control is absent.
# CLASSIFICATION: READ-ONLY. No resource mutations.
# Scope: use an authorized Google Cloud identity and an approved test project.
export PROJECT_ID='<approved-pilot-project-id>'
gcloud organizations list
gcloud projects describe "$PROJECT_ID" \
--format='yaml(projectId,projectNumber,parent,labels)'
gcloud projects get-iam-policy "$PROJECT_ID" --format=yaml
gcloud iam service-accounts list --project="$PROJECT_ID"
gcloud services list --enabled --project="$PROJECT_ID"
gcloud org-policies describe storage.publicAccessPrevention \
--project="$PROJECT_ID" --effective
The project IAM command describes project allow policy bindings, not the full effective privilege story: inherited grants, IAM Deny, IAM Conditions, and service-specific policies also matter. The effective organization policy command provides a targeted check for one constraint, not a complete policy audit.
Interpret the output
• Project ancestry: Does the project sit under the intended folder? If not, stop before changing policies.
• IAM allow bindings: Are basic roles, individually assigned privileges, or unknown principals present? Determine which are inherited before changing them.
• Service accounts: Are owners, workloads, and keyless authentication strategies documented? Review keys separately through the IAM console or a separately verified command.
• Enabled APIs: Is every enabled service justified, with a named owner? A service list is inventory, not automatically a finding.
• Effective constraint: Is the desired storage policy active on the pilot project? If it is absent, find out whether that is expected by design.
For larger estates, use Cloud Asset Inventory to search resource metadata at appropriate organizational scopes rather than manually repeating checks for every project. Inventory support varies by resource type.
Stop condition: If you cannot see ancestor policies, billing scope, or policy ownership, don’t declare the baseline compliant. Record unknown as unknown.
8. Put the baseline into an evidence matrix
Use one row per control. Choose severity based on data and operational consequences, not only on what a command prints. The following is a blank starter assessment; the status column must be filled by the reader with real evidence.
Control area | Question to answer | Expected proof | Actual status / owner |
Resource hierarchy | Is the project under the approved ancestor? | Project description, folder map | To assess |
Human IAM | Are privileged grants justified and appropriately scoped? | Effective-access review, group/role inventory | To assess |
Workload identity | Are durable keys avoided or controlled? | Service-account inventory, credential inventory | To assess |
Organization policy | Is each proposed guardrail scoped and effective? | Effective policy + permitted/denied pilot results | To assess |
Network and data | Is exposure intentional and reviewed? | Endpoint and storage configuration, exception record | To assess |
API governance | Are enablement, credentials, and quotas controlled? | API and key restrictions, metrics/usage review | To assess |
Monitoring and cost | Can owners detect access and spend anomalies? | Relevant logs, alerts, billing scope | To assess |
Suggested status vocabulary: verified, partially verified, not configured, exception approved, or unknown. Do not mark a control verified from configuration inspection alone when the control requires a behavior test.
For each failed or unknown check, record an owner, due date, remediation action, blast radius, exception reason if applicable, and evidence required to close the issue. Keep exceptions time-bound and reviewable rather than weakening an organization-wide policy silently.
9. Plan a controlled pilot and a reversible rollout

Validation and backout operator sequence (approved illustration)
Use a non-production pilot that is representative enough to test the risk but isolated enough to recover safely. Before an enforcement change, preserve the current policy document and its attachment point, capture the list of affected resources, name the approving owner, and define what should still work after the change.
A practical acceptance record can be short:
Test | Expected result | Evidence to capture |
Correct service identity invokes a private API | Allowed | Timestamp, response class, principal in logs |
Unauthorized test caller invokes the same API | Denied | Error/denial and matching log record |
Pilot resource violates a selected supported organization constraint | Denied after enforcement | Constraint, requested action, failure detail |
Compliant resource operation under the same pilot | Allowed | Success plus audit/operation record |
Budget threshold or alert test | Delivered to designated owner | Test notification/configuration screenshot |
Restored prior pilot policy after a fault | Required workflow resumes | Before/after policy, new validation results |
The example above is an acceptance plan, not fabricated observed results. Some controls support simulation or dry run without attempting an actual invalid resource change. Prefer those first. Any live negative test that changes cloud resources must be authorized, reversible, and isolated. Costs may arise from test resources and API calls.
Backout is part of the design: store the prior policy and current etag/version if applicable, prepare a documented restore path, name the person authorized to invoke it, and verify the restore with a new effective-policy read plus a positive workflow test. If an inherited parent-level control blocks rollback, escalate to the owner of that attachment point rather than trying random lower-level overrides.
10. The mistakes to catch early
• A flat collection of projects with no ownership model. Projects exist, but the team cannot tell who is accountable for them.
• Excessively broad inherited access. Removing a direct project role doesn’t remove the same role inherited from a folder.
• Service-account keys copied into deployment systems. If keyless approaches are available, adopt them rather than improving the storage location of a long-lived key.
• A blanket organization policy applied in production first. The constraint blocks a required workflow and there is no prior-state capture or exception path.
• A public service confused with an authenticated service. Network reachability and authorization are separate decisions.
• A Maps key treated as a secret after placing it in a browser. Browser keys need suitable product-specific restrictions and monitoring.
• A budget mistaken for a hard cap. Alert-only budgets notify; limited spend-cap eligibility must be checked independently.
• Configuration copied into a spreadsheet as “proof.” The reader still needs an observed effective state and, where safe, an access or deny test.
Your next action: establish one verified baseline
Choose one pilot project. Capture the ancestor map, IAM bindings, service-account inventory, enabled APIs, and one effective organization policy. Identify a change owner and a security reviewer. Fill in the seven-domain evidence matrix. Then select one low-risk control improvement and agree on the permitted, denied, and rollback checks before enforcement.
That is a much better first milestone than declaring the whole cloud estate secure after enabling a handful of checkboxes. The durable outcome is a repeatable process that future projects can inherit, and operators can explain.
