Zum Inhalt

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:

aws s3 ls

2. Datei hochladen

Lade eine lokale Datei in Deinen Bucket hoch:

aws s3 cp ~/meine-datei.txt s3://mein-bucket/

3. Bucket-Inhalt anzeigen

Zeige alle Dateien in einem Bucket an:

aws s3 ls s3://mein-bucket/

4. Verzeichnis synchronisieren

Synchronisiere ein lokales Verzeichnis mit Deinem Bucket:

aws s3 sync ~/mein-verzeichnis s3://mein-bucket/backup

5. Datei herunterladen

Lade eine Datei aus dem Bucket herunter:

aws s3 cp s3://mein-bucket/meine-datei.txt ~/Downloads/

6. Dateien löschen

Lösche eine Datei aus dem Bucket:

aws s3 rm s3://mein-bucket/meine-datei.txt

7. Datei-Statistiken anzeigen

Zeige Details zu einer Datei an:

aws s3api head-object --bucket mein-bucket --key meine-datei.txt

Erstelle einen temporären Download-Link (standardmäßig 3600 Sekunden gültig):

aws s3 presign s3://mein-bucket/meine-datei.txt --expires-in 86400

9. Bucket erstellen

aws s3 mb s3://mein-bucket2

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

aws s3api get-bucket-policy --bucket mein-bucket

2. Policy setzen

aws s3api put-bucket-policy --bucket mein-bucket --policy file://policy.json

3. Policy löschen

aws s3api delete-bucket-policy --bucket mein-bucket

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:

aws s3api put-bucket-policy --bucket mein-bucket --policy file://policy.json

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:

aws s3api get-bucket-policy --bucket mein-bucket --output text > current.json
# Bearbeiten der Datei
aws s3api put-bucket-policy --bucket mein-bucket --policy file://current.json

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

aws s3api put-bucket-versioning --bucket mein-bucket --versioning-configuration Status=Suspended

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

aws s3api create-bucket --bucket gesperrter-bucket --object-lock-enabled-for-bucket

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 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