Seven Labs
Contact
Terug naar alle notities

Decentraliseerde IAM en Multi-Cloud Security: Zero Trust Bouwen op Schaal

Seven Labs
Seven Labs
·1 juni 2026·6 min read·4,366
AWS-US-EASTGCP-EU-WESTDECENTRALIZEDOIDC / IAMTRUST ENGINE

Decentraliseerde IAM en Multi-Cloud Security: Zero Trust Bouwen op Schaal

Het tijdperk van het traditionele beveiligingsmodel (castle-and-moat) is definitief voorbij. Wanneer je infrastructuur zich uitstrekt over AWS, GCP, Azure en on-premise omgevingen, bestaat er geen fysieke omtrek (perimeter) meer. In deze realiteit is Decentraliseerde IAM en Multi-Cloud Security niet zomaar een architectonisch patroon-het is de enige levensvatbare verdediging tegen laterale bewegingen (lateral movement) en geavanceerde supply chain-aanvallen. De identiteit van de aanvrager, of het nu een mens of een machine is, vormt de nieuwe grens.

De meeste organisaties falen hierin. Ze proberen verouderde, gecentraliseerde identity providers (IdPs) in dynamische, multi-cloud Kubernetes-clusters te proppen. Dit resulteert in kwetsbare integraties, overmatige machtigingen en single points of failure. In dit artikel ontleden we het probleem, stellen we een heldere architectuur voor en laten we precies zien hoe je dit implementeert zonder de ontwikkelsnelheid te schaden.

Het Probleem: De Valkuil van Gecentraliseerde Identiteit (Hub-and-Spoke)

Wanneer bedrijven voor het eerst een multi-cloudstrategie hanteren, routeren ze meestal alle authenticatie en autorisatie via één gecentraliseerde directory (bijv. Active Directory of een enkele Okta-instantie). Dit creëert de valkuil van gecentraliseerde identiteit (Hub-and-Spoke).

Elke service in AWS die toegang wil tot een database in GCP, moet zich authenticeren bij de centrale hub. Dit ontwerp introduceert drie kritieke nadelen:

  1. Latentie: Een microservices-architectuur die honderden interne API-aanroepen per seconde doet, kan zich de latentie van een extra netwerk-hop naar een centrale IdP niet veroorloven.
  2. Beschikbaarheid: Als de centrale IdP uitvalt, ligt de hele multi-cloudinfrastructuur direct plat.
  3. Blast Radius: Een gecompromitteerde centrale directory geeft een aanvaller direct de sleutels tot het hele koninkrijk, verspreid over alle clouds.

Je hebt identiteiten nodig die lokaal worden geverifieerd, maar globaal worden beheerd.

Waarom Decentraliseerde IAM en Multi-Cloud Security Moeilijk is

Het decentraliseren van identiteit betekent het distribueren van vertrouwen, en het distribueren van vertrouwen vereist cryptografische bewijzen die continu worden gevalideerd. Wanneer een workload in AWS EKS een object in een Google Cloud Storage-bucket moet lezen, hoe weet GCP dan dat het de AWS-pod kan vertrouwen?

De naïeve aanpak is het gebruik van statische inloggegevens met een lange levensduur (bijv. AWS Access Keys of JSON-bestanden voor GCP Service Accounts) die zijn opgeslagen in Vault of Kubernetes Secrets. Dit is een enorme anti-pattern. Statische inloggegevens lekken, ze worden zelden geroteerd en ze schenden het kernprincipe van Zero Trust: kortstondige (ephemeral), nauwkeurig afgebakende toegang.

De uitdaging ligt in het opzetten van workload identity federation tussen verschillende vertrouwensdomeinen. Je moet een identiteit in Domein A (AWS OIDC provider) koppelen aan een rol in Domein B (GCP IAM) zonder statische geheimen uit te wisselen.

De Voorgestelde Architectuur: Workload Identity Federation

Wij pleiten voor een architectuur waarin elke omgeving fungeert als zijn eigen Identity Provider (IdP) voor de workloads die er draaien. Deze lokale IdP's federeren vervolgens het vertrouwen met andere cloudomgevingen met behulp van OpenID Connect (OIDC).

