Verwendung der AWS CLI (S3)
Mit der AWS CLI kannst Du einfach mit Deinem Object Storage interagieren. Hier findest Du praktische Beispiele, wie Du die CLI für Deine Buckets nutzen kannst.
Voraussetzungen
- Du besitzt einen User mit Access Key und Secret Key.
- Die AWS CLI ist auf Deinem System installiert. Falls nicht, lade sie von docs.aws.amazon.com/cli herunter.
Konfiguration der AWS CLI
1. Zugangsdaten konfigurieren
Konfiguriere Deine Zugangsdaten:
aws configure set aws_access_key_id YOUR_ACCESS_KEY
aws configure set aws_secret_access_key YOUR_SECRET_KEY
2. Endpoint und weitere Optionen konfigurieren
Setze die folgenden Optionen:
aws configure set default.endpoint_url https://storage.netways.cloud
aws configure set default.region de
aws configure set default.response_checksum_validation when_required
aws configure set default.request_checksum_calculation when_required
aws configure set default.s3.addressing_style virtual
Grundlegende Beispiele
1. Bucket auflisten
Zeige alle Buckets in Deinem Account an:
2. Datei hochladen
Lade eine lokale Datei in Deinen Bucket hoch:
3. Bucket-Inhalt anzeigen
Zeige alle Dateien in einem Bucket an:
4. Verzeichnis synchronisieren
Synchronisiere ein lokales Verzeichnis mit Deinem Bucket:
5. Datei herunterladen
Lade eine Datei aus dem Bucket herunter:
6. Dateien löschen
Lösche eine Datei aus dem Bucket:
7. Datei-Statistiken anzeigen
Zeige Details zu einer Datei an:
8. Öffentlichen Link erstellen
Erstelle einen temporären Download-Link (standardmäßig 3600 Sekunden gültig):
9. Bucket erstellen
Grundlegende Befehle für Bucket-Policies
Für die Verwaltung öffentlicher Zugriffe (anonymous access) müssen die Bucket Policies verwendet werden:
1. Aktuelle Policy anzeigen
2. Policy setzen
3. Policy löschen
Beispiele für gängige Policy-Szenarien
Policy-Typen
AWS S3 unterstützt komplexe Policies mit verschiedenen Berechtigungen:
s3:GetObject(nur Lesen)s3:PutObject(nur Schreiben)s3:*(volle Berechtigung)
1. Öffentlichen Lesezugriff erlauben
Erstelle eine policy.json Datei:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::mein-bucket/*"]
}
]
}
Dann anwenden:
2. Öffentlichen Schreibzugriff erlauben
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:PutObject"],
"Resource": ["arn:aws:s3:::mein-bucket/uploads/*"]
}
]
}
3. Vollständigen öffentlichen Zugriff erlauben
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::mein-bucket/*"]
}
]
}
4. Policy für bestimmten Prefix setzen
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::mein-bucket/öffentlich/*"]
}
]
}
5. Lesezugriff für bestimmte IP-Bereiche
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::mein-bucket/*"],
"Condition": {
"IpAddress": {"aws:SourceIp": ["192.0.2.0/24"]}
}
}
]
}
6. Zeitlich begrenzter Zugriff
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::mein-bucket/öffentlich/*"],
"Condition": {
"DateLessThan": {"aws:CurrentTime": "2023-12-31T23:59:59Z"}
}
}
]
}
Tipps & Hinweise
Sicherheitshinweise
- Öffentliche Schreibrechte sollten nur in Ausnahmefällen verwendet werden
- Prüfe Policies regelmäßig auf ihre Notwendigkeit
- Kombiniere Policies mit Bucket-Quotas, um unerwünschte Nutzung zu begrenzen
- Prüfe JSON-Policies immer auf Gültigkeit
- Teste neue Policies zunächst in nicht-produktiven Umgebungen
Tipp
Inkrementelle Änderungen der Policies:
Debugging
Füge den Parameter --debug zu Deinen Befehlen hinzu, um detaillierte Informationen zu erhalten, falls etwas nicht wie erwartet funktioniert.
Bucket Versioning
Aktivierung des Versionings
# Versioning aktivieren
aws s3api put-bucket-versioning --bucket mein-bucket --versioning-configuration Status=Enabled
# Status prüfen
aws s3api get-bucket-versioning --bucket mein-bucket
Arbeiten mit Versionen
# Alle Versionen eines Objekts anzeigen
aws s3api list-object-versions --bucket mein-bucket --prefix pfad/datei.txt
# Bestimmte Version herunterladen
aws s3api get-object --bucket mein-bucket --key pfad/datei.txt --version-id VERSION_ID ~/ziel/datei.txt
# Version löschen
aws s3api delete-object --bucket mein-bucket --key pfad/datei.txt --version-id VERSION_ID
Versioning deaktivieren
Object Lifecycle Management
Lifecycle-Regeln erstellen
1. Erstelle eine JSON-Konfigurationsdatei (lifecycle.json):
{
"Rules": [
{
"ID": "AutoDeleteTempFiles",
"Status": "Enabled",
"Filter": {
"Prefix": "temp/"
},
"Expiration": {
"Days": 7
}
},
{
"ID": "DeleteOldLogs",
"Status": "Enabled",
"Filter": {
"Prefix": "logs/"
},
"Expiration": {
"Days": 30
}
}
]
}
2. Regel anwenden:
aws s3api put-bucket-lifecycle-configuration --bucket mein-bucket --lifecycle-configuration file://lifecycle.json
Achtung
Ab der AWS CLI Version 2.23.0 besteht eine Inkompatibilität mit unserem Object Storage.
Fehlermeldung: Missing required header for this request: Content-MD5.
Du kannst das Problem umgehen, indem Du eine ältere AWS CLI Version (<=2.22.35) verwendest.
Lifecycle-Regeln verwalten
# Vorhandene Regeln anzeigen
aws s3api get-bucket-lifecycle-configuration --bucket mein-bucket
# Regel entfernen
aws s3api delete-bucket-lifecycle --bucket mein-bucket
Alternative: Unversionierte Objekte löschen
{
"Rules": [
{
"ID": "ExpireNonCurrentVersions",
"Status": "Enabled",
"NoncurrentVersionExpiration": {
"NoncurrentDays": 90
}
}
]
}
Erweiterte Expiration-Optionen
{
"Rules": [
{
"ID": "ExpireAtSpecificDate",
"Status": "Enabled",
"Filter": {
"Prefix": "project-archive/"
},
"Expiration": {
"Date": "2024-12-31T00:00:00Z"
}
}
]
}
Object Locking
Bucket mit Object Lock erstellen
Retention-Einstellungen
# Retention für ein Objekt setzen
aws s3api put-object-retention --bucket gesperrter-bucket --key pfad/datei.txt --retention '{ "Mode": "GOVERNANCE", "RetainUntilDate": "2025-01-01T00:00:00" }'
# Retention-Info abfragen
aws s3api get-object-retention --bucket gesperrter-bucket --key pfad/datei.txt
Legal Hold
# Legal Hold aktivieren
aws s3api put-object-legal-hold --bucket gesperrter-bucket --key pfad/datei.txt --legal-hold Status=ON
# Status prüfen
aws s3api get-object-legal-hold --bucket gesperrter-bucket --key pfad/datei.txt
Hinweise
Object Lock
- Einmal aktiviert, kann Object Lock nicht deaktiviert werden
- Retention-Perioden können nur verlängert, nicht verkürzt werden
Lifecycle Management
- Regeln werden typischerweise innerhalb von 24h ausgeführt
- Teste neue Regeln immer mit unkritischen Daten
Best Practices
- Kombiniere Versioning mit Lifecycle-Regeln für automatische Bereinigung
- Nutze Object Lock für Compliance-kritische Daten
- Dokumentiere alle Lifecycle-Regeln im Team