Skip to main content
Back to Blog
Cloud

Multicloud Without the Mess: Managing AWS + Google Cloud Workloads

Most SMBs go multicloud by accident. How to run AWS and Google Cloud together without IAM sprawl, split billing or blind spots in monitoring.

PlatOps Team
Author
Published: October 6, 2026
11 min read

Most teams don't decide to go multicloud. They drift into it. An acquisition inherits a GCP environment while the core stack runs on AWS. A team adopts a best-of-breed analytics service that lives natively on one cloud. A customer contract requires data residency in a region where your primary provider has weak coverage. By the time someone in ops notices, the complexity is already compounding.

The friction between AWS and Google Cloud has been dropping — dedicated interconnects and improved cross-cloud tooling are making it easier to architect workloads across both intentionally. That's a reasonable engineering choice. It's also an operational multiplier if you're not managing it deliberately. The infrastructure gets easier to connect; the identity, cost, and observability sprawl doesn't fix itself.

TL;DR — seven things to get right

  1. Most SMBs go multicloud accidentally — M&A, best-of-breed tools, data residency, stalled migrations
  2. IAM sprawl is usually the first thing to break — two identity systems, two offboarding checklists, two audits
  3. Cost visibility requires a neutral aggregation layer — neither cloud's native billing dashboard sees the other
  4. Multicloud is worth it for real reasons (resilience, data gravity, best-of-breed); it's expensive drift when it isn't
  5. Federation, not duplication — one identity provider authenticating to both clouds, not parallel user directories
  6. IaC everywhere is non-negotiable — manual console changes in two clouds double your configuration drift surface
  7. One operating model — unified monitoring, one runbook, a clear default cloud for new workloads

If you're unsure whether your current split is justified or just accumulated complexity, our AWS vs Azure vs GCP comparison breaks down where each cloud's strengths actually lie.

Why teams end up multicloud (even without planning to)

Four patterns account for most of the SMB multicloud situations we see.

Mergers and acquisitions: You acquire a company — or get acquired — and inherit whatever infrastructure they were running. Cloud migration timelines stretch or stall. Two clouds become the permanent operating state rather than a transitional one.

Best-of-breed services: Certain services genuinely have a best home. BigQuery for large-scale analytics, GKE Autopilot for Kubernetes operations, EC2 for compute flexibility. Teams that optimize per-workload end up split across providers, sometimes for defensible reasons.

Data gravity: Customers in certain regions, or compliance requirements for data residency, can mean running workloads where the data needs to live — not where your team prefers. The two providers differ in regional footprint and in their sovereign-cloud options, so the "right" cloud can depend on where your customers are. Meeting customer SLAs sometimes means running on both.

Resilience architecture: Some regulated industries or compliance frameworks want infrastructure redundancy across cloud providers, not just across regions. True cloud provider outages are rare but real; for certain workloads, the compliance requirement is legitimate.

None of these are bad reasons to be multicloud. The problem isn't the split — it's running the split without an operating model built for it.

The real challenges

IAM sprawl is usually where complexity bites first. AWS IAM and Google Cloud IAM are fundamentally different models — roles, policies, conditions, and principal types don't map cleanly across them. Teams end up with separate user directories, separate service account inventories, and separate permission reviews. An employee who leaves needs to be offboarded in two places. A service account that shouldn't exist may persist in one cloud because the audit only covered the other.

Networking is the second major complexity. Cross-cloud traffic over the public internet is slow and adds latency you'll notice in tightly coupled services. VPC peering, PrivateLink, and dedicated interconnects exist on both sides, but configuring them correctly across two providers' distinct networking models requires expertise in both. You own the routing and firewall configuration on each side independently.

Cost visibility breaks. AWS Cost Explorer doesn't know about your GCP spend. GCP's billing console doesn't know about your AWS spend. You have two cost allocation systems, two sets of committed-use instruments (Reserved Instances on AWS, Committed Use Discounts on GCP), and two tag conventions — none of which share a namespace. Without a neutral aggregation layer, you don't have a real picture of what your infrastructure costs. See AWS vs Azure vs GCP for how the billing models differ structurally.

Observability fragments. Logs in CloudWatch, metrics in Cloud Monitoring, traces across both — none of them talk natively to each other. A single user transaction that touches services in both clouds produces telemetry you can't correlate without a neutral collection layer.

