Vous êtes sur la page 1sur 14

kokou Agbedanou

Gestion de l’authentification et autorisation

1. Introduction

Keystone (la clé de voûte) est le service de gestion des identités et des autorisations d’accès, c’est-à-dire
qu’il fournit tout le mécanisme pour gérer les utilisateurs, les tokens et le catalogue de droits pour tous les
composants d’OpenStack.

Ce module est sollicité par exemple lorsqu’un utilisateur souhaite se connecter sur le portail, lorsqu’un
utilisateur souhaite provisionner une machine virtuelle... C’est de loin le module le plus utilisé d’OpenStack.

Keystone fonctionne avec un jeton d’autorisation qui est utilisé pour l’accès aux ressources et services
d’OpenStack.

Comme tous les services, Keystone dispose d’une API RESTful.

2. Concept

Lorsqu’un utilisateur se connecte via Horizon, ce dernier envoie une requête HTTP à Keystone pour lui
demander s’il peut autoriser la connexion ; Keystone valide les points suivants :

ˇ
L’authentification : est-ce que les credentials (droits) sont valides ?
ˇ
Le contrôle d’accès : l’utilisateur existe-t-il ? Fait-il partie d’un tenant (projet) ? Dispose-t-il d’un
rôle ?
ˇ
L’autorisation : quels sont les droits d’accès de l’utilisateur ?

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -1-
kokou Agbedanou

Processus d’authentification Keystone (source : http://docs.openstack.org/).

3. Architecture

a. Modèle de données

Le modèle de données de Keystone est défini dans la base de données d’OpenStack installée sur le
serveur contrôleur. La base Keystone comprend 18 tables dont les principales sont :

ˇ
user : personne, système ou service, disposant de droits (credentials) ; un user est associé à un
projet.
ˇ
group : groupe d’utilisateurs. Un group est associé à un projet ou domaine.
ˇ
project (tenant) : conteneur d’un ou plusieurs utilisateurs ou services.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -2-
kokou Agbedanou

ˇ
domain : objet contenant des utilisateurs, des groupes et des projets.
ˇ
role : objet comprenant des droits et privilèges.
ˇ
token : identifiant des droits associés à un utilisateur ou à un utilisateur et un projet.
ˇ
policy (règles) : description des besoins nécessaires d’une action.
ˇ
endpoint : point d’entrée vers les services (interface publique).

Liste des champs des principales tables de la base de données keystone :

Tables de la database Keystone :

# mysql -u root -p
> use keystone;
> show tables;

| Tables_in_keystone |
+-----------------------+
| assignment |
| credential |
| domain |
| endpoint |
| group |
| id_mapping |
| migrate_version |
| policy |
| project |
| region |
| revocation_event |

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -3-
kokou Agbedanou

| role |
| service |
| token |
| trust |
| trust_role |
| user |
| user_group_membership |
+-----------------------+

b. Services internes

Keystone fournit des fonctionnalités de gestion d’identités au travers de quatre services :

ˇ
Token (Token back-end) : le service token valide et gère les tokens (jetons) utilisés pour valider
les requêtes après qu’un utilisateur ou un projet a validé ses droits.
ˇ
Catalogue (Catalog back-end) : le catalogue de service fournit des points d’entrée. Un endpoint
est une adresse réseau (URL) permettant l’accès à un service.
ˇ
Policy (Policy back-end) : c’est le moteur d’autorisation basé sur les règles.
ˇ
Identity (Identity back-end) : le service d’identité gère la validation des droits (credentials) pour
les utilisateurs, les groupes, les projets (tenant), les domaines, les rôles et tout type de
metadata. Les credentials sont en fait des droits classiques de type CRUD (Create-Read-
Update-Delete) qui sont associés à une donnée.

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -4-
kokou Agbedanou

Schéma des services Keystone

c. Services de back-ends

Chaque service interne peut être paramétré pour utiliser des back-ends de différents types :

ˇ
KVS : une interface de back-end vers d’autres back-ends supportant des requêtes sur clés.
ˇ
SQL : back-end basé sur les drivers SQLAlchemy pour garder les données persistantes.
ˇ
PAM : back-end qui utilise les services PAM (Pluggable Authentication Module) pour
authentifier.
ˇ
LDAP : permet de stocker des utilisateurs et projets dans des arborescences dissociées.
ˇ
Template : template en dur pour configurer Keystone.

Le back-end SQL

Le peuplement de la base de données Keystone est possible via des scripts déjà

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -5-
kokou Agbedanou

disponibles avec la version d’OpenStack.

Exemple :

# su -s /bin/sh -c "nova-manage db sync" nova

4. Création de tenants, utilisateurs et rôles

Avant de pouvoir instancier une première machine virtuelle, il faut respecter quelques règles :

1) Création d’un projet (tenant), qui permet d’obtenir un tenant_id.

2) Création d’un utilisateur, qui permet d’obtenir un user_id.

3) Rattachement de l’utilisateur au projet.

4) Affectation d’un rôle à l’utilisateur.

5) Création d’un réseau, d’un subnet et d’un routeur.

Ces manipulations peuvent être effectuées depuis le dashboard ou en ligne de commande directement
sous Linux.

Exemples

Création du projet project_one

# keystone tenant-create --name project_one


+ -------------+----------------------------------+
| Property | Value |
+ -------------+----------------------------------+
| description | |
| enabled | True |

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -6-
kokou Agbedanou

| id | fb727529fd32488ea7a68d3ed6b3c588 |
| name | project_one |
+-------------+----------------------------------+

Création d’un nouvel utilisateur user_one et rattachement au tenant project_one

