Aller au contenu principal

OpenFGA (openfga)

Serveur d'autorisation fine (modèle Zanzibar) qui répond aux vérifications de relations du Control Plane.

Généré depuis catalog/services/openfga.yaml : ne pas modifier à la main.

Résumé​

Version1.22.1
Usageinstaller et configurer, configurer et connecter
Couchefonctionnelle (catalogue IA)
CatégorieSécurité et politiques
Méthodes d'installationbinary, podman
Connexion externenon
Réservé au bac à sablenon

Licence​

Identifiant SPDXApache-2.0
Politique de licencelicence socle (MIT ou Apache-2.0)
Exception de licence-
Composant de la plateformeopenfga

Paquets et artefacts​

Un paquet que publie le projet du service (son image, son archive binaire, son paquet Python ou système) porte la licence du service ; un paquet tiers porte la licence écrite sur sa ligne, lue dans les métadonnées officielles du projet amont.

TypePaquetVersionLicenceDétails
image de conteneurdocker.io/openfga/openfgav1.22.1Apache-2.0clé d'image openfga, utilisée par migrate, openfga-server, condensé sha256:b852071314f1fda1194d341a6ebac0a4f619b3cd87a6626d2ccc7048af4ec671
archive binaireopenfga_1.22.1_linux_amd64.tar.gz1.22.1Apache-2.0https://github.com/openfga/openfga/releases/download/v1.22.1/openfga_1.22.1_linux_amd64.tar.gz, x86_64, somme de contrôle sha256

Les images sont épinglées par étiquette dans le descripteur, et par condensé (digest) quand le descripteur en déclare un (le bundle hors ligne refuse alors une image téléchargée qui ne le porte pas) ; le condensé est enregistré dans le miroir du Manager à l'import du bundle hors ligne, et chaque téléchargement ou chargement est vérifié par rapport à lui.

Systèmes et architectures pris en charge​

MéthodeSystèmes d'exploitationArchitectures
binaryfamille RHEL (dnf), famille Debian (apt), Arch Linux (pacman)x86_64 (architecture des artefacts du descripteur)
podmanfamille RHEL (dnf), famille Debian (apt), Arch Linux (pacman)x86_64, aarch64 (non restreintes par le descripteur)

