ricsanfre.minio
Rol de Ansible: Instalación y Configuración del Servidor Minio
Este rol instala y configura Minio en un servidor Linux.
Requisitos
Ninguno
Variables del Rol
Las variables disponibles se enumeran a continuación con sus valores predeterminados (ver defaults\main.yaml
)
Si se debe instalar o no el servidor Minio y el cliente Minio
minio_install_server: true minio_install_client: true
Detalles de la instalación del servidor Minio
Usuario/grupo UNIX de Minio
minio_group: minio minio_user: minio
Directorios de instalación de Minio para colocar la configuración del servidor (
minio_etc_dir
), certificados TLS (minio_cert_dir
) y políticas de acceso de usuarios (minio_policy_dir
)minio_etc_dir: /etc/minio minio_cert_dir: "{{ minio_etc_dir }}/ssl" minio_policy_dir: "{{ minio_etc_dir }}/policy"
Dirección IP del servidor Minio (
minio_server_address
), si está vacía, el servidor escucha en todas las direcciones IP disponibles, y puertos de escucha del servidor/consola (minio_server_port
yminio_console_port
)minio_server_port: "9091" minio_server_addr: "" minio_console_port: "9092"
Usuario y contraseña de administrador de Minio
minio_root_user: "" minio_root_password: ""
Región del sitio de Minio
minio_site_region: "eu-west-1"
Directorios de datos de Minio (
minio_server_datadirs
) y si se debe forzar la creación en caso de que no existan (minio_server_make_datadirs
)minio_server_make_datadirs: true minio_server_datadirs: - /var/lib/minio
minio_server_cluster_nodes: []
Establecer una lista de nodos para crear un clúster distribuido (implementación de múltiples nodos y múltiples unidades).
En este modo, Ansible creará los directorios de datos del servidor (
minio_serverdata_dirs
), pero usará esta lista (minio_server_cluster_nodes
) para el inicio del servidor.La configuración de múltiples unidades requiere que los directorios de datos estén en discos separados para cumplir con los requisitos de almacenamiento distribuido de Minio.
Consulte las recomendaciones para usar la misma configuración en todos los nodos, nombres de host secuenciales y almacenamiento adjunto local con montajes secuenciales en la documentación (https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html)
Ejemplo:
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'
Configuración del cliente Minio
Nombre de alias de conexión
minio_alias
y si validar o no los certificados SSL (minio_validate_certificates
)minio_validate_certificate: true minio_alias: "myminio"
Configuración de TLS
Para habilitar la configuración de TLS, establezca
minio_enable_tls
en true y proporcione la clave privada y el certificado público como contenido cargado en las variablesminio_key
yminio_cert
.Se pueden cargar desde archivos usando una tarea de Ansible como:
- name: Cargar clave TLS y certificado desde archivos set_fact: minio_key: "{{ lookup('file','certificates/{{ inventory_hostname }}_private.key') }}" minio_cert: "{{ lookup('file','certificates/{{ inventory_hostname }}_public.crt') }}"
minio_url
puede ser necesario en caso de que los certificados TLS del servidor MinIO no contengan nombres alternativos de sujeto IP (SAN). Consulte la definición de la variable de entorno MINIO_SERVER_URL.minio_url: "https://minio.ricsanfre.com:{{ minio_server_port }}"
Buckets a crear
La variable
minio_buckets
crea la lista de buckets proporcionados y aplica una política específica. Para crear los buckets, se utiliza una versión modificada del módulo de Ansible de Alexis Facques (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
NOTA: El módulo utiliza la conexión remota al servidor Minio usando la API de Python (
paquete python minio
). El rol asegura que PIP esté instalado e instala el paqueteminio
.Durante la creación de buckets, se pueden especificar tres tipos de políticas:
privado
,solo-lectura
olectura-escritura
.El bloqueo de objetos en Minio también se puede habilitar o deshabilitar:
true
ofalse
.Usuarios a crear y ACLs de buckets
Los usuarios se pueden crear automáticamente usando la variable
minio_users
: se puede proporcionar una lista de usuarios, cada uno con tres variablesname
(nombre de usuario),password
(contraseña de usuario) ybuckets_acl
, una lista de buckets y el tipo de acceso concedido a cada bucket (solo-lectura o lectura-escritura). El rol crea automáticamente archivos JSON de políticas que contienen las declaraciones de políticas del usuario y las carga en el servidor.Se pueden utilizar políticas predefinidas de
solo-lectura
ylectura-escritura
, que contienen declaraciones de acceso predefinidas. También se pueden definir políticas personalizadas utilizando la políticacustom
. En este caso, se debe proporcionar una lista de declaraciones de acceso.minio_users: - name: user1 password: supers1cret0 buckets_acl: - name: bucket1 policy: read-write - name: bucket2 policy: read-only - name: bucket3 policy: custom custom: - regla: | "Effect": "Allow", "Action": [ "s3:GetObject", "s3:DeleteObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::bucket3/*" ] - regla: | "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::bucket3" ]
La configuración anterior creará el siguiente archivo policy.json para el usuario
{
"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"
]
}
]
}
Generar token de portador para Prometheus
minio_prometheus_bearer_token: false prometheus_bearer_token_output: "{{ minio_etc_dir }}/prometheus_bearer.json"
Establecer
minio_prometheus_bearer_token
en true genera un archivo/etc/minio/prometheus_bearer.json
que contiene el resultado de ejecutar el comando:mc admin prometheus generate myminio -json
Instalar la biblioteca pip de MinIO en los paquetes del sistema
Como se observa en la documentación del módulo
pip
:Las instalaciones de Python marcadas como gestionadas externamente (según lo definido por PEP668) no pueden actualizarse mediante versiones de pip >= 23.0.1 sin el uso de un entorno virtual o configurando la variable de entorno
PIP_BREAK_SYSTEM_PACKAGES=1
.Esto (y cualquier otra variable de entorno pip) se puede establecer con
minio_pip_environment_vars
de la siguiente manera:minio_pip_environment_var: PIP_BREAK_SYSTEM_PACKAGES: "1"
Replicación de Sitios
La variable
replication_sites
crea la lista de múltiples implementaciones independientes de MinIO para configurar como un clúster de réplicas llamado sitios pares. Para obtener más información sobre lo que se replica a través de los sitios, consulte la documentación de 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"
La
url
es la URL del sitio que se replicará desde el sitio actualmente configurado en el libro de jugadas. Las variablesadmin_user
yadmin_password
son credenciales de autenticación para el sitio que se replicará con privilegios de administrador.Como se señala en la documentación de
site-replication
- Inicialmente, solo uno de los sitios agregados para la replicación puede tener datos. Después de que la replicación del sitio se configure correctamente, estos datos se replican a los otros sitios (inicialmente vacíos). Posteriormente, los objetos se pueden escribir en cualquiera de los sitios, y se replicarán a todos los demás sitios.
- No se permite eliminar un sitio de un conjunto de sitios replicados una vez configurados.
- Todos los sitios deben estar usando el mismo(s) IDP externo(s), si los hay.
- Para SSE-S3 o cifrado SSE-KMS a través de KMS, todos los sitios deben tener acceso a un despliegue central de KMS. Esto puede lograrse a través de un servidor KES central o múltiples servidores KES (digamos uno por sitio) conectados a través de un servidor KMS central (Vault).
Dependencias
Ninguna
Ejemplo de Playbook
El siguiente playbook instala y configura el servidor y cliente Minio, habilitando TLS y generando certificados SSL autofirmados. También crea algunos buckets y usuarios con las ACLs adecuadas.
---
- name: Instalar y configurar el Servidor 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: Generar certificados SSL autofirmados para Minio
include_tasks: generate_selfsigned_cert.yml
args:
apply:
delegate_to: localhost
become: false
- name: Cargar clave TLS y certificado
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
La sección pre-tasks
incluye tareas para generar una clave privada y un certificado SSL autofirmado y cargarlos en las variables minio_key
y minio_cert
.
Donde generate_selfsigned_cert.yml
contiene las tareas para generar una clave privada y un certificado autofirmado SSL:
---
- name: Crear certificado privado
openssl_privatekey:
path: "certificates/{{ inventory_hostname }}_private.key"
size: "{{ ssl_key_size | int }}"
mode: 0644
- name: Crear CSR
openssl_csr:
path: "certificates/{{ inventory_hostname }}_cert.csr"
privatekey_path: "certificates/{{ inventory_hostname }}_private.key"
common_name: "{{ server_hostname }}"
- name: Crear certificados para el almacén de claves
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 }}"
Licencia
MIT
Información del Autor
Creado por Ricardo Sánchez (ricsanfre) Módulo de creación de buckets de Ansible basado en el módulo de Alexis Facques (https://github.com/alexisfacques/ansible-module-s3-minio-bucket)
ansible-galaxy install ricsanfre.minio