Zum Inhalt springen

Services, Wiki-Artikel, Blog-Beiträge und Glossar-Einträge durchsuchen

↑↓NavigierenEnterÖffnenESCSchließen

Cloud IAM Security: AWS, Azure und GCP richtig absichern

Cloud Identity and Access Management Sicherheit: AWS IAM (Least Privilege, Permission Boundaries, Service Control Policies, IAM Access Analyzer), Azure RBAC + Entra ID (Custom Roles, Conditional Access, Managed Identities), GCP IAM (Workload Identity Federation, Organization Policies), Service Account Sicherheit, Cloud-native Secret Management (AWS Secrets Manager, Azure Key Vault, GCP Secret Manager), Cross-Cloud-Identitätsfoederation und CSPM-Integration.

Inhaltsverzeichnis (5 Abschnitte)

Cloud IAM ist anders als On-Premises-IAM: alles läuft über APIs, Berechtigungen sind granularer, und ein einziger falsch konfigurierter Service-Account kann zur vollständigen Cloud-Kompromittierung führen.

AWS IAM: Least Privilege umsetzen

AWS IAM Best Practices:

Root Account absichern:
  → Root Account: NUR für initiale Account-Einrichtung
  → Danach: MFA aktivieren + Access Keys löschen
  → Root: nie für tägliche Arbeit verwenden!
  → AWS Organizations: Root-Account isolieren

Principle of Least Privilege:
  # FALSCH: zu breite Policy
  {
    "Effect": "Allow",
    "Action": "*",        # Alles erlaubt!
    "Resource": "*"
  }
  
  # RICHTIG: minimale Rechte
  {
    "Effect": "Allow",
    "Action": [
      "s3:GetObject",
      "s3:PutObject"
    ],
    "Resource": "arn:aws:s3:::my-specific-bucket/*",
    "Condition": {
      "StringEquals": {
        "aws:RequestedRegion": "eu-central-1"  # Nur Frankfurt!
      }
    }
  }

IAM Access Analyzer:
  # Findet Ressourcen die öffentlich oder cross-account zugänglich sind
  aws accessanalyzer create-analyzer \
    --analyzer-name "company-analyzer" \
    --type ACCOUNT
  
  # Reports: welche S3-Buckets, SQS-Queues, KMS-Keys sind zu offen?
  aws accessanalyzer list-findings --analyzer-arn arn:aws:access-analyzer:...

Permission Boundaries:
  # Delegierte Administration: was darf ein Admin maximal vergeben?
  # Admin kann keine Rechte vergeben die er selbst nicht hat!
  aws iam create-policy --policy-name DevTeamBoundary \
    --policy-document file://dev-boundary.json
  
  aws iam put-user-permissions-boundary \
    --user-name developer1 \
    --permissions-boundary arn:aws:iam::ACCOUNT:policy/DevTeamBoundary

Service Control Policies (AWS Organizations):
  # SCP: Guard Rails für gesamte OU/Account
  # Verhindert bestimmte Aktionen ORG-weit
  {
    "Effect": "Deny",
    "Action": [
      "ec2:*",              # Kein EC2 in nicht-genehmigten Regionen
      "s3:CreateBucket"
    ],
    "Resource": "*",
    "Condition": {
      "StringNotEquals": {
        "aws:RequestedRegion": ["eu-central-1", "eu-west-1"]
      }
    }
  }

AWS: Service Accounts und Rollen

EC2 Instance Roles vs. Access Keys:

FALSCH: Access Keys in EC2-Instanz:
  → Hartgecodiert in Code → Gefahr wenn Code geleakt
  → In .env-Datei → Gefahr wenn Server kompromittiert
  → In S3 gespeichert → Gefahr wenn Bucket offen
  NIEMALS Access Keys in EC2/Lambda/Container!

RICHTIG: IAM Instance Profile:
  # EC2-Instanz: IAM Role zuweisen
  # Instanz greift automatisch auf Credentials zu (IMDS)
  # kein Hardcoding von Keys nötig!
  
  # In Code:
  import boto3
  s3 = boto3.client('s3')   # Automatisch Instance Role-Credentials!
  
  # Lambda: automatisch Execution Role
  # ECS/Fargate: Task Role
  # Kubernetes (EKS): IRSA (IAM Roles for Service Accounts)

