ricsanfre.minio

Ansible Rolle: Minio Server Installation und Konfiguration

Diese Rolle installiert und konfiguriert Minio auf einem Linux-Server.

Anforderungen

Keine

Rollenvariablen

Verfügbare Variablen sind unten aufgelistet, zusammen mit Standardwerten (siehe defaults\main.yaml).

  • Ob der Minio-Server und der Minio-Client installiert werden sollen oder nicht

    minio_install_server: true
    minio_install_client: true
    
  • Details zur Installation des Minio-Servers

    Minio UNIX Benutzer/Gruppe

    minio_group: minio
    minio_user: minio
    

    Installationsverzeichnisse für Minio zur Unterbringung der Serverkonfiguration (minio_etc_dir), TLS-Zertifikate (minio_cert_dir) und Benutzerzugriffsrichtlinien (minio_policy_dir)

    minio_etc_dir: /etc/minio
    minio_cert_dir: "{{ minio_etc_dir }}/ssl"
    minio_policy_dir: "{{ minio_etc_dir }}/policy"
    

    IP-Adresse des Minio-Servers (minio_server_address), wenn leer, lauscht der Server an allen verfügbaren IP-Adressen, sowie Server-/Konsolenschnittstellen (minio_server_port und minio_console_port)

    minio_server_port: "9091"
    minio_server_addr: ""
    minio_console_port: "9092"
    

    Minio Admin-Benutzer und Passwort

    minio_root_user: ""
    minio_root_password: ""
    

    Minio Standortregion

    minio_site_region: "eu-west-1"
    

    Minio-Datenverzeichnisse (minio_server_datadirs) und ob die Erstellung erzwungen werden soll, falls sie nicht existieren (minio_server_make_datadirs)

    minio_server_make_datadirs: true
    minio_server_datadirs:
      - /var/lib/minio
    
    minio_server_cluster_nodes: []
    

    Setze eine Liste von Knoten, um einen verteilten Cluster (Multi-Node Multi-Drive-Bereitstellung) zu erstellen.

    In diesem Modus wird Ansible Ihre Server-Datenverzeichnisse (minio_serverdata_dirs) erstellen, verwendet jedoch diese Liste (minio_server_cluster_nodes) für den Serverstart.

    Multi-Drive-Konfiguration erfordert, dass die Datenverzeichnisse auf separaten Festplatten liegen, um die Anforderungen des verteilten Speichers von Minio zu erfüllen.

    Weitere Empfehlungen zur Verwendung derselben Konfiguration auf allen Knoten, sequenziellen Hostnamen und lokal angeschlossenem Speicher mit sequentiellen Montagen finden Sie in der Dokumentation (https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html).

    Beispiel:

    minio_server_datadirs:
      - '/mnt/disk1/minio'
      - '/mnt/disk2/minio'
      - '/mnt/disk3/minio'
      - '/mnt/disk4/minio'
    minio_server_cluster_nodes:
      - 'https://minio{1...4}.example.net:9091/mnt/disk{1...4}/minio'
    
  • Minio-Client-Konfiguration

    Verbindungsalias-Name minio_alias und ob SSL-Zertifikate validiert werden sollen oder nicht (minio_validate_certificates)

    minio_validate_certificate: true
    minio_alias: "myminio"
    
  • TLS-Konfiguration

    Um die TLS-Konfiguration zu aktivieren, setzen Sie minio_enable_tls auf true und stellen Sie den privaten Schlüssel und das öffentliche Zertifikat als Inhalt bereit, der in die Variablen minio_key und minio_cert geladen wird.

    Sie können sie auch von Dateien aus laden, indem Sie eine Ansible-Aufgabe verwenden, wie:

    - name: TLS-Schlüssel und Zertifikat von Dateien laden
      set_fact:
        minio_key: "{{ lookup('file','certificates/{{ inventory_hostname }}_private.key') }}"
        minio_cert: "{{ lookup('file','certificates/{{ inventory_hostname }}_public.crt') }}"
    

    minio_url könnte benötigt werden, falls die TLS-Zertifikate des MinIO-Servers keine IP-Subject Alternative Names (SAN) enthalten. Siehe Definition der MINIO_SERVER_URL-Umgebungsvariablen.

    minio_url: "https://minio.ricsanfre.com:{{ minio_server_port }}"
    
  • Zu erstellende Buckets

    Die Variable minio_buckets erstellt die Liste der bereitgestellten Buckets und wendet eine spezifische Richtlinie an. Zum Erstellen der Buckets wird eine modifizierte Version des Ansible-Moduls von Alexis Facques verwendet (https://github.com/alexisfacques/ansible-module-s3-minio-bucket).

    minio_buckets:
      - name: bucket1
        policy: read-only
      - name: bucket2
        policy: read-write
        object_lock: false
      - name: bucket3
        policy: private
        object_lock: true
    

    HINWEIS: Das Modul verwendet die Remoteverbindung zum Minio-Server über die Python-API (minio Python-Paket). Die Rolle stellt sicher, dass PIP installiert ist und das minio-Paket installiert wird.

    Bei der Bucketerstellung können drei Arten von Richtlinien angegeben werden: privat, read-only oder read-write Buckets.

    Minio-Objektsperren können ebenfalls aktiviert oder deaktiviert werden: true oder false.

  • Zu erstellende Benutzer und Buckets ACLs

    Benutzer können automatisiert mit der Variable minio_users erstellt werden: Eine Liste von Benutzern kann bereitgestellt werden, jeder Benutzer hat drei Variablen name (Benutzername), password (Benutzerpasswort) und buckets_acl Liste von Buckets und Art des Zugriffs, der für jeden Bucket gewährt wird (read-only oder read-write). Die Rolle erstellt automatisch JSON-Richtliniendateien, die die Benutzerrichtlinienaussagen enthalten und lädt sie auf den Server.

    Vorgegebene read-only und read-write Richtlinien mit vordefinierten Zugriffsanweisungen können verwendet werden. Benutzerdefinierte Richtlinien können ebenfalls mit custom definiert werden. In diesem Fall muss eine Liste von Zugriffsanweisungen bereitgestellt werden.

    minio_users:
    - name: user1
      password: supers1cret0
      buckets_acl:
        - name: bucket1
          policy: read-write
        - name: bucket2
          policy: read-only
        - name: bucket3
          policy: custom
          custom:
            - rule: |
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:DeleteObject",
                    "s3:PutObject",
                    "s3:AbortMultipartUpload",
                    "s3:ListMultipartUploadParts"
                ],
                "Resource": [
                    "arn:aws:s3:::bucket3/*"
                ]
            - rule: |
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::bucket3"
                ]
    

Die vorherige Konfiguration erstellt die folgende policy.json-Datei für den Benutzer:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket1",
                "arn:aws:s3:::bucket1/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket2",
                "arn:aws:s3:::bucket2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:ListMultipartUploadParts",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket3/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket3"
            ]
        }
    ]
}
  • Prometheus-Bearer-Token generieren

    minio_prometheus_bearer_token: false
    prometheus_bearer_token_output: "{{ minio_etc_dir }}/prometheus_bearer.json"
    

    Wenn Sie minio_prometheus_bearer_token auf true setzen, wird eine Datei /etc/minio/prometheus_bearer.json erstellt, die das Ergebnis der Ausführung des Befehls enthält:

    mc admin prometheus generate myminio -json

  • MinIO pip-Bibliothek in die Systempakete installieren

    Wie in der Dokumentation des pip-Moduls angemerkt:

    Python-Installationen, die als extern verwaltet gekennzeichnet sind (wie von PEP668 definiert), können nicht von Pip-Versionen >= 23.0.1 ohne die Verwendung einer virtuellen Umgebung oder das Setzen der Umgebungsvariablen PIP_BREAK_SYSTEM_PACKAGES=1 aktualisiert werden.

    Diese (und andere pip-Umgebungsvariablen) können mit minio_pip_environment_vars wie folgt festgelegt werden:

    minio_pip_environment_var:
     PIP_BREAK_SYSTEM_PACKAGES: "1"
    
  • Standortreplikation

    Mit der Variable replication_sites wird die Liste mehrerer unabhängiger MinIO-Bereitstellungen erstellt, die als Cluster von Repliken konfiguriert werden sollen, die als Peer-Sites bezeichnet werden. Weitere Informationen dazu, was über Standorte hinweg repliziert wird, finden Sie in der MinIO-Dokumentation (https://min.io/docs/minio/linux/operations/install-deploy-manage/multi-site-replication.html).

    replication_sites:
       - name: myminio2
         url: "http://replication.minio.com:9091"
         admin_user: "myminio2"
         admin_password: "supers1cret02"
    

    Die url ist die URL der Site, die vom aktuell konfigurierten Standort im Playbook repliziert wird. Die Variablen admin_user und admin_password sind Authentifizierungsdaten für den Standort, der mit Administratorrechten repliziert wird.

    Wie in der Dokumentation zur site-replication angemerkt:

    • Zunächst darf nur eine der hinzugefügten Sites für die Replikation Daten enthalten. Nach erfolgreicher Konfiguration der Standortreplikation werden diese Daten auf die anderen (anfänglich leeren) Sites repliziert. Anschließend können Objekte an allen Sites geschrieben werden, und sie werden auf alle anderen Sites repliziert.
    • Das Entfernen eines Standorts aus einem Satz von replizierten Sites ist nach der Konfiguration nicht zulässig.
    • Alle Sites müssen die gleichen externen IDP(s) verwenden, falls vorhanden.
    • Für SSE-S3 oder SSE-KMS-Verschlüsselung über KMS müssen alle Sites Zugang zu einer zentralen KMS-Bereitstellung haben. Dies kann über einen zentralen KES-Server oder mehrere KES-Server (z.B. einen pro Standort) erfolgen, die über einen zentralen KMS (Vault)-Server verbunden sind.

Abhängigkeiten

Keine

Beispiel-Playbook

Das folgende Playbook installiert und konfiguriert den Minio-Server und -Client, aktiviert TLS und generiert selbstsignierte SSL-Zertifikate. Es erstellt auch einige Buckets und Benutzer mit den entsprechenden ACLs.

---
- name: Installieren und Konfigurieren des Minio-Servers
  hosts: minio
  become: true
  gather_facts: true
  vars:
    server_hostname: minio.example.com
    ssl_key_size: 4096
    ssl_certificate_provider: selfsigned

  pre_tasks:
    - name: Selbstsignierte SSL-Zertifikate für Minio generieren
      include_tasks: generate_selfsigned_cert.yml
      args:
        apply:
          delegate_to: localhost
          become: false
    - name: TLS-Schlüssel und Zertifikat laden
      set_fact:
        minio_key: "{{ lookup('file','certificates/' + inventory_hostname + '_private.key') }}"
        minio_cert: "{{ lookup('file','certificates/' + inventory_hostname + '_public.crt') }}"

  roles:
    - role: ricsanfre.minio
      minio_root_user: "miniadmin"
      minio_root_password: "supers1cret0"
      minio_enable_tls: true
      minio_url: "https://{{ server_hostname }}:{{ minio_server_port }}"
      minio_buckets:
        - name: bucket1
          policy: read-write
        - name: bucket2
          policy: read-write
      minio_users:
        - name: user1
          password: supers1cret0
          buckets_acl:
            - name: bucket1
              policy: read-write
            - name: bucket2
              policy: read-only

Der Abschnitt pre-tasks enthält Aufgaben, um einen privaten Schlüssel und ein selbstsigniertes Zertifikat zu generieren und sie in den Variablen minio_key und minio_cert zu laden.

Die Datei generate_selfsigned_cert.yml enthält die Aufgaben zur Erstellung eines privaten Schlüssels und eines selbstsignierten SSL-Zertifikats:

---
- name: Privates Zertifikat erstellen
  openssl_privatekey:
    path: "certificates/{{ inventory_hostname }}_private.key"
    size: "{{ ssl_key_size | int }}"
    mode: 0644

- name: CSR erstellen
  openssl_csr:
    path: "certificates/{{ inventory_hostname }}_cert.csr"
    privatekey_path: "certificates/{{ inventory_hostname }}_private.key"
    common_name: "{{ server_hostname }}"

- name: Zertifikate für Keystore erstellen
  openssl_certificate:
    csr_path: "certificates/{{ inventory_hostname }}_cert.csr"
    path: "certificates/{{ inventory_hostname }}_public.crt"
    privatekey_path: "certificates/{{ inventory_hostname }}_private.key"
    provider: "{{ ssl_certificate_provider }}"

Lizenz

MIT

Autoreninformationen

Erstellt von Ricardo Sanchez (ricsanfre) Bucket-Erstellungs-Ansible-Modul basiert auf dem Modul von Alexix Facques (https://github.com/alexisfacques/ansible-module-s3-minio-bucket)

Über das Projekt

minio installation and configuration role

Installieren
ansible-galaxy install ricsanfre.minio
Lizenz
mit
Downloads
29.4k
Besitzer
Telecom engineer.