Skills dilute. Your team that knows AWS deeply may be weak on GCP, and context-switching between two sets of console UIs, CLI tools, and SDK idioms carries a real cognitive overhead that compounds under incident pressure.

When multicloud genuinely makes sense for an SMB

For a team under 200 people, multicloud is worth the operational cost when at least one of these is true:

  • You have a concrete resilience requirement and a single cloud's multi-region offering genuinely doesn't satisfy it — not just in theory, but for your specific workload and SLA
  • You run a workload with an undisputed best home (BigQuery-scale analytics, for example) and that workload is large enough that migrating out would cost more than the ongoing operational overhead of the split
  • A customer or compliance requirement explicitly mandates geographic or provider separation

It becomes accidental overhead when:

  • You're split because a migration started and stalled, and nobody has re-evaluated whether finishing it is worth the cost
  • Different teams made independent tool choices without a platform standard, and you've accumulated two clouds by default rather than design
  • The workloads running on each cloud could consolidate without meaningful engineering cost — but nobody has made the decision

The honest question to ask is: if you were starting fresh today, would you choose two clouds? If the answer is no, use our ROI calculator to run the numbers on consolidation cost versus ongoing operational overhead before assuming the split is worth keeping.

Managing two clouds and not sure if the complexity is paying off? PlatOps can map your cross-cloud cost, IAM state, and operational overhead in a single audit. Run a free assessment — no commitment required.

Unified identity across clouds

Federation is the right answer, not parallel user directories. Set up an identity provider — Okta, Google Workspace, or Microsoft Entra ID — as the authoritative source of truth for your organization's identities. Both AWS (via IAM Identity Center with SAML) and GCP (via Workforce Identity Federation) support authentication against an external IdP. One place to provision access, one place to revoke it, one place to run an access review.

For service-to-service authentication, Workload Identity Federation on GCP and OIDC-based role assumption on AWS let workloads on one cloud authenticate to the other without storing static credentials anywhere. A GCP Cloud Run service can assume an AWS IAM role by exchanging a short-lived OIDC token — no access key, no secret, no rotation schedule to maintain. The credential is valid for minutes, not months.

The practical migration path is: audit all current IAM users and service accounts across both clouds, identify the ones that duplicate each other or shouldn't exist at all, then establish IdP federation before adding new accounts. Cleaning up after federation is easier than cleaning up before it.

FinOps without blind spots

A single source of truth for spend across both clouds requires a neutral aggregation layer. Options range from commercial platforms (CloudHealth, Apptio Cloudability) to a self-managed approach: export AWS billing data (Data Exports, formerly Cost and Usage Reports) to S3 and GCP billing data to BigQuery, then load both into a shared warehouse or BI tool. Both providers can export in the FOCUS format, an open billing schema from the FinOps Foundation, which saves you writing the normalization yourself.

The aggregation platform matters less than the disciplines around it:

  • Standardize your tag/label convention across both clouds before you have thousands of untagged resources. Define required tags — owner, environment, cost-center, product — and enforce them with AWS Config rules and GCP Organization Policy constraints
  • Treat committed-use instruments as a portfolio, not two independent decisions. Your AWS Reserved Instances and GCP Committed Use Discounts both represent bets on future usage; make sure the coverage strategy accounts for both
  • Set budget alerts at the aggregated level, not just per-cloud. A cost anomaly that spans both clouds may stay below the threshold for each cloud's native alert while still representing a problem

Our Azure cost optimization guide covers tagging governance and FinOps operating model patterns that apply equally to AWS/GCP. For workload-level cost control inside Kubernetes clusters, our Kubernetes cost optimization guide covers the layer below cloud billing.

Networking and observability

For most SMBs, the right multicloud networking approach is pragmatic: a dedicated interconnect for the one high-bandwidth cross-cloud path that actually matters — usually a data pipeline, a storage sync, or a tightly coupled service-to-service call — and mTLS over the public internet for everything else. Don't build a full private backbone between clouds until you've measured that the latency and cost actually justify the engineering and monthly expense.

