title | excerpt | updated |
---|---|---|
Comment utiliser les politiques IAM via l’API OVHcloud |
Découvrez comment donner des droits d'accès spécifiques aux utilisateurs d'un compte OVHcloud |
2024-08-21 |
Ce guide explique comment fournir des droits d'accès spécifiques aux utilisateurs d'un compte OVHcloud.
La gestion des accès d'OVHcloud est basée sur un système de gestion de « politiques ». Il est possible d'écrire différentes politiques qui donnent aux utilisateurs l'accès à des fonctionnalités spécifiques sur les produits liés à un compte OVHcloud.
Dans le détail, une politique contient :
- Une ou plusieurs identités ciblées par cette politique.
- Il peut s'agir d'identifiants de compte, d'utilisateurs ou de groupes d'utilisateurs (comme ceux utilisés avec la fédération d'identité).
- Une ou plusieurs ressources concernées par cette politique.
- Une ressource est un produit OVHcloud qui sera concerné par cette politique (un nom de domaine, un serveur Nutanix, un Load Balancer, etc.)
- Une ou plusieurs actions autorisées, interdites ou exclues par cette politique.
- Les actions sont les droits spécifiques affectés par cette politique (redémarrer le serveur, créer un compte email, résilier un produit, etc).
Par exemple, nous pouvons créer une politique pour donner à un utilisateur appelé John, pour un VPS, l'accès à l'action « reboot ».
Découvrez en détail comment ces politiques peuvent être déclarées en utilisant l'API OVHcloud, comment lister les identités, ressources et actions disponibles pour ces politiques.
Pour mettre en place une politique, vous aurez besoin des éléments suivants :
- Un compte client OVHcloud
- Savoir gérer des comptes utilisateurs
- Disposer de produits liés à votre compte OVHcloud (Load Balancer, nom de domaine, VPS, etc.)
Cette première partie décrit comment créer et mettre à jour des politiques.
Les ressources, les groupes de ressources et les actions nécessaires à la création d'une politique seront décrits dans les sections suivantes.
https://api.ovh.com/console-preview/?section=%2Fiam&branch=v2#get-/iam/policy
Méthode | Chemin | Description |
---|---|---|
GET | /iam/policy | Récupérer toutes les politiques |
POST | /iam/policy | Créer une nouvelle politique |
GET | /iam/policy/{policyId} | Récupérer une politique spécifique |
PUT | /iam/policy/{policyId} | Mettre à jour une politique existante |
DELETE | /iam/policy/{policyId} | Supprimer une politique spécifique |
L'exemple suivant montre comment une politique est construite.
Récupérez toutes les politiques, y compris celles pré-générées par OVHcloud, en appelant le endpoint API suivant : /iam/policy
Exemple de sortie :
/iam/policy
[
{
"id": "69470db1-5372-4e32-acf1-edc2afd84c12",
"owner": "xx1111-ovh",
"name": "ovh-default",
"readOnly": true,
"identities": [
"urn:v1:eu:identity:account:xx1111-ovh"
],
"resources": [
{
"urn": "urn:v1:eu:resourceGroup:aa0713ab-ed13-4f1a-89a5-32aa0cb936d8"
}
],
"permissions": {
"allow": [
{
"action": "*"
}
]
},
"createdAt": "2023-01-27T11:29:22.197537Z",
"updatedAt": "2023-01-27T11:29:22.197537Z"
}
]
Dans cet exemple, le compte "urn:v1:eu:identity:account:xx1111-ovh" peut faire toutes les actions ("action":"*") pour le groupe de ressources "urn:v1:eu:resourceGroup:aa0713ab-ed13-4f1a-89a5-32aa0cb936d8". Cette politique est détenue par l'identifiant client OVHcloud "xx1111-ovh" (il correspond au rôle d'administrateur, il est créé par OVHcloud et ne peut pas être modifié).
Les éléments des politiques sont définis par des URNs. Ces URNs sont définies par le modèle suivant :
URN | : | version | : | plaque | : | type | : | sous-type | : | id | |
---|---|---|---|---|---|---|---|---|---|---|---|
Description | préfixe immuable | : | version du système IAM | : | Plaque où se trouve l'URN | : | Type de l'URN actuelle | : | (optionnel) Sous-type pour les types identity ou resource | : | Identifiant unique associé à l'URN |
Valeurs possibles | urn | : | v1 | : | eu, ca, us | : | identity, resource, resourceGroup | : | Pour le type identity : account, user, group Pour le type resource : tous les types de ressources |
: | Valeur alphanumérique |
Account ID Exemple | urn | : | v1 | : | eu | : | identity | : | account | : | xx1111-ovh |
User group Exemple | urn | : | v1 | : | eu | : | identity | : | group | : | xx1111-ovh/[email protected] |
VPS Exemple | urn | : | v1 | : | ca | : | resource | : | vps | : | vps-5b48d78b.vps.ovh.net |
Resource Group Exemple | urn | : | v1 | : | us | : | resourceGroup | : | aa0713ab-ed13-4f1a-89a5-32aa0cb936d8 |
Les actions et les URNs peuvent finir par un caractère wildcard *
. Cela permet de faire référence à plusieurs resources ou identités en une seule ligne.
Exemple d'une URN avec un wildcard :
urn:v1:eu:resource:vps:*
fera référence à n'importe quel vps.
Exemple d'une action avec un wildcard :
vps:apiovh:*
fera référence à toutes les actions de type vps.
- id: Identifiant unique de la politique. Il suit le format UUID.
- owner: Le compte qui a créé cette politique.
- name: Le nom de la politique. Il est possible d'utiliser ce nom pour organiser les politiques. Il n'y a pas de format à suivre (mis à part le préfixe « ovh- » qui est réservé aux politiques OVHcloud).
- readOnly: S'il est en « true », il indique que la politique ne peut pas être modifiée. Il représente souvent les politiques gérées par OVHcloud.
- identities: Les identités concernées par la politique. Elles sont spécifiées par un URN. account: account-id pour le compte client OVHcloud, user: account-id/username pour le compte utilisateur, group: account-id/username pour un groupe utilisateur.
- resources: Les ressources concernées par la politique. Elles sont spécifiées par un URN, resource pour une ressource, resourceGroup pour un groupe de ressources.
- permissions:
- allow: Ensemble des actions autorisées pour les identités concernant les ressources. Toutes les actions sont refusées par défaut.
- deny: Ensemble des actions explicitement interdites pour les identitités concernant les ressources. Une action interdite sera refusée quelque soient les actions autorisées dans d'autres politiques.
- except: Extension du paramètre d'autorisation allow. Ensemble d'actions à ne pas autoriser même si elles sont incluses dans les actions allow. Par exemple, ceci est utile lorsqu'il y a une action autorisée par un wildcard mais qu'il est nécessaire d'exclure une action spécifique qui serait autrement incluse dans le wildcard. Contrairement au deny, except est limité au périmètre d'une seule politique.
- permissionsGroups: Liste des groupes de permissions appliqués à cette politique.
- expiredAt: Date après laquelle la politique sera désactivée.
- createdAt: Date de création de la politique.
- updateAt: Dernière mise à jour de la politique.
Créez une nouvelle politique en utilisant cet appel API :
Méthode | Chemin | Description |
---|---|---|
POST | /iam/policy | Créer une nouvelle politique |
Par exemple, créez une politique autorisant l'utilisateur nommé "user1" à faire des actions sur un VPS :
Exemples de création de politique
{
"description": "VPS - reboot and create snapshot",
"identities": [
"urn:v1:eu:identity:user:xx1111-ovh/user1"
],
"name": "vps-reboot-snapshot",
"permissions": {
"allow": [
{
"action": "vps:apiovh:reboot"
},
{
"action": "vps:apiovh:snapshot/create"
}
]
},
"resources": [
{
"urn": "urn:v1:eu:resource:vps:vps-5b48d78b.vps.ovh.net"
}
]
}
Cette politique ne concerne pas un compte mais un utilisateur. L'URN de l'identité correspond donc au format suivant : "urn:v1:eu:identity:user:account-id/username".
{
"description": "VPS - all except delete snapshot",
"identities": [
"urn:v1:eu:identity:user:xx1111-ovh/user2"
],
"name": "vps-all-but-delete-snapshot",
"permissions": {
"allow": [
{
"action": "vps:apiovh:*"
}
],
"except": [
{
"action": "vps:apiovh:snapshot/delete"
}
]
},
"resources": [
{
"urn": "urn:v1:eu:resource:vps:vps-5b48d78b.vps.ovh.net"
}
]
}
Cette politique utilise un wildcard et un except. Cela permet de donner un ensemble de permissions facilement. Ici l'utilisateur user2
aura tous les droits de type vps sur vps-5b48d78b.vps.ovh.net
, à l'exception du droit de suppression des snapshots.
Avec ces requêtes POST /iam/policy
, les politiques seront créées.
Vérifiez cela avec GET /iam/policy
:
GET /iam/policies
[
{
"id": "69470db1-5372-4e32-acf1-edc2afd84c12",
"owner": "xx1111-ovh",
"name": "ovh-default",
"readOnly": true,
"identities": [
"urn:v1:eu:identity:account:xx1111-ovh"
],
"resources": [
{
"urn": "urn:v1:eu:resourceGroup:aa0713ab-ed13-4f1a-89a5-32aa0cb936d8"
}
],
"permissions": {
"allow": [
{
"action": "*"
}
]
},
"createdAt": "2023-01-27T11:29:22.197537Z",
"updatedAt": "2023-01-27T11:29:22.197537Z"
},
{
"id": "9dfe6a03-1937-4287-8ab7-866224d333b1",
"owner": "xx1111-ovh",
"name": "vps-reboot-snapshot",
"readOnly": false,
"description": "VPS - reboot and create snapshot",
"identities": [
"urn:v1:eu:identity:user:xx1111-ovh/user1"
],
"resources": [
{
"urn": "urn:v1:eu:resource:vps:vps-5b48d78b.vps.ovh.net"
}
],
"permissions": {
"allow": [
{
"action": "vps:apiovh:reboot"
},
{
"action": "vps:apiovh:snapshot/create"
}
]
},
"createdAt": "2023-02-07T15:24:57.680037Z"
},
{
"id": "73a220d0-8346-4d4a-bdab-c0f671d62368",
"owner": "xx1111-ovh",
"name": "vps-all-but-delete-snapshot",
"readOnly": false,
"description": "VPS - all except delete snapshot",
"identities": [
"urn:v1:eu:identity:user:xx1111-ovh/user2"
],
"resources": [
{
"urn": "urn:v1:eu:resource:vps:vps-5b48d78b.vps.ovh.net"
}
],
"permissions": {
"allow": [
{
"action": "vps:apiovh:*"
}
],
"except": [
{
"action": "vps:apiovh:snapshot/delete"
}
]
},
"createdAt": "2023-02-07T15:32:18.957023Z"
}
]
Les politiques ont été créées avec succès. Maintenant, "user1" peut effectuer des redémarrages et créer des sauvegardes (snapshots) sur le VPS "urn:v1:eu:resource:vps:vps-5b48d78b.vps.ovh.net". "user2" peut effectuer toutes les actions vps à l'exception de la suppression des snapshots sur le VPS "urn:v1:eu:resource:vps:vps-5b48d78b.vps.ovh.net".
Les politiques s'appliquent aux utilisateurs, qui peuvent être des comptes, des utilisateurs ou des groupes d'utilisateurs.
Cette section décrit comment récupérer ou créer un utilisateur pour la politique.
https://api.ovh.com/console-preview/?section=%2Fme&branch=v1#overview
Méthode | Chemin | Description |
---|---|---|
GET | /me/identity/user | Récupérer tous les utilisateurs de ce compte |
POST | /me/identity/user | Créer un nouvel utilisateur |
GET | /me/identity/user/{user} | Obtenir les détails de cet utilisateur spécifique |
PUT | /me/identity/user/{user} | Modifier un utilisateur |
DELETE | /me/identity/user/{user} | Supprimer un utilisateur |
GET | /me/identity/group | Récupérer tous les groupes de ce compte |
POST | /me/identity/group | Créer un nouveau groupe |
GET | /me/identity/group/{group} | Obtenir les détails de ce groupe spécifique |
PUT | /me/identity/group/{group} | Modifier un groupe |
DELETE | /me/identity/group/{group} | Supprimer un groupe |
Listez tous les utilisateurs actuels liés au compte en appelant :
/me/identity/user
[
"user1",
"user2"
]
Ces utilisateurs peuvent être utilisés sur des politiques avec le format URN: urn:v1:eu:identity:user:xx1111-ovh/user1
Pour créer un nouvel utilisateur, appelez l'API avec le body suivant :
post /me/identity/user
{
"description": "string",
"email": "string",
"group": "string",
"login": "string",
"password": ""
}
Listez tous les groupes actuels liés au compte en appelant :
/me/identity/group
[
"ADMIN",
"DEFAULT",
"UNPRIVILEGED",
"[email protected]"
]
Ces groupes d'utilisateurs peuvent être utilisés sur des politiques avec le format URN : urn:v1:eu:identity:group:xx1111-ovh/[email protected]
Pour créer un nouveau groupe d'utilisateurs, appelez l'API avec le body suivant:
post /me/identity/group
{
"description": "string",
"name": "string",
"role": "REGULAR"
}
Pour plus d'informations, consultez notre documentation sur la gestion des utilisateurs.
Si la fédération d'identité est activée via la connexion SSO, les politiques s'appliquent uniquement aux groupes d'utilisateurs, comme décrit dans la section précédente.
Les politiques font référence à des ressources. Les ressources correspondent à tous les produits OVHcloud souscrits par le compte OVHcloud et pouvant être contrôlés par ce compte.
Cette section décrit comment récupérer les informations sur les ressources pour les utiliser dans une politique.
https://api.ovh.com/console-preview/?section=%2Fiam&branch=v2#get-/iam/resource
Méthode | Chemin | Description |
---|---|---|
GET | /iam/resource | List all resources |
GET | /iam/resource/{resourceId} | Retrieve a resource |
Visualisez toutes les ressources liées au compte OVHcloud en appelant :
/iam/resource
[
{
"id": "b96ffed4-3467-4129-b8be-39a3eb3a0a93",
"urn": "urn:v1:eu:resource:vps:vps-5b48d78b.vps.ovh.net",
"name": "vps-5b48d78b.vps.ovh.net",
"displayName": "vps-5b48d78b.vps.ovh.net",
"type": "vps",
"owner": "xx1111-ovh"
},
{
"id": "c24ace5e-6c9c-436b-9a73-515db8df6250",
"urn": "urn:v1:eu:resource:emailDomain:acme.com",
"name": "acme.com",
"displayName": "acme.com",
"type": "emailDomain",
"owner": "xx1111-ovh"
},
{
"id": "8d70a49b-7a8b-4ec0-ad4b-756da802d994",
"urn": "urn:v1:eu:resource:cdn:cdn-46.105.198.89-12969",
"name": "cdn-46.105.198.89-12969",
"displayName": "cdn-46.105.198.89-12969",
"type": "cdn",
"owner": "xx1111-ovh"
}
]
Dans cet exemple, le compte a trois ressources disponibles (un VPS, un domaine pour sa messagerie et un CDN). Chacune de ces ressources possède un ensemble d'attributs permettant de les identifier sur les politiques.
- id: Identifiant unique de la ressource. Il suit le format UUID.
- urn: Ressource URN.
- name: Le nom de la ressource.
- displayName: Le nom de la ressource tel qu'il est affiché dans l'interface utilisateur.
- type: Le type de la ressource (vps, publicCloudProject, dnsZone, domain, emailDomain, etc.)
- owner: Le détenteur de la ressource (Account ID)
Pour faciliter la gestion des politiques pour un grand nombre de ressources, il est possible de mettre en place un groupe de ressources qui regroupe plusieurs ressources sous un URN unique.
https://api.ovh.com/console-preview/?section=%2Fiam&branch=v2#get-/iam/resourceGroup
Méthode | Chemin | Description |
---|---|---|
GET | /iam/resourceGroup | Récupérer tous les groupes de ressources |
POST | /iam/resourceGroup | Créer un nouveau groupe de ressources |
GET | /iam/resourceGroup/{groupId} | Récupérer un groupe de ressources spécifique |
PUT | /iam/resourceGroup/{groupId} | Mettre à jour un groupe de ressources existant |
DELETE | /iam/resourceGroup/{groupId} | Supprimer un groupe de ressources spécifique |
Listez tous les groupes de ressources en appelant /iam/resourceGroup.
Cette API peut être appelée avec un paramètre query-string « details » pour développer les résultats avec tous les attributs des ressources retournées.
Exemple de sortie:
/iam/resourceGroup
[
{
"id": "aa0713ab-ed13-4f1a-89a5-32aa0cb936d8",
"urn": "urn:v1:eu:resourceGroup:aa0713ab-ed13-4f1a-89a5-32aa0cb936d8",
"readOnly": true,
"name": "myVPS",
"owner": "xx1111-ovh",
"resources": [
{
"id": "b96ffed4-3467-4129-b8be-39a3eb3a0a93"
},
{
"id": "7a19dbca-7da5-460f-a59b-69d56e57bf9d"
},
{
"id": "50423397-8984-4d44-8505-fdd489c2c9fb"
}
],
"updatedAt": "2023-01-27T11:29:22.197537Z",
"createdAt": "2023-01-27T11:29:22.197537Z"
}
]
Dans cet exemple, nous pouvons voir que ce groupe de ressources "urn:v1:eu:resourceGroup:aa0713ab-ed13-4f1a-89a5-32aa0cb936d8" a 3 ressources. Cela signifie qu'une politique appliquée à ce groupe de ressources sera appliquée sur ces 3 ressources.
- id: Identifiant unique du groupe de ressources. Il suit le format UUID.
- urn: URN du groupe de ressources à utiliser dans la politique.
- readOnly: Ne peut pas être modifié si
true
. Les groupes de ressources par défaut sont en lecture seule. - name: Nom du groupe de ressources.
- owner: Détenteur du groupe de ressources (Account ID).
- resources:
- Si details = false : Ensemble des UUID des ressources.
- Si details = true : Les ressources seront développées avec leurs attributs (comme le résultat que nous obtenons via l'API des ressources).
- createdAt: Date de création du groupe de ressources.
- updateAt: Date de la dernière mise à jour du groupe de ressources.
Créez un groupe de ressources avec l'API suivante :
Méthode | Chemin | Description |
---|---|---|
POST | /iam/resourceGroup | Créer un nouveau groupe de ressources |
L'exemple suivant crée un groupe de ressources "Test_Envrionment" contenant 2 ressources:
{
"name": "Test_environment",
"resources": [
{
"id": "b10611a9-7cc1-40b7-8475-18aabcdffc62"
},
{
"id": "53f815b1-c020-4e5d-8239-fbbcaaca1742"
}
]
}
Les politiques contiennent une liste des Actions qui seront autorisées ou refusées aux utilisateurs.
Ces actions sont spécifiques à chaque produit, comme le redémarrage d'un serveur de base de données, la commande d'une mise à niveau, la restauration d'un snapshot, etc.
https://api.ovh.com/console-preview/?section=%2Fiam&branch=v2#get-/iam/reference/action
Méthode | Chemin | Description |
---|---|---|
GET | /iam/reference/action | Récupérer toutes les actions |
Permet de lister toutes les actions disponibles pour les politiques avec l'API, par exemple :
exemple d'action
{
"action": "vps:apiovh:reboot",
"description": "Request a reboot of the machine",
"resourceType": "vps",
"categories": [
"OPERATE"
]
}
Cette action est "vps:apiovh:reboot", elle vise la capacité à redémarrer un VPS.
L'appel à /iam/reference/action liste toutes les actions disponibles (ATTENTION : cela représente une quantité énorme d'éléments).
Il est fortement recommandé de spécifier le resourceType comme paramètre query-string pour cet appel API (voir la section suivante).
- action: L'action elle-même
- description: Description de l'action
- resourceType: Le type de ressource ciblé par l'action
- categories: Les catégories de cette action (CREATE, READ, EDIT, OPERATE, DELETE)
OVHcloud met à disposition des groupes de permissions regroupant toutes les actions nécessaires pour des cas d'usage précis.
Les groupes de permissions sont accessible via l'API suivante :
Méthode | Chemin | Description |
---|---|---|
GET | /iam/permissionsGroup | Récupérer tous les groupes de permissions |
{
"id": "00000000-0000-0000-0001-000000000001",
"urn": "urn:v1:eu:permissionsGroup:ovh:globalAdmin",
"name": "globalAdmin",
"owner": "ovh",
"description": "Give global admin access across all OVHcloud products",
"permissions": {
"allow": [
{
"action": "*"
}
]
},
"createdAt": "2023-03-14T09:10:57.40418Z",
"updatedAt": null
},
Ces groupes de permissions peuvent ensuite être utilisés en complément ou à la place des actions unitaires dans les politiques d'accès :
{
"description": "",
"identities": [...],
"name": "",
"permissions": {
"allow": [
{
"action": "..."
},
]
},
"permissionsGroups": [
{
"urn": "urn:v1:eu:permissionsGroup:ovh:globalAdmin"
}
],
"resources": [...]
}
La description complète des groupes de permissions est disponible dans la documentation dédiée
Méthode | Chemin | Description |
---|---|---|
GET | /iam/reference/resource/type | Récupérer tous les types de ressources |
Voici une partie du résultat:
/iam/reference/resource/type
[
"account",
"packXdsl",
"cloudDB",
"loadbalancer",
"mxplanAccount",
"publicCloudProject",
"voipSmsvn",
"vps",
]
Échangez avec notre communauté d'utilisateurs.