IMDS v2 erzwingen (Security!):
  # IMDSv1: ohne Token (anfällig für SSRF!)
  # IMDSv2: Token-basiert (SSRF-resistent)
  
  aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-tokens required           # IMDSv2 erzwingen!
    --http-put-response-hop-limit 1  # Hop-Limit: kein Container-Escape!

AWS Secrets Manager:
  # Datenbankpasswörter, API-Keys sicher speichern:
  aws secretsmanager create-secret \
    --name "prod/db/password" \
    --secret-string "$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c32)"
  
  # Automatische Rotation:
  aws secretsmanager rotate-secret \
    --secret-id "prod/db/password" \
    --rotation-lambda-arn arn:aws:lambda:...
  
  # In Code (kein Hardcoding!):
  import boto3
  client = boto3.client('secretsmanager')
  secret = client.get_secret_value(SecretId='prod/db/password')

Azure RBAC und Entra ID

Azure Identity Best Practices:

Azure RBAC Grundprinzipien:
  → Scope: Management Group > Subscription > Resource Group > Resource
  → Je enger der Scope, desto besser!
  → Custom Roles wenn Built-in zu breit
  
  # FALSCH: Owner auf Subscription-Level
  # RICHTIG: Contributor nur auf spezifische Resource Group
  
  az role assignment create \
    --assignee user@company.com \
    --role "Storage Blob Data Contributor" \
    --scope "/subscriptions/SUB-ID/resourceGroups/rg-data/providers/Microsoft.Storage/storageAccounts/myaccount"

Managed Identities (kein Secret-Management nötig!):
  # System-assigned: 1:1 an Ressource gebunden
  # User-assigned: mehrere Ressourcen können teilen
  
  # Beispiel: App Service greift auf Key Vault zu:
  az webapp identity assign --name myapp --resource-group myrg
  
  # Key Vault Policy:
  az keyvault set-policy \
    --name mykeyvault \
    --object-id $(az webapp identity show --name myapp --query principalId -o tsv) \
    --secret-permissions get list
  
  # In Code: kein Passwort/Key nötig!
  from azure.identity import DefaultAzureCredential
  from azure.keyvault.secrets import SecretClient
  
  credential = DefaultAzureCredential()  # Automatisch Managed Identity!
  client = SecretClient(vault_url="https://mykeyvault.vault.azure.net", credential=credential)

Azure AD Conditional Access:
  # Zero-Trust: jeder Zugriff wird kontextbasiert geprüft
  
  Beispiel-Policy: "Admin-Zugriff nur von compliant Geräten":
  → Users: alle Global Admins
  → Apps: alle Cloud-Apps
  → Conditions: Device-Plattformen = alle
  → Grant: Require compliant device
              + Require MFA
              + Require Hybrid Azure AD joined
  → Session: Sign-in Frequency = 1h

GCP IAM und Workload Identity

Google Cloud IAM:

Grundprinzipien:
  → Google-Accounts für Personen
  → Service Accounts für Anwendungen (nie manuell verwendet!)
  → Workload Identity Federation: externe Identitäten ohne Keys

Service Account Best Practices:
  # FALSCH: Service Account JSON Key herunterladen und speichern
  # RICHTIG: Workload Identity (kein Key nötig!)

  # Service Account erstellen:
  gcloud iam service-accounts create webapp-sa \
    --description "Web App Service Account" \
    --display-name "webapp-sa"

  # Minimal-Permissions:
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:webapp-sa@PROJECT_ID.iam.gserviceaccount.com" \
    --role "roles/storage.objectViewer" \   # Nur lesen!
    --condition "title=bucket-condition,expression=resource.name.startsWith('projects/_/buckets/my-bucket')"

Workload Identity Federation (OpenID Connect):
  # Externer Service (GitHub Actions, Kubernetes) ohne Key!
  # GitHub Actions → GCP-Zugriff:
  
  # GitHub OIDC Provider registrieren:
  gcloud iam workload-identity-pools create "github-pool" \
    --location="global"
  
  gcloud iam workload-identity-pools providers create-oidc "github-provider" \
    --location="global" \
    --workload-identity-pool="github-pool" \
    --issuer-uri="https://token.actions.githubusercontent.com" \
    --attribute-mapping="google.subject=assertion.sub,attribute.repository=assertion.repository"
  
  # In GitHub Action:
  # id-token: write permission -> kein GCP-Key nötig!
  - uses: google-github-actions/auth@v2
    with:
      workload_identity_provider: "projects/123/locations/global/workloadIdentityPools/github-pool/providers/github-provider"
      service_account: "webapp-sa@PROJECT.iam.gserviceaccount.com"