Systèmes hôtes certifiés : RHEL 8/9/10, Rocky Linux 8/9/10, AlmaLinux 8/9/10, Oracle Linux 8/9, CentOS Stream 9/10, Ubuntu 22.04/24.04, Debian 12, Arch Linux (rolling). Le contrôle préalable des hôtes accepte ces systèmes (une autre version d'une famille connue donne un avertissement, une version en fin de vie est refusée) et les architectures x86_64 et aarch64.

Prérequis​

Hôte​

  • au moins 512 Mo de mémoire (bloquant, memory).

Réseau et ports​

ComposantNom du portPortOuvert dans le pare-feu de l'hôte
openfga-serverhttp8080/tcpoui
openfga-servergrpc8081/tcpoui
openfga-servermetrics2112/tcpoui

Services et connexions nécessaires​

Détail et résolution : voir Dépendances.

Méthodes et modes d'installation​

MéthodeDéfautCe que la méthode utilise
binaryouiles archives binaires du descripteur, décompressées dans le répertoire du service
podman-les images de conteneur du descripteur, exécutées par Podman sous systemd

Composants​

ComposantTypeMéthodes d'installationPorts
Migration du schéma (migrate)ponctuelbinary, podman-
Serveur OpenFGA (openfga-server)maîtrebinary, podman8080/tcp, 8081/tcp, 2112/tcp

En mémoire (bac à sable) (memory)​

Un seul serveur, données gardées en mémoire et perdues au redémarrage ; aucune base de données.

Ce que le mode déploie :

ComposantPlacement
migratenon utilisé
openfga-servermin 1, max 1

Serveur unique (standalone) (par défaut)​

Un seul serveur sur PostgreSQL.

Ce que le mode déploie :

ComposantPlacement
migratemin 1, max 1
openfga-servermin 1, max 1

Répliqué (replicated)​

Plusieurs serveurs sans état sur un PostgreSQL partagé, derrière le répartiteur de charge.

Ce que le mode déploie :

ComposantPlacement
migratemin 1, max 1
openfga-servermin 2, recommandé 3

Installer ce service​

L'assistant d'installation du Navin Manager planifie, valide et exécute l'installation ; il faut la permission services:install sur le cluster.

  1. Ouvrez l'assistant. Dans Clusters, choisissez l'action de ligne Installer des services du cluster cible. L'assistant s'ouvre sur sa première étape, Service.

  2. Choisissez le service. À l'étape Service, sélectionnez OpenFGA. La carte affiche la licence Apache-2.0 et les dépendances dont l'installation a besoin. Choisissez la Méthode parmi binary, podman (par défaut binary).

  3. Choisissez les hôtes et le mode. À l'étape Hôtes, cochez les hôtes, puis choisissez le Mode : memory, standalone (par défaut), replicated. Chaque mode déploie les composants listés dans Méthodes et modes d'installation. Avec plusieurs composants, placez chacun sur ses hôtes dans Répartition des composants (Proposer un placement propose un placement qui respecte les cardinalités).

  4. Liez les dépendances. À l'étape Liaisons, choisissez pour chaque dépendance (database) Installer avec la plateforme ou Utiliser une connexion existante ; une dépendance facultative peut rester sur Aucune liaison.

  5. Configurez. À l'étape Configuration, relisez les paramètres (voir Paramètres de configuration). Les mots de passe laissés vides avec une valeur générée par défaut sont générés et scellés par le Manager.

  6. Relisez et installez. À l'étape Installation, le Manager valide le plan et affiche l'ordre d'installation ; quand il indique « Le plan est valide. Prêt pour l'installation. », choisissez Installer. Un mode hautement disponible n'est installé que si ses contrôles HA réussissent.

  7. Vérifiez. L'opération se termine quand les contrôles de santé de chaque instance réussissent (voir Contrôles de santé) ; le service apparaît alors en marche dans Services. Ouvrez le service et choisissez Lancer le test fonctionnel dans la carte Contrôles : Crée un magasin et un modèle, écrit une relation, vérifie qu'elle est autorisée et qu'une autre ne l'est pas, puis supprime le magasin.

Connecter un service existant​

Schémashttps, http
Port par défaut8080
Authentificationfacultative
Contrôle de santé/healthz
Méthode d'authentificationChampsDescription
presharedtokenClé partagée de OPENFGA_AUTHN_PRESHARED_KEYS (méthode d'authentification preshared), celle qu'envoie la plateforme.
none-Méthode none (défaut d'OpenFGA) : tout appelant qui l'atteint lit et écrit ses tuples.

Documentation officielle : https://openfga.dev/docs/getting-started/setup-openfga/configure-openfga

ChampTypeDéfautDescriptionRemarques
Identifiant du magasin (store_id)string-Identifiant du magasin utilisé par la plateforme.-

Haute disponibilité​

Clusterréplicas (replication)
Haute disponibilitéexterne (external)
Basculerépartiteur (load-balancer)
Réplicationstockage partagé (shared-store)
Quorumaucun (none)
Découverteaucun (none)
Point d'entréerépartiteur (load-balancer)
Documentation officiellehttps://openfga.dev/docs/best-practices/running-in-production
Paramètre TLS entre pairstls_enabled

Prérequis​

PrérequisDoit être hautement disponibleModesDescription
databaseouimodes de niveau ha ou clusterPostgreSQL hautement disponible portant le modèle d'autorisation et les tuples.

Topologie par mode​

ModesNiveau le plus haut du catalogueRépartitionComposant du quorumDomaines de panneDescription
memoryautonome (standalone)unique (single)-1Un serveur, données en mémoire, perdues au redémarrage.
standaloneautonome (standalone)unique (single)-1Un serveur sur PostgreSQL.
replicatedha (ha)actif-actif (active-active)-2Plusieurs serveurs sans état partageant PostgreSQL, derrière le répartiteur.

Paramètres de configuration​

Réseau​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Port HTTP (http_port)port8080-nonnonouiPort de l'API HTTP et de /healthz.
Port gRPC (grpc_port)port8081-nonnonouiPort de l'API gRPC.
Port des métriques (metrics_port)port2112-nonnonouiPort Prometheus.
TLS (tls_enabled)boolfalse-nonnonouiServir les API HTTP et gRPC en TLS avec un certificat de l'autorité de la console.

Sécurité​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Clé prépartagée (preshared_key)passwordgénéré-nonouinonClé porteuse des clients de l'API (EAI_OPENFGA_API_TOKEN du Control Plane).

Journalisation​

ParamètreTypeDéfautValeurs permisesObligatoireSecretRedémarrageDescription
Niveau de journalisation (log_level)enuminfodebug, info, warn, errornonnonnonVerbosité du journal du serveur.

Dépendances​

Pour chaque dépendance active, le Manager prend la première solution parmi : la liaison choisie dans l'assistant ; un service de la même installation qui la fournit ; un service déjà installé dans le cluster ; la seule connexion du type attendu. Sinon, une dépendance facultative reste non liée, et une dépendance obligatoire est ajoutée à l'installation dans son mode par défaut (la colonne ci-dessous nomme le service du catalogue ajouté).

LiaisonFournie parType de connexionPoint d'accèsFacultativeQuand rien n'est liéDescription
database (standalone, replicated)postgresqlpostgresqlsqlnonpostgresql est ajouté à l'installationBase des tuples et des modèles d'autorisation.

Points d'accès​

Point d'accèsSchémaComposantPortCheminParamètre TLSParamètres de liaisonSecrets de liaisonCommande de provisionnement
httphttpopenfga-server8080 (http_port)-tls_enabled-token-
grpcgrpcopenfga-server8081 (grpc_port)-----

Fichiers de configuration client​

Fichiers rendus pour le téléchargement de la configuration client :

  • openfga.env (client.env.j2)

Commandes​

CommandeComposantCibleDescription
Migrer le schéma (migrate)openfga-serverpremier hôteApplique les migrations de la base (modes PostgreSQL ; obligatoire avant chaque mise à jour).

Contrôles de santé​

Vivacité (par instance)​

ComposantContrôleDétails
openfga-serverHTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn if config.tls_enabled else (host.ip or '127.0.0.1') }}:{{ config.http_port }}/healthzAttendu 200 ; 30 tentatives ; intervalle 1 s ; délai 3 s

Disponibilité (contrôle du service)​

ContrôleDétails
HTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn if config.tls_enabled else (host.ip or '127.0.0.1') }}:{{ config.http_port }}/healthzAttendu 200 ; 5 tentatives ; intervalle 2 s ; délai 5 s

Test fonctionnel​

Crée un magasin et un modèle, écrit une relation, vérifie qu'elle est autorisée et qu'une autre ne l'est pas, puis supprime le magasin. (openfga-server: create_store, write_model, write_tuple, check_allowed, check_denied, delete_store)

Contrôles préalables​

ContrôleTypeSignificationSévéritéComposants
memorymemory_mb {"min": 512}au moins 512 Mo de mémoirebloquanttous les composants
http_port_freeport_free {"param": "http_port"}port 8080 libre sur l'hôtebloquantopenfga-server
grpc_port_freeport_free {"param": "grpc_port"}port 8081 libre sur l'hôtebloquantopenfga-server

Désinstallation​

Chemins supprimés quand les données sont purgées : {{ paths.log }}.

Liens rapides​

  • Métriques : http://{{ host.fqdn }}:{{ config.metrics_port }}/metrics

Documentation amont​