For observability, OpenTelemetry is the practical standard. Instrument services on both clouds to emit traces, metrics, and logs in OTel format, and route them to a neutral aggregation platform — Datadog, Grafana Cloud, or a self-managed Grafana stack. The key is standardizing attribute names (service name, deployment environment, cloud region) before data starts flowing, so queries work across sources without manual normalization. A correlated trace from an AWS Lambda through a GCP Cloud Run service requires those shared attribute conventions to be useful.

IaC and drift control

Manual console changes in two clouds are twice the drift surface. If your team is clicking in the AWS console and the GCP console, you will have production infrastructure that exists nowhere in version control. That's a reproducibility risk and an audit risk in one.

IaC everywhere means no production resource is created by hand. Terraform handles both AWS and GCP well and gives you a single state model across providers. Pulumi is a strong alternative if your team wants typed language support. The specific tool is less important than the discipline: every infrastructure change starts as a PR, every resource has a Terraform or Pulumi definition, and console access for write operations is restricted to break-glass scenarios.

Drift detection — comparing live infrastructure against your IaC state — should run on a schedule, not just at apply time. terraform plan in a CI job that alerts on unexpected drift catches out-of-band changes before they compound into an incident.

One operating model

Operational complexity multiplies when teams have separate runbooks, separate on-call rotations, and separate toolchains for each cloud. One incident touches both environments; two sets of procedures means slower response and more coordination overhead under pressure.

The goal is a unified operating model: a single incident management process, a single monitoring platform, a single escalation path — with cloud-specific steps documented as sub-procedures, not separate documents. That also means making an explicit decision about which cloud is the default for new workloads. Ambiguity about where something should live is how you accumulate a third category of infrastructure: things that ended up in the wrong cloud because nobody decided.

How to audit your multicloud posture in an hour

  1. Pull the full list of active IAM users and service accounts from both clouds — look for accounts that exist in one but not the other, and for service accounts with wildcard policies
  2. Check whether a neutral FinOps aggregation layer exists; if not, export billing data from both clouds and sum spend by team and cost-center tag
  3. Audit tagging coverage in both clouds — any resource without an owner and cost-center tag is invisible to budget management
  4. List all production resources created in the last 30 days — verify each has a corresponding IaC commit; flag anything that was created by hand
  5. Confirm a single observability platform receives logs, metrics, and traces from both clouds

Frequently asked questions

Is multicloud the same as multi-region? No. Multi-region means running workloads in more than one geographic region within the same cloud provider — AWS us-east-1 and eu-west-1, for example. Multicloud means running across more than one cloud provider. Multi-region is well-supported by each provider's native tooling. Multicloud adds the IAM, billing, and observability fragmentation described above, which multi-region does not.

Can a small engineering team realistically manage two clouds? Yes, with the right operating model. Unified identity, IaC for all infrastructure, and a single observability platform are the constraints that make it manageable for a lean team. Without those three things in place, two clouds typically means one well-managed cloud and one accumulating technical debt.

Should we consolidate to one cloud if we're already split? Sometimes. The right question is whether your split workloads have a genuine reason to stay split — data residency, a best-of-breed service, a real resilience requirement — or whether they're artifacts of a stalled migration or independent team decisions. If the second, consolidation is usually worth the short-term migration cost. Run the numbers on ongoing operational overhead versus migration effort before deciding; the answer is often less obvious than it seems in either direction.


Multicloud complexity doesn't announce itself. It accumulates — one inherited environment, one best-of-breed service, one stalled migration at a time. Getting ahead of it means building a deliberate operating model before the sprawl makes one necessary.

If you'd rather have someone else build and manage that model, PlatOps manages cloud infrastructure for SMBs — from unified identity and FinOps to IaC and cross-cloud observability. Run a free assessment to see where your current setup has gaps, or start with a fixed-price Cloud Audit Sprint.

Put this into practice

Get a free assessment of your current security and infrastructure posture, or check your email security in 30 seconds.

Tags:cloudmulticloudawsgcpmanaged-services

Get articles like this in your inbox

Practical security, infrastructure, and DevOps insights for teams in regulated industries. Published weekly.

Weekly digestUnsubscribe anytimeNo spam, ever

By subscribing, you agree to our Privacy Policy. Unsubscribe anytime.

Want to Discuss This Topic?

Schedule a call with our team to discuss how these concepts apply to your organization.

30 Minutes

Quick, focused conversation

Video or Phone

Your preferred format

No Sales Pitch

Honest, practical advice

Schedule Strategy Call