👁️
pierreinside
  • Introduction
  • Workbench
    • VirtualBox
    • Linux
      • Linux-Paketverwaltung
      • Linux Initialisierung
      • Ubuntu 14.10 LTS
      • Ubuntu 16.04 LTS
      • Ubuntu 18.04 LTS
      • Ubuntu 20.04 LTS
      • Ubuntu - Netzwerk
    • Konsole
      • ssh
      • zsh
      • cygwin
      • Babun
      • terminator
      • Terminal Multiplexer
      • Linux Tools
    • awesome
    • Entwicklungsumgebungen
      • Texteditors
      • Visual Studio Code
      • IntelliJ - IDEA
  • Softwareentwicklungsprozess
    • Schätzungen
    • Eventstorming
    • OKR
  • Architektur
    • Uncle Bob
    • Microservices
    • NoSQL
      • ElasticSearch
    • Hystrix
    • Reactive Programming
    • AngularJS
    • Service Mesh
  • Networking
    • Dependency Injection
  • Programming
    • Java Core/EE
      • Java 8
      • Java Annotationen
      • Bean Validation
      • Enterprise Java Beans Specification
      • Dependency Injection
    • JRebel
    • Webservices
      • HTTP
      • REST
      • Spring MVC REST
      • Swagger
      • Postman
    • Spring Ecosystem
      • Spring Core
      • Spring Boot
        • Programming
        • Production Ready
        • Testing
      • Spring Cloud
      • Spring Cloud Config
      • Spring MVC
      • Spring Data
      • Spring Petclinic
    • NodeJS
    • UI-Technologie
      • Thymeleaf
      • ionic
      • Web Fonts
      • Jinja Templates
      • Twitter Bootstrap
    • Python Ecosystem
      • Python Libraries
      • Python Testing
      • Python Best-Practices
      • Python Snippets
      • Python Selenium
      • Kivy UI
      • FastAPI
      • Typer CLI
      • Django
    • Groovy
    • Persistenz
      • Transactions
        • Java TX
        • JPA TX
      • TX Handling
      • JPA
        • Eclipse Link
      • MySQL
        • MySQL Performance
        • Docker MySQL
      • Hazelcast
    • Glassfish
    • YAML
    • Angular
    • Camel
    • Zeichenkodierung
    • Kinder lernen Programmieren
  • Testen
    • Easymock
    • Mockito
  • Performance & Scalability
    • Java Performance
      • Heapdump Analysis
    • Java Concurrency
    • Instana
  • Sicherheit
    • Authentifizierung
      • OpenID Connect
      • Web-Authentication API
    • Authorisierung
      • OAuth
      • SAML
    • Spring Security
    • Zertifikate
    • Kali Linux
    • VPN
    • Zero-Trust-Networks
  • Build und Deployment
    • Maven
    • Bamboo
    • Jenkins
      • Jenkins Pipelines
      • Jenkins Pipelines Tips und Tricks
      • Jenkins-configuration-as-Code
      • Jenkins IDE
    • Travis CI
    • Shellprogrammierung
      • jq - JSON Parsing
    • Konfiguration Management
    • Vagrant
      • Vagrant-Ansible-Integration
      • Vagrant Box bauen
    • Ansible
      • Getting Started
      • Ansible Details
    • Saltstack
    • LinuxKit
    • Container
      • Docker
        • Docker Getting Started
        • Debugging Docker
        • Docker Build
        • Docker Registry
        • Docker run
          • docker run
          • docker network
        • Docker Compose
        • docker machine
        • Docker@Windows
        • Docker Host
        • Docker Scaling
        • Docker Ressources
        • Docker Logging
        • windowsContainer
      • Cloud Deployment Provider
        • AWS
          • Anwendungsdeployment
          • Workload
          • Permissions
          • Netzwerke
          • AWS CLI
            • aws-vault
          • RDS
          • Static Website Hosting
          • EKS - Elastic Kubernetes Service
          • S3
        • Google Cloud Platform
      • Docker Orchestrierung
        • CoreOS
        • Kubernetes
          • microK8s
          • minikube
          • autoscaler
          • Docker
          • k9s
        • Nomad
    • PHP
  • Operations
    • Proxy
      • NGINX
    • DNS
    • Logging
      • Graylog
      • Fluentd
    • Monitoring
      • Grafana
    • Infrastructure-as-Code
      • Terraform
        • AWS-Provider
        • GitHub-Provider
      • Packer
    • Deployment
      • Vault
      • Consul
        • Consul Template
      • Fabio
  • Rechtliches
    • Software-Lizenzen
  • Git Ecosystem
    • Git
      • Git Lifecycle Hooks
    • GitHub
      • GitHub Organizations
    • GitHub Actions
    • GitHub Pages
    • GitHub CLI
    • GitHub Copilot
    • GitHub-AWS OIDC
    • GitBook
    • GitLab
    • Bitbucket/Stash
  • Publishing
    • WordPress
    • Markdown
    • Static Site Generators
      • Hugo
      • Jekyll
    • Tiddly Wiki
    • Leanpub
    • Animationsfilme
  • Storage
    • Synology 2012
    • Synology 2021
  • Collaboration
    • Übersicht
    • Microsoft Teams
  • Konferenzen
    • Velocity Berlin 2019
  • IT mit Kindern
    • Projekt Sportstracker
    • Scratch
    • Pico Spielekonsole
  • Schule
    • Mathematik
  • Misc
    • Foto/Video
      • Foto/Video Sammlung bis 2023
        • Handbrake
        • Onedrive
      • Foto/Video Sammlung ab 2024
      • Gopro
      • Panasonic FZ1000 ii
        • als Webcam
      • AV Receiver
      • Videos erstellen
        • OBS Studio
        • Touch Portal
        • Game-Streaming
      • Kameratasche
      • Kamera 2020
    • Handy
      • 2016
      • 2018
      • 2019
      • 2021
      • 2022
    • Computer
      • Laptop
        • 2018
        • Chromebook
      • Monitor
        • 4k
      • Software
        • Command Line Interface
        • Google API
        • Plant UML
        • Chromium
        • Passwort-Manager
        • GPG
      • Dell CNF 2665 Farbdrucker
      • Dockingstation
      • Gaming PC 2021
      • Mobiles Büro
      • Mobiles Internet
      • Mobiler Router
    • Beamer Benq W1000+
    • Spielekonsole
      • 2017
        • Playstation 4
      • Pico Spielekonsole
    • Gadgets
      • iPad Pro 2015 und 2016
      • iPad Air 2024
      • Macbook Pro
      • Smartwatch
      • Slate
      • Mudi
    • Fahrrad
      • Jonas 2018
      • SQLab
    • Auto
      • Auto 2022
      • Camping
        • Camping Touren Ideen
          • Camping Tour - Gardasee 2021
        • Camper
          • Camper klein - keine Stehhöhe
            • VW Bus Erfahrungen
          • Camper gross - Stehhöhe
    • Haus
      • Klimaanlage
      • Swimming Pool
      • Quick Mill Orione 3000
      • Spülmaschine 2021
      • Hebe-Schiebetür
      • Gasgrill
      • Minibar / Mini-Kühlschrank
      • Glasfaseranschluss (Fiber-to-the-Home)
      • Smart-Home
        • Raspberry Pi
        • Heimnetzwerk
      • Homeoffice
      • Energie
        • Solar
        • Wärmepumpe
    • Freizeit
      • Musik Streaming
      • Sky
      • Online Lernplattformen
      • eScooter - ePowerFun
    • Fußball
      • Meine Arbeit als Fußball-Trainer
      • Fußball Tools
      • DFB Talentförderung
    • Google Impact Challenge
  • Englisch
