Amazon Web Services

Ein einziger AWS Account ist ein ernsthaftes Risiko

Michael Wittig

(c) Shutterstock /  phoenixman

Ihr AWS Account ist eines der wertvollsten Dinge, wenn Sie Applikationen in AWS betreiben. Falls Sie allerdings nur einen einzigen AWS Account verwalten, stellt das ein ernsthaftes Sicherheitsrisiko dar. In diesem Artikel beschreibt Michael Wittig, warum das ein Problem ist und wie Sie es lösen können.

Der riskante Standard: Ein einziger AWS Account

Ein einziger AWS Account verwaltet IAM-Benutzer zusammen mit EC2-Instanzen, S3-Buckets, RDS-Datenbanken und einer Menge anderer Ressourcen, die nötig sind, um eine Applikation zu betreiben. Sie haben im Grunde zwei Möglichkeiten, sich als IAM-Benutzer anzumelden: über die webbasierte AWS Management Console (Benutzername + Passwort) oder über AWS Access Credentials, die von der CLI und den SDKs verwendet werden. Die folgende Abbildung verdeutlicht, wie man sich mit einem einzigen AWS Account authentifiziert.

Singe-AWS-Account-de

Wenn Sie im Terminal das AWS CLI verwenden, z.B.:

$ aws ec2 describe-instances

werden Ihre AWS Access Credentials, die in der Regel im Benutzerverzeichnis im Ordner .aws gespeichert sind, verwendet, um Ihre Anfrage zu authentifizieren. Sie  authentifizieren sich 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 sind Sie in großen Problemen, wenn Ihre AWS Access Credentials in die falschen Hände geraten.

Sie können die Situation auf zwei Arten verbessern.

1. Nutze keinen Benutzer mit AdministratorAccess

Nach dem „principle of least privilege“ ist es sehr unwahrscheinlich, dass Sie wirklich AdministratorAccess benötigen, was Ihnen alle möglichen Aktionen erlaubt. PowerUserAccess ist eine Verbesserung, da es bis auf Interaktionen mit dem IAM Service ebenfalls alle Aktionen erlaubt. Noch besser wäre die Nutzung von ReadOnlyAccess als Standard, während schreibender Zugriff nur gewährt wird, wenn er wirklich benötigt wird. Dies ist aber mit IAM-Benutzern aufwändig umzusetzen. Man müsste einen Benutzer für jedes „least privilege“ anlegen und die entsprechenden Access Credentials auf einem Rechner ablegen. Bei jeder Interaktion mit AWS müsste  dann der richtige User verwendet werden, was schnell sehr umständlich wird, wenn mehrere Personen mit einer Vielzahl an AWS Services arbeiten.

2. Benutze Zwei-Faktor-Authentifizierung

AWS unterstützt Zwei-Faktor-Authentifizierung (MFA). Sie können Ihr MFA Token entweder mit Hardware oder Software (App für Ihr 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. Ihr AWS Account ist damit viel besser geschützt, da ein Angreifer zusätzlich Ihr MFA Device entwenden muss.

Wie lassen sich diese Verbesserungen nun aber umsetzen?

Trenne Verantwortungen mit einem Bastion Account

Statt nur einen einzigen AWS Account zu nutzen, legen Sie einen weiteren an. Ich nenne diesen Account den „Bastion Account“. Der Bastion Account wird nur IAM-Benutzer verwalten — ansonsten nichts. Die untere Abbildung verdeutlicht diese Idee.

Bastion-Account-de

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. Legen Sie dazu eine IAM-Gruppe im Bastion Account mit der folgenden Inline Policy an:

{
"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ßen Sie diese Gruppe nun allen IAM-Benutzern im Bastion Account zu. Stellen Sie dabei sicher, dass den IAM-Benutzern sonst keine Policies zugewiesen wurden!

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: Die folgende Abbildung demonstriert den kompletten Ablauf.

MFA-with-Role-Delegation-Flow-de

  1. Sie haben AWS Access Credentials für Ihren IAM-Benutzer im Bastion Account auf Ihrem Rechner (normalerweise im Benutzerverzeichnis im Ordner .aws oder in den Umgebungsvariablen abgelegt). Sie stellen eine Anfrage an das AWS API, um durch Angabe des MFA-Tokens temporäre Credentials zu bekommen. Wenn das MFA-Token valide ist, wird eine temporäre Sitzung mit Ihrem IAM-Benutzer im Bastion Account erzeugt.
  2. Sie erhalten Access Credentials für diese Sitzung.
  3. Mit den temporären Credentials können Sie jetzt eine IAM-Rolle in einem anderen AWS Account einnehmen. (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 erhalten Sie neue temporäre Credentials, die benutzt werden, um AWS-Anfragen zu authentifizieren.

Implementierung

Um diesen Prozess zu automatisieren, können Sie unser mfacli-Skript verwenden.

wittig-meapWollen Sie mehr über Amazon Web Services erfahren? Andreas und Michael Wittig schreiben ein Buch mit dem Titel Amazon Web Services in Action. Das Buch erscheint in englischer Sprache und wurde für Entwickler und Administratoren mit Interesse an der DevOps-Bewegung geschrieben. Ohne Vorkenntnisse vorauszusetzen wird gezeigt, wie verteilte Anwendungen auf der AWS-Plattform betrieben werden.

Aufmacherbild: hand touch web service technology background von Shutterstock / Urheberrecht: phoenixman

Verwandte Themen:

Geschrieben von
Michael Wittig
Michael Wittig
Michael Wittig migrierte in einem kleinen Team die IT der ersten Bank in Deutschland komplett in die AWS-Cloud. Er hat einen starken Hintergrund im algorithmischen Handel, wo er tausende Gigabytes an Finanzmarkt­zeitreihen analysierte. Er benutzt die AWS-Cloud für die historische und Echtzeitanalyse von Finanzmarktdaten mit einer Vielzahl an Technologien und Programmiersprachen. Heute berät er zusammen mit seinem Bruder andere Unternehmen, wie sie die AWS-Cloud nutzen können, um ihren Datenschatz zu bergen, und er ist Entwickler der SaaS-Zeitreihen­datenbank „TimeSeries.Guru“.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: