minio

Ansible Роль: Установка и Конфигурация Минио Сервера

Эта роль устанавливает и настраивает Minio на Linux сервере.

Требования

Отсутствуют

Переменные Роли

Доступные переменные перечислены ниже вместе с их значениями по умолчанию (см. defaults\main.yaml)

  • Устанавливать ли минио сервер и клиент

    minio_install_server: true
    minio_install_client: true
    
  • Подробности установки минио сервера

    Пользователь/группа Minio в UNIX

    minio_group: minio
    minio_user: minio
    

    Директории установки Minio для размещения конфигурации сервера (minio_etc_dir), TLS сертификатов (minio_cert_dir) и политик доступа пользователей (minio_policy_dir)

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

    IP адрес минио сервера (minio_server_address), если пусто, сервер будет слушать на всех доступных IP адресах и портах сервера/консоли (minio_server_port и minio_console_port)

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

    Администратор Minio и пароль

    minio_root_user: ""
    minio_root_password: ""
    

    Регион сайта Minio

    minio_site_region: "eu-west-1"
    

    Директории данных Minio (minio_server_datadirs) и необходимость принудительного создания в случае их отсутствия (minio_server_make_datadirs)

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

    Установите список узлов для создания распределенного кластера (Многоузловое Многодисковое развёртывание).

    В этом режиме Ansible создаст ваши директории данных сервера (minio_serverdata_dirs), но будет использовать этот список (minio_server_cluster_nodes) для запуска сервера.

    Конфигурация для нескольких дисков требует наличия директорий данных на отдельных дисках для соблюдения требований распределенного хранилища Minio.

    См. рекомендации по использованию одинаковой конфигурации на всех узлах, последовательным именам хостов и локально подключенному хранилищу с последовательными монтированиями в документации (https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html)

    Пример:

    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

    Имя псевдонима подключения minio_alias и необходимость проверки SSL сертификатов (minio_validate_certificates)

    minio_validate_certificate: true
    minio_alias: "myminio"
    
  • Конфигурация TLS

    Для включения конфигурации TLS установите minio_enable_tls в true и предоставьте закрытый ключ и открытый сертификат в переменные minio_key и minio_cert.

    Их можно загрузить из файлов с помощью задачи Ansible, как:

    - name: Загрузить ключ tls и сертификат из файлов
    set_fact:
      minio_key: "{{ lookup('file','certificates/{{ inventory_hostname }}_private.key') }}"
      minio_cert: "{{ lookup('file','certificates/{{ inventory_hostname }}_public.crt') }}"
    

    minio_url может понадобиться в случае, если TLS сертификаты MinIO Server не содержат никаких IP альтернативных имен (SAN). См. определение переменной окружения MINIO_SERVER_URL.

    minio_url: "https://minio.ricsanfre.com:{{ minio_server_port }}"
    
  • Корзины для создания

    Переменная minio_buckets создает список предоставленных корзин с применением конкретной политики. Для создания корзин используется модифицированная версия модуля Ansible от Алексиса Факеса (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
    

    ЗА ЭТОМ УВИДИТЕ: Модуль использует удаленное соединение с Minio Server через Python API (пакет minio). Роль гарантирует, что PIP установлен, и устанавливает пакет minio.

    Во время создания корзин можно указать три типа политики: private, read-only или read-write.

    Также можно включить или отключить блокировку объектов Minio: true или false.

  • Пользователи для создания и ACL корзин

    Пользователи могут быть автоматически созданы с помощью переменной minio_users: можно предоставить список пользователей, каждый с тремя переменными name (имя пользователя), password (пароль пользователя) и buckets_acl — список корзин и типа доступа, предоставленного к каждой корзине (read-only или read-write). Роль автоматически создаст файлы политики в формате JSON, содержащие утверждения о политиках пользователей, и загрузит их на сервер.

    Можно использовать предварительно определенные политики read-only и read-write, содержащие заранее определенные заявления о доступе. Также можно определить пользовательские политики с помощью политики custom. В этом случае необходимо предоставить список заявлений о доступе.

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

    Предыдущая конфигурация создаст следующий файл policy.json для пользователя

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

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

    Установив minio_prometheus_bearer_token в true, создается файл /etc/minio/prometheus_bearer.json, который содержит результат выполнения команды:

    mc admin prometheus generate myminio -json

  • Установка библиотеки MinIO pip в системные пакеты

    Как указано в документации модуля pip:

    Установки Python, отмеченные как управляемые извне (как определено PEP668) не могут быть обновлены версиями pip >= 23.0.1 без использования виртуальной среды или установки переменной окружения PIP_BREAK_SYSTEM_PACKAGES=1.

    Эти (и любые другие переменные окружения pip) можно установить с помощью minio_pip_environment_vars, как:

    minio_pip_environment_var:
     PIP_BREAK_SYSTEM_PACKAGES: "1"
    
  • Репликация сайта

    Переменная replication_sites создает список множественных независимых развертываний MinIO для настройки в кластер реплик, называемый сайтами-соседями. Для получения дополнительной информации о том, что реплицируется между сайтами, обращайтесь к документации Minio (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"
    

    url — это URL сайта, куда будет производиться репликация из текущего сконфигурированного сайта в плейбуке. Переменные admin_user и admin_password — это учетные данные для аутентификации сайта, который будет реплицирован с правами администратора.

    Как указывается в документации по site-replication

    • Изначально только один из сайтов, добавленных для репликации, может содержать данные. После успешной настройки репликации сайта эти данные будут реплицированы на другие (изначально пустые) сайты. Впоследствии объекты могут записываться на любой из сайтов, и они будут реплицированы на все другие сайты.
    • Удаление сайта не допускается из набора реплицируемых сайтов после настройки.
    • Все сайты должны использовать один и тот же внешний IDP(s), если таковые имеются.
    • Для шифрования через SSE-S3 или SSE-KMS все сайты должны иметь доступ к центральному развертыванию KMS. Это можно сделать через центральный сервер KES или несколько серверов KES (например, по одному на сайт), подключенных через центральный сервер KMS (Vault).

Зависимости

Отсутствуют

Пример Плейбука

Следующий плейбук устанавливает и настраивает минио сервер и клиент, включает TLS и генерирует самоподписанные SSL сертификаты. Также он создаёт некоторые корзины и пользователей с соответствующими ACL.

---
- name: Установить и настроить сервер Minio
  hosts: minio
  become: true
  gather_facts: true
  vars:
    server_hostname: minio.example.com
    ssl_key_size: 4096
    ssl_certificate_provider: selfsigned

  pre_tasks:
    - name: Сгенерировать самоподписанные SSL сертификаты для minio
      include_tasks: generate_selfsigned_cert.yml
      args:
        apply:
          delegate_to: localhost
          become: false
    - name: Загрузить ключ tls и сертификат
      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

Раздел pre-tasks включает задачи для генерации закрытого ключа и самостоятельно подписанного сертификата и загрузки их в переменные minio_key и minio_cert.

Где файл generate_selfsigned_cert.yml содержит задачи для генерации закрытого ключа и SSL сертификата, подписанного самостоятельно:

---
- name: Создать закрытый сертификат
  openssl_privatekey:
    path: "certificates/{{ inventory_hostname }}_private.key"
    size: "{{ ssl_key_size | int }}"
    mode: 0644

- name: Создать CSR
  openssl_csr:
    path: "certificates/{{ inventory_hostname }}_cert.csr"
    privatekey_path: "certificates/{{ inventory_hostname }}_private.key"
    common_name: "{{ server_hostname }}"

- name: Создать сертификаты для keystore
  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 }}"

Лицензия

MIT

Информация об авторе

Создано Рикардо Санчесом (ricsanfre)
Модуль создания корзин ansible основан на модуле от Алексиса Факеса (https://github.com/alexisfacques/ansible-module-s3-minio-bucket)

О проекте

minio installation and configuration role

Установить
ansible-galaxy install ricsanfre/ansible-role-minio
Лицензия
mit
Загрузки
21142
Владелец
Telecom engineer.