Powered by GitBook
On this page
  • AWS S3
  • Versionierung
  • 2FA für Löschungen
  • Lock
  • Tagging
  • Private vs Public
  • Bucket Policy vs ACL
  • Static Website
  • Presigned URLs
  • S3 für Big-Data
  • AWS CLI
  • aws s3 mv vs aws s3 sync
  • Minio

Was this helpful?

  1. Build und Deployment
  2. Container
  3. Cloud Deployment Provider
  4. AWS

S3

AWS S3

Hierbei handelt es sich im wesentlich um ein Network-Filesystem, das aus weltweit eindeutigen Buckets besteht, die wiederum Dateien (= Objects) enthalten. Strenggenommen kennt S3 keine Folder - das was den Anschein eines Folders macht ist in Wahrheit nur ein Namensprefix.

Diese Buckets können

  • versioniert

  • verschlüsselt

  • repliziert (intra-Account + Cross-Account)

  • auf andere Speichermedien ausgelagert (um Kosten zu sparen)

Bucket sind privat oder öffentlich.

Das besondere an Buckets ist, dass sie in einer Region gespeichert werden (die Latency wird dadurch evtl. negativ beeinflusst), der Name aber global eindeutig sein muss. Durch die Eindeutigkeit durch den Namen ist die ARN eines Buckets sehr einfach z. B. arn:aws:s3:::reportbucket987966 ... hier sind keine AWS-Account-ID und Region enthalten - über den Namen kann AWS das dann leicht sehr herausfinden (wenn nötig).