Organization Policies:
  # Constraints für gesamte GCP-Organisation
  gcloud org-policies set-policy \
    --project=PROJECT_ID constraints/compute.requireOsLogin \
    --value=ENFORCE  # OS Login Pflicht für alle VMs

  gcloud org-policies set-policy \
    --project=PROJECT_ID constraints/iam.disableServiceAccountKeyCreation \
    --value=ENFORCE  # Keine Service Account Keys!

CSPM: Cloud Security Posture Management

Automatische Fehlkonfigurations-Erkennung:

Was CSPM prüft:
  → S3-Buckets öffentlich zugänglich?
  → MFA-Enforcement für Root Account?
  → Nicht genutzte IAM-Rollen + Access Keys
  → Unverschlüsselte Datenbanken/Speicher
  → Logging (CloudTrail, Activity Log) aktiv?
  → Netzwerk-Konfiguration: Security Groups zu offen?

CSPM-Tools:
  AWS Security Hub:
  → Eingebaut in AWS, kostenlos (Findings: $0,001/Eintrag)
  → Aggregiert: GuardDuty, Inspector, Macie, Config
  → CIS AWS Benchmark automatisch geprüft
  
  Microsoft Defender for Cloud:
  → Eingebaut in Azure
  → Secure Score: 0-100 (Ziel: >80)
  → Recommendations mit konkreten Fixes
  
  Wiz / Orca Security (kommerziell):
  → Multi-Cloud (AWS + Azure + GCP + K8s)
  → Attack Path Analysis: wie weit kommt ein Angreifer?
  → Sehr maechtig, aber teuer

  Checkov + Terraform (praeventiv):
  → IaC-Scanning bevor Deployment
  → Fehlkonfigurationen vor dem Deploy finden
  → S.o.: DevSecOps-Integration

Fragen zu diesem Thema?

Unsere Experten beraten Sie kostenlos und unverbindlich.

Erstberatung

Über den Autor

Chris Wojzechowski
Chris Wojzechowski

Geschäftsführender Gesellschafter

Geschäftsführender Gesellschafter der AWARE7 GmbH mit langjähriger Expertise in Informationssicherheit, Penetrationstesting und IT-Risikomanagement. Absolvent des Masterstudiengangs Internet-Sicherheit an der Westfälischen Hochschule (if(is), Prof. Norbert Pohlmann). Bestseller-Autor im Wiley-VCH Verlag und Lehrbeauftragter der ASW-Akademie. Einschätzungen zu Cybersecurity und digitaler Souveränität erschienen u.a. in Welt am Sonntag, WDR, Deutschlandfunk und Handelsblatt.

10 Publikationen
  • Einsatz von elektronischer Verschlüsselung - Hemmnisse für die Wirtschaft (2018)
  • Kompass IT-Verschlüsselung - Orientierungshilfen für KMU (2018)
  • IT Security Day 2025 - Live Hacking: KI in der Cybersicherheit (2025)
  • Live Hacking - Credential Stuffing: Finanzrisiken jenseits Ransomware (2025)
  • Keynote: Live Hacking Show - Ein Blick in die Welt der Cyberkriminalität (2025)
  • Analyse von Angriffsflächen bei Shared-Hosting-Anbietern (2024)
  • Gänsehaut garantiert: Die schaurigsten Funde aus dem Leben eines Pentesters (2022)
  • IT Security Zertifizierungen — CISSP, T.I.S.P. & Co (Live-Webinar) (2023)
  • Sicherheitsforum Online-Banking — Live Hacking (2021)
  • Nipster im Netz und das Ende der Kreidezeit (2017)
IT-Grundschutz-Praktiker (TÜV) IT Risk Manager (DGI) § 8a BSIG Prüfverfahrenskompetenz Ausbilderprüfung (IHK)
Dieser Artikel wurde zuletzt am 04.03.2026 bearbeitet. Verantwortlich: Chris Wojzechowski, Geschäftsführender Gesellschafter bei AWARE7 GmbH. Lizenz: CC BY 4.0 — freie Nutzung mit Namensnennung: „AWARE7 GmbH, https://a7.de

Cookielose Analyse via Matomo (selbst gehostet, kein Tracking-Cookie). Datenschutzerklärung