# keystone user-create --name=user_one --pass=user_one --tenant-


id fb727529fd32488ea7a68d3ed6b3c588 --email=user_one@domain.com
+ ----------+----------------------------------+
| Property | Value |
+ ----------+----------------------------------+
| email | user_one@domain.com |
| enabled | True |
| id | b795943dc75c47c88d42b4ef9a0fcc77 |
| name | user_one |
| tenantId | fb727529fd32488ea7a68d3ed6b3c588 |
+ ----------+----------------------------------+

Lister les rôles disponibles dans Keystone

# Conservation de l’id du rôle qui est concerné

# keystone role-list
+ ----------------------------------+----------------------+
| id | name |
+ ----------------------------------+----------------------+
| 791c600f5a5044ce8336de43452f6bdb | KeystoneAdmin |
| a5a54ffaf6b04e4ba4024a076ef36aee | KeystoneServiceAdmin |
| 708cea3c4fe540aca301bf64a88a5525 | Member |
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
| 597a35aff9ff4f3a864c26bb67b64d5d | admin |
+ ----------------------------------+----------------------+

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -7-
kokou Agbedanou

Assignation du rôle au nouvel utilisateur

La commande suivante permet de lier rôle (member), tenant (project_one) et user (user_one).

# keystone user-role-add --tenant-id


fb727529fd32488ea7a68d3ed6b3c588 --user-id
b795943dc75c47c88d42b4ef9a0fcc77 --role-id
708cea3c4fe540aca301bf64a88a5525

5. Commandes Keystone

a. Syntaxe de la commande keystone

Keystone peut être appelé de la façon suivante :

# keystone < optional arguments> < subcommand> ...

Arguments optionnels

[--version] [--debug] [--os-username <auth-user-name>]


[--os-password <auth-password>]
[--os-tenant-name <auth-tenant-name>]
[--os-tenant-id <tenant-id>] [--os-auth-url <auth-url>]
[--os-region-name <region-name>]
[--os-identity-api-version <identity-api-version>]
[--os-token <service-token>]
[--os-endpoint <service-endpoint>] [--os-cache]
[--force-new-token] [--stale-duration <seconds>] [--insecure]
[--os-cacert <ca-certificate>] [--os-cert <certificate>]

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -8-
kokou Agbedanou

[--os-key <key>] [--timeout <seconds>]

Les arguments de type --os-XXX sont des informations passées à la commande keystone. S’ils ne sont
pas renseignés dans la commande, leur valeur par défaut est celle de la variable d’environnement ; par
exemple, --os-username prendra la valeur de la variable OS_USERNAME.

Sous-commandes

Il existe 35 sous-commandes de keystone ; les principales portent sur les endpoints d’API, les rôles, les
services, les utilisateurs et les tenants avec, à chaque fois des options de création (create), suppression
(delete), affichage (list), interrogation (get) et mise à jour (update) :

keystone user-create, keystone user-delete, keystone user-get,


keystone user-list, keystone user-password-update

Exemple de commande keystone

# keystone --version --debug --os-username sdeon user-list

Cette commande fournit la version du programme keystone (--version), affiche le résultat en mode debug
(--debug), utilise l’utilisateur sdeon (--os-username) pour l’authentification à OpenStack et, enfin, affiche la
liste des utilisateurs de la base Keystone (user-list).

b. Commandes concernant les utilisateurs

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -9-
kokou Agbedanou

Commande Utilité Paramètres Exemple

user-create Création nom, mot de keystone user-create


utilisateur passe et --name=admin
adresse --pass mypass
e-mail, --tenant_id=<num>
--email=admin@cloud-morning.fr
tenant_id et
enabled

user-delete Suppression user_id ou keystone user-delete < num>


d’utilisateur nom de
l’utilisateur

user-list Liste des keystone user-list


utilisateurs

user-update Mise à jour des user_id keystone user-update < num> --name NewName
données
utilisateur

c. Commandes concernant les tenants

Commande Utilité Paramètres Exemple

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 10 -


kokou Agbedanou

tenant-create Création tenant nom, description et keystone tenant-create --name <tenant-name>


statut du tenant
(par défaut, le
statut est à true)

[--description
<tenant-description>]

[--enabled <true|false>]

tenant-delete Suppression de tenant_id ou nom keystone tenant-


tenant du tenant delete < num>

tenant-list Liste des tenants keystone tenant-list

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 11 -


kokou Agbedanou

tenant-update Mise à jour des nom, description, keystone tenant-update


données du tenant statut enabled
(true/false), nom
ou numéro du
tenant

[--name <tenant_name>]

[--description
<tenant-description>]

[--enabled <true|false>]

< tenant>

d. Commandes concernant les rôles

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 12 -


kokou Agbedanou

Commande Utilité Paramètres Exemple

role-create Création rôle nom du rôle keystone role-create


--name= <role_name>

role-delete Suppression rôle role_id ou nom du keystone role-delete < num>


rôle

role-list Liste des rôles keystone role-list

role-get Interrogation rôle role_id ou nom du keystone role-get <role>


(affichage des rôle
détails du rôle)

e. Commandes concernant les services

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 13 -


kokou Agbedanou

Commande Utilité Paramètres Exemple

service-create Création service type de service keystone


(identity, compute, service-create
network, image, --type <type>
object-store, ...), [--name <name>]
[--description
nom et description
<service-description>]

service-delete Suppression service_id ou nom keystone


service du service service-delete < num>

service-list Liste des services keystone user-list

service-get Interrogation service_id ou nom keystone service-get <service>


service (affichage du rôle
des détails du
service)

© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 14 -

Vous aimerez peut-être aussi