All posts

The simplest way to make Google GKE S3 work like it should

Your Kubernetes app just worked flawlessly in staging, but once deployed on GKE it started throwing “AccessDenied” from S3. Somewhere between the pod, the service account, and your S3 bucket, the trust line broke. You can feel the pain of every engineer who’s fought that same invisible permission chain. Google GKE S3 integration sounds odd at first. After all, GKE runs on Google Cloud, and S3 lives in AWS. But in multi-cloud environments, this pairing shows up constantly. You might rely on S3 f

Free White Paper

GKE Workload Identity + End-to-End Encryption: The Complete Guide

Architecture patterns, implementation strategies, and security best practices. Delivered to your inbox.

Free. No spam. Unsubscribe anytime.

Your Kubernetes app just worked flawlessly in staging, but once deployed on GKE it started throwing “AccessDenied” from S3. Somewhere between the pod, the service account, and your S3 bucket, the trust line broke. You can feel the pain of every engineer who’s fought that same invisible permission chain.

Google GKE S3 integration sounds odd at first. After all, GKE runs on Google Cloud, and S3 lives in AWS. But in multi-cloud environments, this pairing shows up constantly. You might rely on S3 for data lakes, logs, or backups, while your workloads scale on GKE. The trick is bridging those identities securely, without passing around long‑lived keys or leaking credentials between clouds.

The workflow is simpler than it looks. Each GKE workload can run under a Kubernetes service account linked to a Google Workload Identity. That identity can then assume a short-lived AWS IAM role using OIDC federation. The OIDC token from Google acts as proof of identity for AWS. In practice, the pod asks AWS for an access token, receives limited credentials, and then talks to S3. No static keys, no manual rotation, no environment variables that keep you up at night.

When it breaks, check the boring stuff first. Make sure the Kubernetes service account annotation matches the federated AWS IAM role ARN exactly. Verify the OIDC issuer URL in the IAM trust policy. And never, ever reuse credentials across namespaces. Those are the small details that cut off your access faster than any firewall.

Quick answer: To connect Google GKE to S3, use OIDC-based federation between your GKE service account and AWS IAM role. This issues temporary credentials that allow workloads in GKE to access S3 without storing secrets.

Continue reading? Get the full guide.

GKE Workload Identity + End-to-End Encryption: Architecture Patterns & Best Practices

Free. No spam. Unsubscribe anytime.

A few best practices worth repeating:

  • Use fine-grained IAM roles for S3 operations, not blanket “s3:*” permissions.
  • Rotate OIDC audiences per project for tighter scoping.
  • Log every AssumeRole event in CloudTrail and Google Cloud Audit Logs.
  • Keep your AWS IAM trust policy minimal. An extra wildcard there is basically a welcome mat.
  • Test federation flows regularly—failing silently is more common than you think.

Once configured correctly, the payoff is huge. Your GKE apps can read from and write to S3 without any secret sprawl. The audit trail is clear, security teams sleep better, and developers get a clean, declarative access model. It feels like magic, but it’s really just good identity plumbing.

Tools like hoop.dev turn those access rules into guardrails that enforce policy automatically. Instead of relying on hand‑written IAM glue, you define who can reach what, and hoop.dev keeps your endpoints compliant across clouds. That means fewer Slack approvals, faster onboarding, and zero uncertainty about who has access.

AI copilots are starting to leverage the same standardized identity paths. When they query S3 or trigger workloads in GKE, OIDC federation ensures the assistant acts only within approved boundaries. The same system that secures your pods now keeps your AI agents from wandering off into compliance hell.

Multi-cloud used to mean complicated. With a proper GKE-to-S3 federation, it means portable. Set it up once, trust it everywhere, and spend your weekends doing literally anything but credential cleanup.

See an Environment Agnostic Identity-Aware Proxy in action with hoop.dev. Deploy it, connect your identity provider, and watch it protect your endpoints everywhere—live in minutes.

Get started

See hoop.dev in action

One gateway for every database, container, and AI agent. Deploy in minutes.

Get a demoMore posts