Die Sache mit Kosten für AWS S3 ist ja eine Geschichte voller Missverständnisse. Doch diese Woche ist auch an uns der Post von Maciej Pocwierz mit dem Titel “How an empty S3 bucket can make your AWS bill explode“ nicht spurlos vorüber gegangen. Klang zunächst reißerisch, ist in der Sache aber leider korrekt. Jeff Barr persönlich meldete sich zügig auf Twitter / X zu Wort und versprach baldige Hilfe zum Schutz vor künftigen, ähnlichen Angriffsszenarien.
Wir nehmen das heute zum Anlass, um Licht ins Dunkel zu bringen und beleuchten dabei Sicherheits- und Kostenaspekte beim Einsatz von Amazon S3. Und die Tipps darfst du gern ausprobieren und selbst umsetzen.
Faktencheck und ein bisschen Detailwissen
S3 ist einer der ältesten Webservices von Amazon überhaupt. Er ist public by design, was bedeutet, dass man grundsätzlich jedes namentlich bekannte Bucket wie folgt aufrufen kann:
## "Path Style": https://s3.<region>.amazonaws.com/<bucket>/<key> ## "Virtual Host Style" https://<bucket>.<region>.s3.amazonaws.com/<key>
Das heißt: kennt man den Namen und die Region des Buckets, kann man versuchen, auf diesen und seine Inhalte (Dateien) per HTTPS zuzugreifen.
So verringerst du die Wahrscheinlichkeit, dass jemand Bucket-Namen errät:
uuidgen | cut -d"-" -f1,2,3 | tr 'A-Z' 'a-z'
Achtung: die maximale Länge des Namens darf 63 Zeichen nicht überschreiten!
Wie funktioniert überhaupt die S3-Abrechnung?
Abgerechnet wird hier nach S3 Storage Class, Datenvolumen und Transfer.
Ein Beispiel: Ein 20 GB großer Bucket in Frankfurt mit jeweils 2,5 Mio. PUT & GET Requests pro Monat – was in der Tat schon große Menge Request ist – schlägt wie folgt zu Buche …
Tiered price for: 20 GB 20 GB x 0.0245 USD = 0.49 USD Total tier cost = 0.49 USD (S3 Standard storage cost) 2,500,000 PUT requests for S3 Standard Storage x 0.0000054 USD per request = 13.50 USD (S3 Standard PUT requests cost) 2,500,000 GET requests in a month x 0.00000043 USD per request = 1.075 USD (S3 Standard GET requests cost) 0.49 USD + 1.075 USD + 13.50 USD = 15.06 USD (Total S3 Standard Storage, data requests, S3 select cost) S3 Standard cost (monthly): 15.06 USD
Kurz erwähnt sei die noch relativ neue Storage Class “Express One”. Sie bietet teilweise weniger Features als andere Classes, ist aber rasend schnell und z. B. interessant für Generative AI/ML-Daten. Mehr zu Express One findet ihr in unserem Blog.
Best Practices für mehr Sicherheit und Kostenkontrolle in AWS S3
Block Public Access
Das verhindert zwar keine unautorisierten Zugriffsversuche, schützt aber in jedem Fall deine Daten im Bucket. Denn: Ohne entsprechende Berechtigung kommt man schlicht nicht “rein”.
Du kannst diese Einstellung global pro Account oder pro Bucket aktivieren.
Buckets immer als private
konfigurieren, wenn sie nicht öffentlich zugänglich sein sollen (was im Übrigen selten der Fall sein sollte!). Anders gesagt: lasse nur authentifizierten Zugriff auf deine Buckets zu. In der AWS Management Console findest du diese Account-weite Einstellung hier:
Programmatisch geht das auch, und zwar so …
resource "aws_s3_account_public_access_block" "s3_control" { block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true }
aws s3control put-public-access-block \ --account-id <value> \ --public-access-block-configuration \ '{"BlockPublicAcls": true, \ "BlockPublicPolicy": true, \ "IgnorePublicAcls": true, \ "RestrictPublicBuckets": true \ }'
IAM Access Analyzer spürt External Access auf
Dieser kostenlose Service ist unter IAM zu finden und pro Region aktivierbar.
Damit kannst du über deine gesamte AWS-Organisation mögliche, unbeabsichtigte Zugriffe analysieren und beheben.
Beispiel-Finding gefällig? Hier sitzt ein S3 Bucket offenbar hinter einer CloudFront-Distribution:
Regelmäßiges Aufräumen von Partial Uploads
- Sie entstehen durch fehlerhafte Uploads und belegen unnötigen Datenspeicher
- Storage Lens unterstützt dabei solche Daten in den Buckets zu finden, mit Hilfe von S3 Lifecycle Rules können diese auch automatisiert entfernt werden
Durch die Lupe geschaut: Storage Lens Dashboard
Das Dashboard hilft dir dabei, Daten im S3 zu analysieren und zu verstehen. Daraus können Rückschlüsse gezogen werden, um Kosten einzusparen:
- 60 Metriken sind für die Analyse kostenlos
- Advanced-Metriken kosten extra
Housekeeping S3 Focus Session
Widme eine ganze Housekeeping-Session dem Thema S3 allein. Vermittle deinem Team die Wichtigkeit von Kosten & Sicherheit bei der Nutzung von S3. Und bringe am besten alle Tipps aus diesem Beitrag mit.
Cost Explorer: S3 Usage Reports
Behalte stets den Überblick über die S3-Ausgaben & -Nutzung.
Mit Hilfe von Cost Allocation Tags kannst du darüber hinaus noch detaillierter hinter die Kulissen blicken: Buckets können dann z. B. gezielt Teams, Projekten oder Kostenstellen zugeordnet werden.
Im folgenden Beispiel gruppieren wir die S3-Nutzung & -Ausgaben über die letzen 6 Monate:
Versionierung von Objekten ist eine prima Sache: versehentlich veränderte Dateien können so einfach wiederhergestellt oder zum Vergleich genutzt werden. Was aber, wenn sich viele Objekte (Dateien) sehr häufig ändern? Dann haben wir u. U. hunderte Objektversionen … und das wirkt sich natürlich auch auf die Kosten aus!
Lifecycle Rules helfen dir dabei, vollautomatisch ältere Versionen in günstigere Speicherklassen zu verschieben oder gar zu löschen. Und natürlich bleibt die aktuellste Version trotzdem immer erhalten!
In aller Kürze: Im programmatischen Umfeld immer die Region setzen!
Hier ein Beispiel, in dem ein HTTP Redirect (Location Header) ausgelöst wird:
Der Bucket liegt standardmäßig in der Region eu-central-1
.
Der Entwickler hat keine Region gesetzt und sein Code wird zufällig in der Region eu-west-1
ausgeführt. Er möchte nun auf den Bucket zugreifen – AWS generiert passend zur aktuellen Region die URL https://s3.eu-west-1.amazonaws.com/<bucket>
, was zum besagten Redirect führt, da der Bucket eigentlich in https://s3.eu-central-1.amazonaws.com/<bucket>
angelegt ist.
Das ist nur ein einfacher Redirect mit sehr geringen Daten. Man stelle sich nun folgendes vor: bei jedem Zugriff auf das System – sei es durch die Benutzer, durch Cronjobs oder im schlimmsten Fall auf Grund eines unbekannten Bugs – wird dieser Redirect ausgeführt … Daraus werden schnell millionenfache Aufrufe, die dann spürbare Kosten verursachen.
Damit werden sämtliche Zugriffe ebenfalls in S3 geloggt. Du kannst die entstandenen Logfiles später auswerten, etwa mit Athena. Denk auch hier an die Lifecycle Rules!
Die Wahrheit am Ende
Richtig kontrollieren können wir S3 Requests und unerwünschten Traffic nur mittels AWS Shield Advanced oder CloudFront in Kombination mit WAF. Diese Services sind kostenintensiv, können aber im Bedarfsfall auch DDoS-Attacken mitigieren.
Mehr Infos dazu:
Schreibe einen Kommentar