Ausgesperrt! - Vorsicht bei S3 Berechtigung per Bucket policy

This content is more than 4 years old and the cloud moves fast so some information may be slightly out of date.

AWS S3 bietet viele Möglichkeiten, den Zugriff zu regeln

S3 Buckets bieten flexible Möglichkeiten, Daten abzulegen und den Zugriff auf diese Daten zu beschränken. Dies für den öffentlichen (Internet) und internen Gebrauch. Über die normalen Berechtigungen (Permissions) lassen sich Berechtigungen ganz grob für “list” (Anzeigen), “upload/delete” (Schreiben), “view permissions” (Berechtigungen sehen) sowie “edit permission” (Berechtigungen schreiben) einstellen. Das reicht für viele Fälle, manchmal braucht man aber eine feinere Berechtigungsverwaltung, der bucket policy.

Die ist aber nicht ohne Fallstricke…

##Eine Bucket Policy ist nicht ohne Fallstricke**

Nimmt man das harmlos klingende Beispiel “Zugriff auf einen VPC Endpunkt beschränken”, so bekommt man folgende Beispiel Policy:

  {
    "Version": "2012-10-17",
    "Id": "Policy1415115909152",
    "Statement": [
      {
        "Sid": "Access-to-specific-VPCE-only",
        "Action": "s3:*",
        "Effect": "Deny",
        "Resource": ["arn:aws:s3:::examplebucket",
                      "arn:aws:s3:::examplebucket/*"],
        "Condition": {
          "StringNotEquals": {
            "aws:sourceVpce": "vpce-1a2b3c4d"
          }
        },
        "Principal": "*"
      }
    ]
  }

Die Werte sind in der Dokomentation gut beschrieben, hier will ich nur auf das gefährliche Element hinweisen: Mit dem “Effect” : “Deny” wird der Zugriff explizit verboten. Zusammen mit der Bedingung (Condition) Zeichenkette ungleich (StringNotEquals) schließt diese Policy alle Zugriffe aus, die diese Bedingung nicht erfüllen. Und das schließt den AWS Root Account mit ein! Macht man also bei der Erstellung so einer Policy den kleinsten Fehler, so kann man über die AWS Console nicht mehr auf den S3 Bucket zugreifen.

Zugriff wiederherstellen

Wie man dennoch wieder an die Daten herankommt, verraten wir hier:

  1. Kommandozeilenzugriff über die AWS CLI einrichten.
  2. Einen Access Key für root einrichten.
  3. Eine Policy, die den Zugriff erlaubt, wie im “Allow” Beispiel als Datei “policy.json” speichern
  4. Diese Policy einspielen
aws s3api put-bucket-policy --bucket MeinBucketName --policy file://policy.json_
  1. Jetzt sollte man über die Console wieder zugreifen können

“Allow” ist sicherer

Sicherer ist es, hier mit “Allow” zu arbeiten:

{
 "Version": "2012-10-17",
 "Id": "S3PolicyId1",
 "Statement": [
 {
 "Sid": "IPAllow",
 "Effect": "Allow",
 "Principal": "*",
 "Action": "s3:*",
 "Resource": "arn:aws:s3:::gg-blogartikel",
 "Condition": {
     "IpAddress": {
       "aws:SourceIp": "42.55.47.11/32"
     }
  }
 }
 ]
}

Mit dieser Policy wäre der Inhalt des Buckets auf die fiktive IP Adresse 42.55.47.11 beschränkt. Alle anderen Zugriff bekommen eine “Verboten” Meldung beim Zugriff: accessdenied Dieses Allow verbietet aber eben nicht den Zugriff über die AWS Console. Eine Besonderheit ist noch bei dem Feld “Ressource” zu beachten:

"arn:aws:s3:::gg-blogartikel"

Bezieht sich auf den gesamten Bucket. Will man sich auf alle Objekte im Bucket beziehen nimmt man:

"arn:aws:s3:::gg-blogartikel/*"

Zugriff auf den Bucket und alle Unterobjekte gibt man mit: "Resource": ["arn:aws:s3:::_`gg-blogartikel`_", "arn:aws:s3:::_`gg-blogartikel`_/*"],

Similar Posts You Might Enjoy

6 Tipps und Tricks für AWS Kommandozeilen Ninjas

Das AWS Command Line Interface (CLI) erlaubt es Ihnen AWS Services einfach und bequem zu verwalten. Mit dem CLI können Sie im Terminal interaktiv Aufgaben bewältigen ohne die AWS Management Console benutzen zu müssen, was einen höheren Automatisierungsgrad ermöglicht. Außerdem können Shell-Skripte mit der Hilfe des AWS CLI verwendet werden um Infrastruktur-Setups zu automatisieren. Ein Beispiel: mit einem kleinen Shell-Skript und der AWS CLI kann zum Beispiel am Ende des Boot-Prozesses einer EC2-Instanz ein EBS Volume verbunden oder ein DNS-Eintrag über Route 53 angepasst werden. - by Andreas Wittig

Call Center Service "Amazon Connect" mit Lambda Integration - Alles möglich?

Call Center Service “Amazon Connect” mit Lambda Integration Connect ist der neue Service von AWS, in dem man einfach in der Cloud ein Call Center mit eigener Rufnummer erstellen kann. Mit einer grafischen Oberfläche kann man dann mit wenig Programmierkenntnissen eigene telefonische Abläufe erstellen, Anrufe auf S3 aufzeichnen, Statistik über Cloudwatch machen usw.. Alle telefonischen Agenten können vollständig mit einem Browser und Rechner ohne Telefonanschluss arbeiten. Hier stellen wir im Beispiel, vor wie Connect mit eigenen Lambda Funktionen zusammenarbeitet. - by Gernot Glawe

Filter mit AWS CLI - effizient und hilfreich

Das die AWS CLI ein mächtiges und sehr hilfreiches Tool für die Kontrolle und das Monitoring einer Infrastruktur in AWS ist, ist allgemein bekannt. Oft hindern die vorhandenen umfangreichen Optionen und deren korrekter Syntax zur Ermittlung des gesuchten Ergebnisses eine häufigerer Nutzung der AWS CLI im täglichen Betrieb. In diesem Artikel wird gezeigt, wie durch den Einsatz des Parameters ’–filter’ häufig wiederkehrende Fragestellungen in Zusammenhang mit EC2 Instanzen effizient beantwortet werden können. - by Uwe Strahlendorf