Zugriffsschlüssel
Ein Zugriffsschlüssel besteht aus Access-Key-ID und Secret Key. Das Secret wird einmalig beim Anlegen oder Rotieren angezeigt und ist danach nicht mehr abrufbar. Wenn du es verlierst, rotiere den Schlüssel.
Schlüssel verwaltest du im Portal unter Storage → Zugriffsschlüssel.
Zwei Dinge, die ein Schlüssel trägt
Jeder Schlüssel hat zwei unabhängige Einstellungen:
- Geltungsbereich: welche Buckets er anfassen darf. Ein Schlüssel kann auf bestimmte Buckets eingeschränkt sein oder ohne Einschränkung jeden Bucket deines Kontos erreichen, auch später angelegte.
- Zugriffsstufe: was er auf diesen Buckets tun darf.
Ein eingeschränkter Schlüssel bekommt pro Bucket eine Stufe, ein Schlüssel kann also auf app-uploads lesen und schreiben und auf app-assets nur lesen. Ein uneingeschränkter Schlüssel hat eine einzige Stufe für das ganze Konto.
Zugriffsstufen
| Stufe | Kann | Kann nicht |
|---|---|---|
| Nur Lesen | Objekte herunterladen und auflisten | Hochladen, löschen, Einstellungen ändern |
| Nur Schreiben | Objekte hochladen, auch mehrteilig | Herunterladen, auflisten, löschen |
| Lesen und Schreiben | Alles aus Nur-Lesen und Nur-Schreiben, dazu Objekte löschen | Bucket-Einstellungen ändern |
| Voll | Alles, dazu Bucket-Einstellungen wie CORS |
Das ist keine einfache Rangfolge. Lesen-und-Schreiben darf Objekte löschen, was weder Nur-Lesen noch Nur-Schreiben darf. Nur-Schreiben ist nicht "Lesen-und-Schreiben ohne Lesen": es ist ein Briefkasten, und löschen darf es ebenfalls nicht.
Was wofür
- Nur Lesen für alles, was Dateien nach außen ausliefert oder synchronisiert: ein CDN, eine Lese-Replik, ein Reporting-Job.
- Nur Schreiben für alles, was ausschließlich Daten abliefert: ein Backup-Agent, ein Upload-Endpunkt in deiner Anwendung, ein Log-Versand. Ein abhandengekommener Nur-Schreiben-Schlüssel kann Gespeichertes weder lesen noch löschen.
- Lesen und Schreiben für einen allgemeinen Anwendungsschlüssel.
- Voll nur dort, wo CORS programmatisch geändert werden muss. Die meisten Anwendungen brauchen das nie.
Öffentliche Buckets kann jeder lesen
Ist ein Bucket öffentlich, lassen sich seine Objekte ganz ohne Schlüssel herunterladen. Ein Schlüssel mit Nur-Schreiben auf einem öffentlichen Bucket hindert weder sich selbst noch sonst jemanden am Lesen dieser Objekte. Die Stufe regelt den authentifizierten Zugriff, der Öffentlich-Schalter ist eine davon getrennte und deutlich weitergehende Freigabe.
Referenz nach Operation
Was jede Stufe erlaubt, nach S3-Operation.
| Operation | Nur Lesen | Nur Schreiben | Lesen und Schreiben | Voll |
|---|---|---|---|---|
HeadBucket, GetBucketLocation | ja | ja | ja | ja |
GetObject, HeadObject | ja | nein | ja | ja |
ListObjectsV2, ListObjectVersions | ja | nein | ja | ja |
PutObject, CopyObject (Ziel) | nein | ja | ja | ja |
| Mehrteiliger Upload, auch Abbruch | nein | ja | ja | ja |
DeleteObject, DeleteObjects | nein | nein | ja | ja |
GetBucketCors | ja | nein | ja | ja |
PutBucketCors, DeleteBucketCors | nein | nein | nein | ja |
CopyObject fasst zwei Buckets an und braucht beide Rechte: Lesen auf der Quelle und Schreiben auf dem Ziel. Hat ein Schlüssel auf beiden Buckets unterschiedliche Stufen, muss jede ihre Seite erlauben.
Zugriff eines Schlüssels ändern
Änderungen an Geltungsbereich oder Stufen greifen innerhalb von 5 Minuten. Wenn du einen Schlüssel gerade eingeschränkt hast und ihn testest, plan das ein, bevor du davon ausgehst, dass es nicht funktioniert hat.
Für das Löschen eines Schlüssels gilt dasselbe. Um Zugriff sofort und dauerhaft zu beenden, lösche den Schlüssel und rotiere alles, was sein Secret geteilt hat.
Was bei verweigertem Zugriff passiert
Eine Anfrage, die der Schlüssel nicht ausführen darf, liefert 403 AccessDenied.
Eine Anfrage auf einen Bucket außerhalb des Geltungsbereichs liefert 404 NoSuchBucket, genau wie ein Bucket, den es nicht gibt. Das ist Absicht: über einen eingeschränkten Schlüssel lässt sich nicht herausfinden, welche Buckets dein Konto hat.
Nicht unterstützte Operationen
Einige Bucket-Operationen aus S3 gibt es nicht und sie liefern auf jeder Zugriffsstufe 501 NotImplemented:
PutBucketAcl, PutBucketPolicy, PutBucketVersioning, PutBucketLifecycle, PutBucketEncryption, PutBucketWebsite, PutBucketNotification, PutBucketReplication, Object Lock, PutPublicAccessBlock, PutBucketLogging, Bucket-Tagging sowie die zugehörigen Get- und Delete-Varianten.
Für die konfigurierbaren Einstellungen nutze das Portal: öffentlicher Zugriff, und CORS über PutBucketCors.