AWS S3 Bucket einer Elastic Beanstalk Application löschen

Ich hatte mich eine Weile mit EC2, S3 Bucket-Storage und allerhand anderen Funktionen von Amazon Web Services auseinandergesetzt, um mögliche neue Lösungswege für verschiedenste Aufgaben zu entdecken. Dabei ist es manchmal nicht ganz so einfach, die Mechanismen zu verstehen, die im Hintergrund von AWS werkeln, vor allem, wenn man in der GUI eine Aktion auslöst, die jedoch stillschweigend ignoriert wird.

So erging es mir beim Löschen eines S3 Buckets. Für die AWS-Profis unter Euch gilt das Nachfolgende vermutlich als Peanuts, aber vielleicht hilft dieser Tipp ja doch dem einen oder anderen.

S3 Bucket

Grundsätzlich ist das Löschen eines manuell erstellten S3 Buckets ja kein Problem, sofern Ihr der Besitzer dieses Buckets seid. Wenn wir mal die AWS Command Line Tools beiseite lassen und lediglich im Browser arbeiten, loggt man sich an der AWS Console an, ruft die S3 Management Console auf und hat dann Zugriff auf die Container. So ein Container bzw. logisches Verzeichnis kann dann markiert und über die Schaltfläche „Delete Bucket“ entfernt werden. Eigentlich ganz einfach.

Besonderheit: Elastic Beanstalk

Schwieriger wird es, wenn ein Elastic Beanstalk Projekt automatisch ein S3 Bucket angelegt hat. Bei meinen Spielereien blieb der Bucket auch nach Entfernen der gesamten Elastic Beanstalk Application in S3 zurück.

Amazon S3 Bucket Übersicht
Der elasticbeanstalk-Bucket war hartnäckig!

Die Schaltfläche zum Löschen war aktiv und schien zu funktionieren – der Bucket wurde jedoch nur geleert und nicht vollends gelöscht. Auch mehrmaliges Löschen half nicht – auch ein paar Stunden des Wartens brachten keine Änderung.

AWS Policies

Dann hatte ich letzten Endes den Übeltäter doch noch gefunden. Die Lösung ist in den AWS Policies zu suchen. Offenbar legt Elastic Beanstalk einen Bucket mit speziellen Berechtigungen an, um versehentliches Löschen zu verhindern. Darauf musste ich erst mal kommen.

Amazon S3 Bucket Policy
Hier muss „Deny“ zu „Allow“ geändert werden, um das Löschen zu ermöglichen.

Wie im Screenshot zu sehen ist, könnt Ihr nach Auswahl des Buckets über den Reiter Permissions auf das Untermenü Bucket Policy zugreifen. Hier wird explizit mittels Effect: Deny definiert, dass das Löschen für alle Accounts untersagt ist.

{
  "Sid": "eb-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "Effect": "Deny",
  "Principal": {
    "AWS": "*"
  },
  "Action": "s3:DeleteBucket",
  "Resource": "arn:aws:s3:::elasticbeanstalk-xxxxxxxxxxxxxxxxxxxxxx"
}

Die Lösung besteht nun also schlicht darin, aus dem Deny ein Allow zu machen. Also so:

{
  "Sid": "eb-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "Effect": "Allow",
  "Principal": {
    "AWS": "*"
  },
  "Action": "s3:DeleteBucket",
  "Resource": "arn:aws:s3:::elasticbeanstalk-xxxxxxxxxxxxxxxxxxxxxx"
}

Danach könnt Ihr die Policy speichern und den Löschvorgang erneut starten. Bei mir führte die Änderung direkt zum gewünschten Erfolg und der Bucket war prompt verschwunden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.