Versionierung

Versionierung wird auf dem Bucket enabled ... nicht auf einzelnen Objekten. Schaltet man irgendwann die Versionierung auf einem Bucket ein, dann bekommen die bereits existierenden Objekte die Version null. Löscht man ein versioniertes File, so sieht man es nicht mehr in der Normal-Ansicht ... erst wenn man Show Versions selektiert, dann sieht man die älteren Versionen. Ein Delete auf einem Bucket mit Version-enabled setzt nur einen Delete-Marker ... so kann man sicher löschen, da man immer wieder restoren kann.

Wie so häufig ist das AWS UI nicht besonders intuitiv. Wenn man ein gelöschtes Objekt restoren will, dann muss man auf der Version mit dem Delete-Marker ein Delete mit der Confirmation "permanently delete" ausführen. Klingt erstmal genau falsch ... hier hätte man doch auch einfach einen Restore-Button spendieren können. Dieses "permanently delete"-Handling liegt daran, dass AWS bei eingeschaltetem "Show Versions" keinen Delete-Marker setzt, sondern tatsächlich physisch löscht. Alles in allem hätte man das UI bei einer so wichtigen Aktion besser gesatlten können ...

Löscht man hingegen ein ganzes Bucket, dann hat man kein Backup mehr ... ACHTUNG

Will man auf ältere Versionen eines Objekts zugreifen so benötigt man neben der s3:GetObject noch die s3:GetObjectVersion Permission.

2FA für Löschungen

Man kann auf einem S3-Bucket eine Zwei-Faktor-Authentifizierung für Löschungen erzwingen (aktuell aber nicht via Admin Console).

Lock

Man kann auch Objekte durch ein Lock-Feature auf Objekt und Bucket-Level vor Änderungen schützen.


Tagging

Wie so fast jede AWS Ressource lassen sich auch S3-Buckets taggen. Auf diese Weise lassen sich

  • Permissions steuern (Tag-Based-Access-Control)

  • Kosten im Blick behalten


Private vs Public

Defaultmässig sind neue Buckets aus Sicherheitsgründen nicht public, d. h. man kann sie aus dem Internet nicht lesen.

Zustätzlich hat ein Bucket keine Bucket-Policy attached, so dass niemand Berechtigungen hat, darauf zuzugreifen. Hier benötigt man einen Bucket-Policy oder ACLs.

Will man also einen Bucket öffentlich verfügbar machen (z. B. um Fotos zu teilen), dann muss man

  1. den Bucket PUBLIC machen

  2. eine Bucket Policy konfigurieren, die JEDEM den lesenden Zugriff erlaubt


