Comment utiliser les comptes de service pour se connecter à OpenStack
Objectif
Pour automatiser des appels à des APIs protégées, il faut fournir des identifiants au code qui s'en charge. Avec les comptes de service OVHcloud, il est possible d'avoir un seul identifiant par script pour l'utilisation des différentes API proposées par les produits de OVHcloud (API de OVHcloud, API OpenStack, etc.).
Ce guide vous détaille comment utiliser les comptes de service afin de se connecter aux APIs OpenStack.
Cela vous permet :
- d'intégrer des alertes en provenance de votre infrastructure ;
- de gérer la montée en charge de votre infrastructure dynamiquement ;
- d'automatiser la résolution des incidents les plus courants.
Prérequis
- Un compte client OVHcloud.
- Savoir configurer des politiques d'accès via API.
- Vous savez utiliser l'API OpenStack.
- Avoir créé un compte de service via API.
En pratique
A des fins d'exemple dans ce guide, nous utiliserons le compte de service urn:v1:eu:identity:credential:xx11111-ovh/oauth2-0f0f0f0f0f0f0f0f pour accéder au projet Public Cloud urn:v1:eu:resource:publicCloudProject:0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f.
N'oubliez pas de modifier ces valeurs pour correspondre aux vôtres.
Associer des droits d'accès à OpenStack à son compte de service
Avant toute chose, il faut que notre compte de service puisse accèder à votre infrastructure OpenStack. OVHcloud fournit 11 niveaux de droits utilisables au sein d'OpenStack. Ils sont décrits dans le tableau suivant :
| Droits OpenStack | Nova: compute_manage | Nova: compute_snapshot_manage | Nova: compute_read | Swift: objectstore_all | glance: image_manage | glance: image_read | glance: image_import | Cinder: volume_manage | Cinder: volume_snapshot_manage | Cinder: volume_read | Neutron: network_manage | Neutron: network_read | Neutron: network_secgroup_manage | Neutron: network_secgroup_read | AI Training: ai_training_all | AI Training: ai_training_read |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| publicCloudProject:openstack:administrator | x | x | x | x | x | x | x | x | x | x | x | x | x | x | ||
| publicCloudProject:openstack:backupOperator | x | x | x | x | x | x | ||||||||||
| publicCloudProject:openstack:computeOperator | x | x | x | x | x | x | x | |||||||||
| publicCloudProject:openstack:imageOperator | x | x | x | |||||||||||||
| publicCloudProject:openstack:infrastructureSupervisor | x | x | x | x | x | |||||||||||
| publicCloudProject:openstack:networkOperator | x | x | x | |||||||||||||
| publicCloudProject:openstack:networkSecurityOperator | x | x | ||||||||||||||
| publicCloudProject:openstack:objectstoreOperator | x | |||||||||||||||
| publicCloudProject:openstack:volumeOperator | x | x | x | |||||||||||||
| publicCloudProject:ai:aiTrainingOperator | x | x | ||||||||||||||
| publicCloudProject:ai:aiTrainingRead | x |
Pour notre exemple, nous souhaitons ajouter le droit publicCloudProject:openstack:infrastructureSupervisor qui permet de récupérer des informations sur notre infrastructure. Il peut être utile pour mettre en place des scripts de monitoring.
Vous pouvez désormais ajouter la politique d'accès suivante :
Utiliser un compte de service avec la ligne de commande (CLI) OpenStack
Si vous utilisez votre infrastructure OpenStack avec la ligne de commande, vous devez utiliser les variables d'environnement suivantes :
Si vous utilisez les services de OVHcloud depuis la région EMEA, ajoutez les variables suivantes :
Si vous utilisez les services de OVHcloud depuis la région « Rest of the World », ajoutez les variables suivantes :
Puis ajoutez les variables suivantes avec les valeurs correspondant à votre configuration :
- OS_PROJECT_ID: identifiant de votre projet Public Cloud ;
- OS_CLIENT_ID: identifiant de votre compte de service ;
- OS_CLIENT_SECRET: secret de votre compte de service ;
- OS_REGION_NAME: région concernée par votre script.
Vous pouvez désormais utiliser votre ligne de commande pour observer vos machines virtuelles.
Vous n'aurez cependant pas accès aux services Object Storage Swift avec ce compte de service :
Utiliser le compte de service via le SDK Python
Pour se connecter en utilisant le SDK Python et les accès de OVHcloud, vous pouvez utiliser deux techniques :
- Les variables d'environnement : comme pour la CLI, vous pouvez configurer vos accès avec les variables d'environnement. Ce sont les mêmes que celles documentées dans la partie Utiliser un compte de service avec la ligne de commande (CLI) Openstack
- Un fichier de configuration clouds.yaml: si vous souhaitez déployer votre configuration avec un fichier clouds.yaml comme indiqué dans la documentation officielle Openstack, vous devez suivre le format suivant:
L'exemple précédent fonctionne sur la région EMEA. Si vous utilisez les services de OVHcloud depuis la région "Rest of the World", modifiez les lignes suivantes avec ces valeurs :
- identity_provider:
ovhcloud-world - discovery_endpoint:
https://iam.ovh.ca/role-adapter/urn:v1:ca:resource:publicCloudProject:pci/.well-known/openid-configuration
Pour rappel, n'oubliez pas de remplacer les variables de ces exemples par les valeurs correspondant à votre configuration.
Puis ajoutez les variables suivantes avec les valeurs correspondant à votre configuration :
- project_id: identifiant de votre projet Public Cloud ;
- client_id: identifiant de votre compte de service ;
- client_secret: secret de votre compte de service ;
- region_name: région concernée par votre script.
Vous pouvez désormais utiliser votre code Python pour accéder aux services autorisés par la politique d'accès associée à votre compte de service. Si l'on reprend l'exemple précédent, vous pourrez accèder à la liste des serveurs de la façon suivante :
Vous n'aurez cependant pas accès aux containers des services Object Storage :
Aller plus loin
Échangez avec notre communauté d'utilisateurs.