Open Policy Agent (OPA)

Open Policy Agent (OPA) est un moteur de décision open-source permettant d’appliquer des politiques de contrôle d’accès et de gouvernance sur divers systèmes tels que Kubernetes, API, microservices et CI/CD.

Open Policy Agent (OPA)

Introduction Ă  Open Policy Agent (OPA)

Open Policy Agent (OPA) est un moteur de décision open-source permettant d’appliquer des politiques de contrôle d’accès et de gouvernance sur divers systèmes tels que Kubernetes, API, microservices et CI/CD.

Pourquoi Utiliser OPA ?

  • Centralisation des Politiques : OPA permet de dĂ©finir des règles de sĂ©curitĂ© de manière dĂ©clarative.
  • FlexibilitĂ© : Il peut ĂŞtre utilisĂ© pour Kubernetes, CI/CD, API Gateway, etc.
  • Évaluation Rapide : Les dĂ©cisions sont prises en millisecondes.
  • AuditabilitĂ© : Toutes les dĂ©cisions sont traçables.

Concepts Clés

1. Rego (Langage de Politique)

OPA utilise le langage Rego pour définir les règles de politique.

2. Input et Output

OPA prend une requête en entrée et renvoie une décision sous forme de JSON.

3. Bundle de Politiques

OPA peut charger des politiques et des données sous forme de bundle pour fonctionner en mode autonome.

4. API REST d’OPA

OPA expose une API REST pour évaluer les politiques à distance.

Installation de OPA

1. Installation sur Linux et macOS

wget https://openpolicyagent.org/downloads/latest/opa_linux_amd64 chmod +x opa_linux_amd64 sudo mv opa_linux_amd64 /usr/local/bin/opa

2. Installation avec Docker

docker run --rm -it openpolicyagent/opa:latest run

Premiers Pas avec OPA

1. Créer une Politique Rego

Créez un fichier policy.rego :

default allow = false allow { input.role == "admin" }

2. Évaluer une Politique

opa eval -i input.json -d policy.rego "data.allow"

Fichier input.json :

{ "role": "admin" }

3. Démarrer OPA en Serveur API

opa run --server

4. Interroger OPA via API

curl -X POST http://localhost:8181/v1/data/allow -d '{"input": {"role": "admin"}}'

Intégration avec Kubernetes

OPA peut être utilisé avec Kubernetes via Gatekeeper pour appliquer des politiques sur les ressources.

1. Installer OPA Gatekeeper

kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/master/deploy/gatekeeper.yaml

2. Créer une Contrainte Kubernetes

Fichier constraint-template.yaml :

apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8srequiredlabels spec: crd: spec: names: kind: K8sRequiredLabels targets: - target: admission.k8s.gatekeeper.sh rego: | package k8srequiredlabels violation["Un label est requis"] { not input.review.object.metadata.labels["app"] }

Appliquer la contrainte :

kubectl apply -f constraint-template.yaml

Intégration avec API Gateway (Envoy, Kong)

OPA peut être intégré avec Envoy pour la gestion des autorisations des API.

1. Configuration d’Envoy avec OPA

Ajoutez cette configuration dans envoy.yaml :

static_resources: listeners: - address: socket_address: { address: 0.0.0.0, port_value: 10000 } filter_chains: - filters: - name: envoy.filters.http.ext_authz typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz grpc_service: envoy_grpc: cluster_name: opa

Démarrez OPA avec une politique pour contrôler l’accès :

opa run --server --set decision_logs.console=true

Intégration avec CI/CD

OPA peut être utilisé dans un pipeline GitHub Actions ou GitLab CI/CD pour valider des fichiers de configuration avant le déploiement.

1. Exemple avec GitHub Actions

Ajoutez un job dans .github/workflows/policy-check.yml :

name: OPA Policy Check on: [push] jobs: security: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v2 - name: Run OPA uses: open-policy-agent/setup-opa@v2 - name: Check Policy run: opa eval -i input.json -d policy.rego "data.allow"

Meilleures Pratiques

  • Utiliser des namespaces pour organiser les politiques.
  • Optimiser les performances en chargeant des bundles prĂ©compilĂ©s.
  • IntĂ©grer OPA avec un gestionnaire de secrets pour sĂ©curiser l’accès aux donnĂ©es sensibles.
  • Auditer les dĂ©cisions pour assurer la traçabilitĂ© des accès.

En Résumé

Open Policy Agent est un moteur puissant pour gérer l’application des politiques de sécurité dans divers environnements. Grâce à son intégration avec Kubernetes, CI/CD et API Gateway, il permet une gouvernance fine des accès et configurations.