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) 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.
OPA utilise le langage Rego pour définir les règles de politique.
OPA prend une requête en entrée et renvoie une décision sous forme de JSON.
OPA peut charger des politiques et des données sous forme de bundle pour fonctionner en mode autonome.
OPA expose une API REST pour évaluer les politiques à distance.
wget https://openpolicyagent.org/downloads/latest/opa_linux_amd64 chmod +x opa_linux_amd64 sudo mv opa_linux_amd64 /usr/local/bin/opa
docker run --rm -it openpolicyagent/opa:latest run
Créez un fichier policy.rego :
default allow = false allow { input.role == "admin" }
opa eval -i input.json -d policy.rego "data.allow"
Fichier input.json :
{ "role": "admin" }
opa run --server
curl -X POST http://localhost:8181/v1/data/allow -d '{"input": {"role": "admin"}}'
OPA peut être utilisé avec Kubernetes via Gatekeeper pour appliquer des politiques sur les ressources.
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/master/deploy/gatekeeper.yaml
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
OPA peut être intégré avec Envoy pour la gestion des autorisations des API.
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
OPA peut être utilisé dans un pipeline GitHub Actions ou GitLab CI/CD pour valider des fichiers de configuration avant le déploiement.
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"
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.