Onze referentie-architectuur maakt gebruik van:

  • Kubernetes (EKS v1.30): Hosting van de workloads.
  • AWS IAM OIDC Provider: De lokale IdP voor EKS.
  • GCP Workload Identity Federation: Vertrouwt de AWS OIDC provider.
  • SPIFFE/SPIRE (v1.8.0): Voor interne service-to-service mTLS en de uitgifte van identiteiten.

In plaats van geheimen door te geven, vraagt de workload een token met een korte levensduur aan bij de lokale omgeving. Dat token is cryptografisch ondertekend door de lokale IdP. De doelomgeving (GCP) controleert de handtekening, koppelt de OIDC-claim aan een lokale GCP IAM-rol en verleent tijdelijk toegang.

Implementatie: AWS EKS naar GCP BigQuery

Laten we kijken naar een concrete implementatie. We hebben een data-ingestionservice draaien in een AWS EKS-cluster die gegevens moet schrijven naar een GCP BigQuery-dataset.

1. Configureer de AWS EKS OIDC Provider

Zorg er eerst voor dat je EKS-cluster een bijbehorende IAM OIDC provider heeft. Hierdoor kunnen Kubernetes service accounts IAM-rollen aannemen, maar nog belangrijker: het geeft ons een issuer-URL die GCP kan vertrouwen.

terraform
1# Terraform v1.8.0
2# AWS Provider v5.40.0
3
4data "tls_certificate" "eks" {
5  url = aws_eks_cluster.main.identity[0].oidc[0].issuer
6}
7
8resource "aws_iam_openid_connect_provider" "eks" {
9  client_id_list  = ["sts.amazonaws.com"]
10  thumbprint_list = [data.tls_certificate.eks.certificates[0].sha1_fingerprint]
11  url             = aws_eks_cluster.main.identity[0].oidc[0].issuer
12}

2. Maak de GCP Workload Identity Pool aan

In GCP maken we een Workload Identity Pool en een Provider aan. De Provider verwijst naar de AWS EKS OIDC issuer-URL. We koppelen de sub-claim (die de Kubernetes-namespace en de naam van het service account bevat) aan een Google IAM-subject.

terraform
1# GCP Provider v5.20.0
2
3resource "google_iam_workload_identity_pool" "aws_pool" {
4  workload_identity_pool_id = "aws-eks-pool"
5  display_name              = "AWS EKS Trust Pool"
6  description               = "Identity pool for EKS workloads"
7}
8
9resource "google_iam_workload_identity_pool_provider" "aws_provider" {
10  workload_identity_pool_id          = google_iam_workload_identity_pool.aws_pool.workload_identity_pool_id
11  workload_identity_pool_provider_id = "aws-eks-provider"
12  display_name                       = "AWS EKS OIDC Provider"
13  
14  attribute_mapping = {
15    "google.subject" = "assertion.sub"
16    "attribute.namespace" = "assertion['kubernetes.io']['namespace']"
17  }
18  
19  oidc {
20    issuer_uri = aws_eks_cluster.main.identity[0].oidc[0].issuer
21  }
22}

3. Bind het GCP Service Account

Nu maken we een GCP Service Account aan dat schrijfrechten heeft voor BigQuery, en we staan toe dat het specifieke Kubernetes Service Account (via de Identity Pool) dit account impersoneert.

terraform
1resource "google_service_account" "bq_writer" {
2  account_id   = "bq-writer-sa"
3  display_name = "BigQuery Writer Service Account"
4}
5
6resource "google_project_iam_member" "bq_data_editor" {
7  project = var.project_id
8  role    = "roles/bigquery.dataEditor"
9  member  = "serviceAccount:${google_service_account.bq_writer.email}"
10}
11
12resource "google_service_account_iam_member" "workload_identity_user" {
13  service_account_id = google_service_account.bq_writer.name
14  role               = "roles/iam.workloadIdentityUser"
15  
16  # The member string matches the Google subject mapping from the provider
17  # format: principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
18  member = "principal://iam.googleapis.com/${google_iam_workload_identity_pool.aws_pool.name}/subject/system:serviceaccount:data-ingest:bq-writer"
19}

4. De Applicatiecode

