Ein einziger AWS Account ist ein ernsthaftes Risiko

Dein AWS Account ist eines der wertvollsten Dinge wenn du Applikationen in AWS betreibst. Wenn du nur einen einzigen AWS Account verwaltest stellt das ein ernsthaftes Sicherheitsrisiko dar. In diesem Artikel lernst du warum das ein Problem ist und wie du es lösen kannst.

Der riskante Standard: Ein einziger AWS Account

Ein einziger AWS Account verwaltet IAM Benutzer zusammen mit EC2 Instanzen, S3 Buckets, RDS Datenbanken und eine Menge andere Ressourcen die nötig sind um deine Applikation zu betreiben. Du hast im Grunde zwei Möglichkeiten dich als IAM Benutzer anzumelden: Über die webbasierte AWS Management Console (Benutzername + Passwort) oder AWS Access Credentials die von der CLI und SDKs verwendet werden. Die Abbildung verdeutlicht wie du dich mit einem einzigen AWS Account authentifizierst.

Ein einziger AWS Account

Wenn du im Terminal das AWS CLI verwendest, z.B.:

$ aws ec2 describe-instances

werden deine AWS Access Credentials die in der Regel im Benutzerverzeichnis im Irdner .aws gespeichert sind verwendet um deine Anfrage zu authentifizieren. Du authentifizierst dich im Hintergrund als ein IAM Benutzer. Der IAM Benutzer hat in den meisten Fällen AdministratorAccess, was so viel heißt wie der Benutzer darf alles. Was für einen Administrator am Anfang auch sinnvoll ist. Allerdings bist du in großen Problemen wenn deine AWS Access Credentials in die falschen Hände geraten.

Du kannst die Situation auf zwei Arten verbessern.

1. Nutze keinen Benutzer mit AdministratorAccess

Nach dem “principle of least privilege”, ist es sehr unwahrscheinlich das du AdministratorAccess benötigst was dir alle möglichen Aktionen erlaubt. PowerUserAccess ist eine Verbesserung, da es alles Aktionen erlaubt bis auf Interaktion mit dem IAM Service. Viel besser ist die Nutzung von ReadOnlyAccess als Standard und Schreibenden Zugriff nur wenn er wirklich benötigt wird. Aber das ist mit IAM Benutzern aufwändig umzusetzen. Du müsstest einen Benutzer für jedes “least privilege” anlegen und die entsprechenden Access Credentials auf deinem Rechner ablegen. Bei jeder Interaktion mit AWS must du dann den richtigen User verwenden. Das wird schnell sehr umständlich wenn mehrere Personen mit einer Vielzahl an AWS Services arbeiten.

2. Benutze Zwei-Faktor-Authentifizierung

AWS unterstützt Zwei-Faktor-Authentifizierung (MFA). Du kannst dein MFA Token entweder mit Hardware oder Software (App für dein Smartphone) erzeugen. Benutzername + Passwort oder AWS Access Credentials müssen dann zusammen mit einem 6-stelligen Token verwenden werden um einen IAM Benutzer zu authentifizieren. Dein AWS Account ist damit viel besser geschützt, da ein Angreifer zusätzlich dein MFA Device entwenden muss.

Lese weiter um zu lernen wie du diese Verbesserungen umsetzen kannst.

Trenne Verantwortungen mit einem Bastion Account

Statt nur einen einzigen AWS Account zu nutzen, legst du einen weiteren AWS Account an. Ich nennen diesen Account deinen Bastion Account. Der Bastion Account wird nur IAM Benutzer verwalten — ansonsten nichts. Die Abbildung verdeutlicht die Idee.

Bastion AWS Account

IAM Benutzer im Bastion Account sind stark eingeschränkt in ihren Rechten. Sie dürfen nur temporäre Crendentials erzeugen und eine IAM Rolle einnehmen. Lege dazu eine IAM Gruppe im Bastion Account an mit der Inline Policy:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "1",
        "Effect": "Allow",
        "Action": [
            "sts:AssumeRole"
        ],
        "Resource": "*",
        "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}}
    },
    {
        "Sid": "2",
        "Effect": "Allow",
        "Action": [
            "sts:GetSessionToken"
        ],
        "Resource": "*"
    }
]
}

Weiße diese Gruppe allen IAM Benutzern im Bastion Account zu. Stelle sicher, dass die IAM Benutzer sonst keine Policies zugewiesen haben!

Das erste Statement erlaubt einem IAM Benutzer eine IAM Rolle einzunehmen aber nur dann, wenn die Anfrage über MFA authentifiziert wurde. Das zweite Statement erlaubt einem Benutzer mit einem MFA-Token temporäre Credentials zu erzeugen. Schauen wir uns das genauer an.

Die sichere Lösung: MFA mit Rollen Delegation

Es wird Zeit die Lösung zusammenzufassen: Wie funktioniert es? Die folgende Abbildung demonstriert den kompletten Ablauf.

MFA mit Rollen Delegation

  1. Du hast AWS Access Credentials für deinen IAM Benutzer im Bastion Account auf deinem Rechner (normalerweise im BenutzerVerzeichnis im Ordner .aws oder in den Umgebungsvariablen abgelegt). Du stellst eine Anfrage an die AWS API um temporäre Credentials zu bekommen durch Angabe des MFA-Tokens. Wenn das MFA-Token valide ist wird eine temporäre Sitzung mit deinem IAM Benutzer im Bastion Account erzeugt.
  2. Du erhältst Access Credentials für diese Sitzung.
  3. Mit dem temporären Credentials kannst du jetzt eine IAM Rolle in einem anderen AWS Account einzunehmen. (Das war vorher nicht möglich, da das einnehmen einer Rolle nur für mit MFA authentifizierte Benutzer erlaubt ist.) Um eine Rolle in einem anderen Account einzunehmen muss die Rolle die Account-ID des Bastion Accounts explizit erlauben! Eine Rolle sollte nicht mehr Rechte als PowerUserAccess haben, also nicht Zugriff auf den IAM Service gewähren.
  4. Durch das einnehmen einer Rolle erhältst du neue temporäre Credentials die benutzt werden um AWS Anfragen zu authentifizieren.

Implementierung

Um diesen Prozess zu automatisieren kannst du unser mfacli Skript verwenden.

Lese mehr über Amazon Web Services

Amazon Web Services in Action

Willst du mehr über Amazon Web Services lernen? Andreas und Ich schreiben ein Buch mit dem Titel Amazon Web Services in Action. Das Buch erscheint in englischer Sprache und wird von Manning verlegt. Das Buch wurde für Entwickler und Administratoren mit Interesse an der DevOps Bewegung geschrieben. Du lernst wie du verteilte Anwendungen auf der Plattform die AWS bietet betreibst. Es werden keine AWS Kenntnisse vorausgesetzt.

Read on


Teilen

           

RSS

  RSS

Newsletter


Michael Wittig

Michael Wittig

Ich bin Autor von Author of Amazon Web Services in Action. Ich arbeite als Software Engineer und unabhängiger Berater mit dem Fokus auf AWS und DevOps. Engagiere mich!

Fehlt etwas in meinem Artikel? Ich freue mich auf dein Feedback! @hellomichibye oder michael@widdix.de.


Veröffentlicht am und aktuallisert am