Image

Image
von Raphael Eymann
Cloud Engineer

MFA-Anforderung für AWS-Root-Benutzer

Ab Ende März 2025 wird AWS Multi-Faktor-Authentifizierung (MFA) für alle AWS Organizations-Mitgliedskonten Root-Benutzer erzwingen. Benutzer haben die Möglichkeit, die MFA-Registrierung bis zu 35 Tage herauszuzögern, indem du die Aufforderung überspringst. Nach dieser Kulanzfrist ist die Registrierung für eine der folgenden MFA-Typen zwingend notwendig:

  • Passkeys und Sicherheitsschlüssel
  • Virtuelle Authentifikator-Anwendungen
  • Hardware-TOTP-Token

Weitere Einzelheiten findest du in der AWS-Dokumentation.

Herausforderungen bei mehreren AWS-Mitgliedskonten

Die Verwaltung der MFA-Registrierung für zahlreiche AWS Organizations-Mitgliedskonten kann eine anspruchsvolle Aufgabe sein, besonders wenn du fünfzig oder mehr Konten hast. Sobald du diese Aufgabe gemeistert hast, ist es entscheidend sicherzustellen, dass die richtigen Personen Zugang zu den Konten hast. Es gibt Fälle, in denen du dich als Root-Benutzer einloggen musst, beispielsweise beim Löschen einer S3-Bucket-Richtlinie.

Glücklicherweise bietet AWS eine Lösung mit der Durchsetzung der MFA-Registrierung.

Zentralisierten Root-Zugang aktivieren

Um zentralisierten Root-Zugang zu aktivieren, stelle sicher, dass du die folgenden Voraussetzungen erfüllen:

  • Verwalte deine AWS-Konten innerhalb von AWS Organizations.
  • Verfüge über die folgenden Berechtigungen:
    • iam:EnableOrganizationsRootCredentialsManagement
    • iam:EnableOrganizationsRootSessions
    • organizations:RegisterDelegatedAdministrator
    • organizations:EnableAwsServiceAccess

Du findest Dokumentationen zur Aktivierung dieser Funktionen innerhalb der AWS-Konsole oder AWS CLI.

Wir haben dies erfolgreich mit dem folgenden Terraform-Code implementiert:

resource "aws_organizations_organization" "this" {
 aws_service_access_principals = [
   "iam.amazonaws.com"
 ]
}
resource  {
 enabled_features = [
 "RootCredentialsManagement",
 "RootSessions"
 ]
}

Root-Anmeldedaten im grossen Massstab entfernen

Nach der Aktivierung des zentralisierten Root-Zugangs werden für die einzelnen AWS-Organisationsmitgliedskonten keine Änderungen vorgenommen. Der nächste Schritt besteht darin, die Root-Anmeldedaten für jedes AWS-Organisationsmitgliedskonto zu entfernen. Wenn du nur wenige Konten haben, kannst du diese Aufgabe über die AWS-Konsole durchführen:

  1. Melde dich bei der AWS Management Console an und öffne IAM.
  2. Wähle dich im Navigationsbereich Root-Zugangsverwaltung.
  3. Wähle einen Namen aus der Liste der Mitgliedskonten und klicke auf «Privilegierte Aktion durchführen».
  4. Wähle die privilegierte Aktion aus, die du im Mitgliedskonto durchführen möchtest:
    Wähle «Root-Anmeldedaten löschen», um den Root-Zugang von einem Mitgliedskonto zu entfernen. Diese Aktion löscht das Root-Benutzerkennwort, Zugriffsschlüssel, Signaturzertifikate und deaktiviert MFA für das Mitgliedskonto.
    Klicke auf «Root-Anmeldedaten löschen».

Weitere Informationen finden du in der AWS-Dokumentation zur Durchführung privilegierter Aufgaben auf AWS Organizations-Mitgliedskonten.

Da du nicht mehrere Konten gleichzeitig für privilegierte Aktionen auswählen kannst, kann das manuelle Entfernen der Root-Anmeldedaten über zahlreiche Konten zeitaufwendig sein und Stunden dauern. Um diesen Prozess zu vereinfachen, hat AWS ein Beispiel-Bash-Skript veröffentlicht. Dieses Skript wurde von uns angepasst, um auch Zugriffsschlüssel, MFA-Geräte und Signaturzertifikate zu löschen.

Wichtig: Verwende dieses Bash-Skript mit Vorsicht.

Stelle vor dem Ausführen des Skripts sicher, dass folgende Voraussetzungen erfüllt sind:

  • Installiere die AWS CLI.
  • Richte das Anmeldeprofil „root-access-management“ mit Berechtigungen ein, um alle erforderlichen Aktionen auszuführen.
#!/bin/bash