De applicatie die in EKS draait, gebruikt de Google Cloud SDK. De SDK detecteert automatisch het geprojecteerde service account token dat door EKS is geleverd, gebruikt dit om te authenticeren bij de GCP Workload Identity Pool en haalt een access token met een korte levensduur op voor het bq-writer-sa account. Er zijn geen statische sleutels nodig.

yaml
1# Kubernetes Service Account and Pod definition
2apiVersion: v1
3kind: ServiceAccount
4metadata:
5  name: bq-writer
6  namespace: data-ingest
7  annotations:
8    # Optioneel: Als je ook AWS-machtigingen nodig hebt
9    eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/bq-writer-role
10
11---
12apiVersion: v1
13kind: Pod
14metadata:
15  name: bq-writer-app
16  namespace: data-ingest
17spec:
18  serviceAccountName: bq-writer
19  containers:
20  - name: app
21    image: my-registry/bq-writer:v1.2.0
22    env:
23    # Tell Google SDK where to find the credential configuration
24    - name: GOOGLE_APPLICATION_CREDENTIALS
25      value: /var/run/secrets/google/credentials.json
26    volumeMounts:
27    - name: google-cloud-key
28      mountPath: /var/run/secrets/google
29    - name: k8s-token
30      mountPath: /var/run/secrets/tokens
31  volumes:
32  - name: google-cloud-key
33    configMap:
34      name: workload-identity-config
35  - name: k8s-token
36    projected:
37      sources:
38      - serviceAccountToken:
39          path: oidc-token
40          expirationSeconds: 3600
41          audience: sts.amazonaws.com # Of je GCP audience

Valkuilen om te Vermijden

De implementatie van deze architectuur is niet zonder risico's. Hier zijn de meest voorkomende fouten die we zien optreden wanneer teams decentraliseerde IAM adopteren:

1. Te Brede Claim-mapping

Bij het configureren van de attribute mapping voor de Workload Identity Provider moet je geen te brede claims mappen. Als je "google.subject" = "assertion.aud" mapt, sta je toe dat elke workload in het EKS-cluster het GCP service account kan impersoneren. Map altijd specifiek naar de sub (subject), die de namespace en de naam van het service account bevat (system:serviceaccount:namespace:sa-name).

2. Token-verloop Negeren

Geprojecteerde service account tokens in Kubernetes verlopen. Je applicatie moet in staat zijn om inloggegevens dynamisch opnieuw te laden. De meeste moderne SDK's regelen dit automatisch, maar aangepaste authenticatielogica cacht tokens vaak voor onbepaalde tijd. Dit leidt tot moeilijk te debuggen fouten wanneer het token na een uur verloopt.

3. Audit Logs Verwaarlozen

Decentralisatie kan het zicht belemmeren. Je moet audit logs van AWS CloudTrail, GCP Cloud Logging en je Kubernetes API-server aggregeren in een centrale SIEM. Als een workload identity gecompromitteerd is, moet je in staat zijn om de acties over cloudgrenzen heen te traceren. Zorg ervoor dat je de sub-claim uit het OIDC-token kunt correleren met de resulterende API-aanroepen in de doelomgeving.

Het Resultaat: Beveiliging als Versneller

De overstap naar een gefedereerde, gedecentraliseerde IAM-architectuur verandert de beveiligingshouding van een engineeringorganisatie fundamenteel.

Door statische inloggegevens te elimineren, roei je de belangrijkste vector voor supply chain-aanvallen uit. Wanneer een ontwikkelaar een nieuwe service toegang wil verlenen tot een cloud-overschrijdende resource, hoeft hij geen sleutel aan te vragen bij het securityteam. Ze schrijven simpelweg een Terraform-module om de vertrouwensrelatie op te zetten en het beleid te definiëren.

Beveiliging wordt code. Vertrouwen wordt tijdelijk. De infrastructuur wordt veerkrachtig. Dit is het enige juiste pad voor professionele engineeringteams die op schaal opereren.

Seven Labs Dienst

VAPT Penetratietesten & Cybersecurity

Wij testen systemen op kwetsbaarheden. Zie onze beveiligingsdiensten →
Loading...
Chat with us
Book a Call
Free · 30 min · No commitment

Book a Strategy Call

30 minutes. No sales pitch. We scope your project and tell you honestly if we're the right fit.