Bucket Policy vs ACL

Es wird mittlerweile empfohlen keine ACLs mehr zu verwenden, sondern stattdessen Bucket Policies. Mit Bucket Policies gehören ALLE Objekte dem Account in dem der Bucket angelegt wird - bei ACLs können die Objekte unterschiedlichen AWS Accounts gehören (z. B. definiert über den Object Writer).

Zugriffsberechtigungen werden entweder über ACLs (auf Object-Ebene) oder Bucket Policies (auf Bucket-Ebene für ALLE Objekte) definiert.

Für die Erstellung der Bucket-Policy kann der Policy-Generator verwendet werden. I. a. erteilt man eine IAM-Role oder einer Usergruppe Zugriffsberechtigungen.


Static Website


Presigned URLs

Hiermit kann man einzelne Files eines privaten Buckets für eine kurze Zeit (max. 12 Stunden) zur Nutzung ohne Authentifizierung (durch den Nutzer) als URL bereitstellen. Die Authentifizierung erfolgt mit der Identität des Herausgebers - sie ist in der URL verbacken.


S3 für Big-Data

  • Why and When to Avoid S3 as a Data Platform for Data Lakes

Für Big Data Analysen bietet AWS Tools, um die Daten performant aus den Textdateien (JSON) zu suchen.

Interessant ist hierbei, dass S3 eigentlich ein Object-Store ist, der für gezieltes Lesen kleinerer Datenblöcke nicht unterstützt und ein Update auf einer Datei ist abgebildet als Schreiben der gesamten Datei (Konzept "Dateien sind Immutable"). Allerdings bietet S3 auch Vorteile:

  • auf JEDEM Prefix eines Buckets die VOLLE Lese/Schreib-Perfomance. Auf diese Weise können viele Lesevorgängen GLEICHZEITIG durchgeführt werden.

  • S3 bietet mit verschieden teuren/Leistungsfähigen Storage-Typen (mit automatisierter Lifecycle-Policy, um Daten umzulagern) ein ideales Umfeld für alternde Daten, die zwar evtl. behalten werden müssen, aber dennoch billig in der Speicherung sein sollten (aka Cold Storage).

Aus diesem Grund hat man Wege erfunden, die Nachteile zu adressieren ... weil die Vorteile signifikant sind.


AWS CLI

aws s3 mv vs aws s3 sync

Ein aws s3 mv verschiebt ein Objekt in einen anderen Bucket oder eine andere Stelle im aktuellen Bucket.

Wenn man Versioning auf dem Bucket enabled hat, dann bekommt das verschobene Objekt einen Delete-Marker und die History wird nicht übernommen. Benötigt man die History, dann sollte man stattdessen ein aws s3 sync --delete verwenden.


Minio

  • Verwendung der aws-CLI

Minio ist eine S3 kompatible Implementierung, die man beispielsweise in Hybrid-Szenarien (in denen sowohl AWS als auch Onprem supported werden muß) einsetzen kann. Minio kann über die aws-CLI mit der gleichen Konfiguration (in ~/.aws) verwendet werden. Man muß nur per Parameter den Parameter --endpoint-url-Parameter verwenden, um den "S3"-Server zu definieren.

aws --profile play.min.io --endpoint-url https://play.min.io:9000 s3 ls

Bei dieser Verwendung werden weitere Konfigurationen (AWS-Credentials, Region des Buckets, ...) aus ~/.aws/config

[play.min.io]
region = us-east-1

und ~/.aws/credentials

[play.min.io]
aws_access_key_id = Q3AM3UQ867SPQQA4AAAA
aws_secret_access_key = zuf+tfteSlswRu7BJ86wekitnifILAaBbZbb

beigesteuert.

PreviousEKS - Elastic Kubernetes ServiceNextGoogle Cloud Platform

Last updated 11 months ago

Was this helpful?