# Specify the account IDs to exclude (comma-separated)
EXCLUDED_ACCOUNTS="123456789"

# Specify the AWS profile to use
AWS_PROFILE="root-access-management"

# Set the role name and additional parameters
REGION="us-east-1"
TASK_POLICY_ARN="arn=arn:aws:iam::aws:policy/root-task/IAMDeleteRootUserCredentials"

# Function to handle errors
handle_error() {
 echo "Error on line $2: Command exited with status $1" >&2
 exit "$1"
}

# Get the list of accounts in the organization
ACCOUNTS=$(aws organizations list-accounts  --profile $AWS_PROFILE  --query 'Accounts[*].[Id]' --output text 2>&1) || handle_error $? $LINENO

# Open a CSV file for writing
: > root_user_deletion.csv  # Create an empty file
echo "AccountId,RootUserDeleted" >> root_user_deletion.csv

# Iterate over each account
for account_id in $ACCOUNTS; do
  # Check if the account is excluded
  if echo ",$EXCLUDED_ACCOUNTS," | grep -q ",$account_id,"; then
     echo "Skipping account $account_id as it is excluded."
     continue
 fi

# Check if the account is suspended
  account_status=$(aws organizations describe-account --account-id "$account_id" --query 'Account.Status' --output text --profile $AWS_PROFILE)
  if [ "$account_status" = "SUSPENDED" ]; then
   echo "Skipping account $account_id as it is suspended."
   continue
  fi

TARGET_PRINCIPAL="${account_id}"

# Assume the role
 assume_role=$(aws  sts assume-root \
    --profile "$AWS_PROFILE" \
    --region $REGION \
    --task-policy-arn "$TASK_POLICY_ARN" \
    --target-principal "$TARGET_PRINCIPAL" \
    --output json)
Durch die Befolgung dieser Schritte kannst du die Entfernung von Root-Anmeldedaten über mehrere AWS-Organisationsmitgliedskonten effizient verwalten.

Einschränkung des Root-Sitzungszugangs

Gewähre den Zugang zur Verwendung der neuen Root-Sitzungen mit AssumeRoot nur Administratoren und Automatisierungen, die dies benötigen. Gewähre innerhalb des Verwaltungskontos deiner Organisation und des delegierten Administratorkontos für Root-Management die Berechtigungen sts:AssumeRoot nur den Personen und Automatisierungen, die du benötigst.

Du kannst die Aktionen, die ein Administrator oder eine Automatisierungsprinzip durchführen kann, weiter einschränken, indem du den AWS Security Token Service (AWS STS) Bedingungsschlüssel sts:TaskPolicyArn verwendest, wie im folgenden Richtlinienausschnitt gezeigt:

{
  "Sid": "AllowLaunchingRootSessionsforS3Action",
  "Effect": "Allow",
  "Action": "sts:AssumeRoot",
  "Resource": "*",
   "Condition": {
      "StringEquals": {
        "sts:TaskPolicyARN":"arn:aws:iam::aws:policy/root-task/S3UnlockBucketPolicy"
      }
   }
}
  
  
Image

Das fehlende Bindeglied: So rufen Sie vollständige Dokumente mit AWS S3 Vectors ab

Viele Tutorials zu AWS S3 Vectors zeigen nur die halbe Wahrheit: Vektoren speichern klappt, aber wie kommst du wieder an deine kompletten Dokumente? In diesem Artikel erfährst du, wie du S3 Vectors mit einem S3 Bucket kombinierst und so eine echte End-to-End-Dokumentensuche aufbaust
zum Artikel
Image

Katastrophensicher dank moderner IT: Desaster Recovery mit Nutanix

Ausfälle passieren. Mit Nutanix DRaaS bist du vorbereitet: automatische Failover, schnelle Wiederherstellung und Hybrid-Cloud-Szenarien. Erfahre im Blog, wie du dein Unternehmen vor dem Ernstfall schützt.
zum Artikel
Image

Air-Gapped Backup Vault: Massgeschneiderte Lösung

Ein Totalausfall eines AWS-Kontos – und trotzdem bleiben deine Daten sicher? In unserem Blog zeigen wir, wie wir eine eigene Air-Gapped Backup Vault Lösung entwickelt haben, warum AWS Backup dafür nicht ausreichte und welche Stärken und Schwächen unser Ansatz hat.
zum Artikel
Image

Secured with vision: Vista relies on Rubrik for resilient IT

Ein IT-Ausfall im medizinischen Notfall? Für Vista Augenpraxen & Kliniken keine Option. Mit Amanox, Rubrik und den Schweizer Azure-Regionen ist die Datensicherung jetzt sicher, schnell und gesetzeskonform. Mehr dazu im Blog.
zum Artikel