# Cluster Security

## Introduction

Muppy gère la sécurité de toutes les ressources des mClusters.

La sécurité est définie par des Tasks appelées pour chaque Resource du Cluster afin d'ajuster la configuration du Firewall.

Le paramètre **Security Setup Task** permet de sélectionner une **Task** qui sera appelées par défaut pour toutes les Resources du Cluster.

![Cluster Security Tab](https://3772830354-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJQEyyq3uo2ur4VSBiaCB%2Fuploads%2FZXPeqDI4mcFVUwVyyBW3%2FCleanShot%202021-12-04%20at%2012.35.31.png?alt=media\&token=70cc6dec-4aee-4c82-8d88-545643a922ab)

Il est possible de définir une Task spécifique au niveau de chaque **Muppy Cluster Resource.**

![](https://3772830354-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJQEyyq3uo2ur4VSBiaCB%2Fuploads%2Fc1UxQbyj66yRN0FHxcw8%2Fcluster%20resource%20security%20setup.png?alt=media\&token=0b0c04df-ea31-48c3-8582-fa64e4ce2639)

Muppy est livrée avec une Task nommée **Muppy Default Cluster Security Setup.**

### **Muppy Default Cluster Security Setup Task**

Cette Task configure la sécurité des **Muppy Cluster Resources** de la manière suivante:

* **Reverse Proxy** ; les ports 443 et 80 sont globalement ouverts.&#x20;
* **Computes Nodes** ; les Reverse Proxies ont accès à tous les ports et tous les protocoles (Trusted Hosts) des  Computes Nodes
* **PostgreSQL Cluster** ; les Computes Nodes peuvent se connecter à tous les Clusters PostgreSQL sur le port du Cluster (5432). <mark style="background-color:orange;">Le fichier pg\_hba.conf du Cluster PostgreSQL est ajusté en conséquence.</mark>

Ces règles sont adaptées à la mise au point d'un cluster et constituent un point de départ. Nous encourageons les Utilisateurs à créer des **Security Setup Tasks** plus restrictives.

{% hint style="danger" %}
Actuellement la **Muppy Default Cluster Security Setup Task** ne sait gérer que des resources PostgreSQL Clusters qui utilisent le port 5432.&#x20;

Si vous utilisez un autre port vous devrez écrire une Security Setup Task spécialisée.
{% endhint %}

### Application de la sécurité&#x20;

Sur le formulaire des Muppy Cluster, le bouton <img src="https://3772830354-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJQEyyq3uo2ur4VSBiaCB%2Fuploads%2Ffajv4sPtywt9Y821O9ag%2FCleanShot%202021-12-04%20at%2012.47.52.png?alt=media&#x26;token=dd91d746-0370-4e20-8f00-5f333374f94a" alt="" data-size="original">lance la configuration de la sécurité de **toutes les Ressources** du Cluster.

Le bouton ![](https://3772830354-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJQEyyq3uo2ur4VSBiaCB%2Fuploads%2FGIjeoe2tOpPj221CByhj%2FCleanShot%202021-12-04%20at%2012.44.31.png?alt=media\&token=321d5042-0b90-46d1-8f78-87b473692e89) présent en entête du formulaire des ressources lance **uniquement** la configuration de la sécurité de la **ressource sélectionnée.**

### **Custom Security Setup Tasks**

Les utilisateurs peuvent créer leur propre Task de configuration de sécurité des Clusters.

Voici un template de Task de Security Setup.

```python
@fabric_task()
def acme_megacluster_security_setup(
    cnx, host_obj, m_cluster_resource_obj:OdooModelType, _imq_logger=None
):
    """ Acme Megacluster Security Setup Task
    :param host_obj: Host of the m_cluster_resource
    :param m_cluster_resource_obj: The cluster resource whose security needs to 
        be reconfigured.

    :returns: No value is expected. The Task must raise in case of errror.
    """
    _task_logger = _imq_logger or _logger
    odoo_env = (host_obj or mpk_pack_obj).env
    _commit = odoo_env.cr.commit
    # ...
    return None
```

{% hint style="warning" %}
Les Custom Security Task doivent être **idempotentes** !!!!!
{% endhint %}

Nous vous invitons à analyser le code source de la Task **mpk\_default\_cluster\_security\_setup (muppy\_pack\_\_security.py)** qui peut constituer un point de départ pour vos Cluster Security Task.
