Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par des valeurs propres à votre environnement cloud.
Utiliser les API REST des domaines d'identité OCI Identity and Access Management à l'aide de la clé de signature d'API
Introduction
Lors de l'intégration aux API de domaines d'identité Oracle Cloud Infrastructure Identity and Access Management (OCI IAM), OAuth 2.0 est la méthode la plus couramment recommandée pour sécuriser les demandes d'API. Cependant, pour certains cas d'utilisation, en particulier lorsque la simplicité et la directs sont primordiales, la clé de signature d'API offre une alternative viable.
Ce tutoriel explique comment appeler des API de domaine d'identité OCI IAM à l'aide de clés de signature d'API, offrant ainsi une option plus simple et accessible aux développeurs et aux administrateurs.
Pourquoi utiliser la clé de signature d'API ?
La clé de signature d'API permet d'authentifier facilement les demandes d'API. Elles sont faciles à générer et à utiliser, ce qui les rend idéales pour les applications qui nécessitent un accès simple et programmatique sans la complexité du processus d'échange de jetons OAuth. Les clés d'API sont particulièrement utiles dans les scénarios suivants :
-
Scripts automatisés et travaux cron : simplicité de l'authentification sans avoir à gérer les jetons.
-
Applications internes : complexité réduite pour les services exécutés au sein d'un réseau sécurisé.
-
Prototypage et développement : configuration rapide pour le test et le débogage.
Public visé
Professionnels, développeurs et administrateurs d'OCI IAM.
Objectif
Tirez parti de l'API REST des domaines d'identité OCI IAM à l'aide de la clé de signature d'API. Pour le démontrer efficacement, le fragment de code Python peut être utilisé pour développer un script. Ce script explique comment interagir avec les API de domaine d'identité OCI IAM à l'aide de clés de signature d'API pour l'authentification. Il couvre également les opérations de base de création d'un groupe, de création d'un utilisateur et d'affectation de l'utilisateur au groupe, ce qui montre comment effectuer ces actions par programmation avec des demandes d'API sécurisées. L'utilisation de clés d'API simplifie le processus, ce qui facilite l'intégration de ces opérations dans des workflows ou des scripts automatisés.
Prérequis
-
Compte OCI : accédez à votre compte Oracle Cloud Infrastructure.
-
Clé de signature d'API : paire de clés publique-privée pour la signature des demandes au format PEM. Pour plus d'informations, reportez-vous à How to Generate an API Signing Key.
-
Connaissance d'OCI IAM et de Python.
-
Vous devez connaître l'API REST des domaines d'identité OCI IAM.
-
Utilisateur OCI IAM autorisé à gérer les applications (administrateur de domaine d'identité, administrateur de sécurité ou administrateur d'application).
-
Python 3.x est installé.
-
Packages Python
requests
etjson
installés.
Tâche 1 : import de packages Python et configuration initiale
La partie initiale du script configure les imports et configurations nécessaires pour interagir avec les API de domaine d'identité OCI IAM à l'aide de clés d'API.
import requests
import json
from oci.config import from_file
from oci.signer import Signer
requests
: bibliothèque HTTP simple en Python pour effectuer des demandes HTTP.json
: bibliothèque permettant d'analyser les données JSON.from_file
: fonction permettant de lire la configuration OCI à partir d'un fichier.Signer
: classe de signature des demandes HTTP avec une clé d'API.
Tâche 2 : définir et initialiser une classe
Le fragment de code définit une classe, APISignedRequest
, pour gérer les interactions avec les API de domaine d'identité OCI IAM à l'aide de clés d'API.
class APISignedRequest():
def __init__(self):
global auth
global identity_domain
global config
config = from_file()
auth = Signer(
tenancy=config['tenancy'],
user=config['user'],
fingerprint=config['fingerprint'],
private_key_file_location=config['key_file']
)
identity_domain = 'https://idcs-############################.identity.oraclecloud.com'
- Classe
APISignedRequest
: cette classe encapsule les méthodes permettant d'effectuer des demandes d'API vers les domaines d'identité OCI IAM. - Méthode
init
: initialise la classe en configurant les variables globalesauth
,identity_domain
etconfig
.config:
chargé à partir du fichier de configuration OCI par défaut.auth
: instance de signataire utilisée pour signer des demandes d'API avec la clé d'API.identity_domain
: URL de base de l'instance de domaine d'identité.
Tâche 3 : créer une méthode de groupe
La méthode creategroup
de la classe APISignedRequest
est conçue pour créer un groupe dans le domaine d'identité OCI IAM.
def creategroup(self):
extra = "/admin/v1/Groups"
body = {
"displayName": "Example Group",
"externalId": "123456",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group": {
"creationMechanism": "api",
"description": "Example Description"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group",
"urn:ietf:params:scim:schemas:extension:custom:2.0:Group"
]
}
response = requests.post(identity_domain + extra, auth=auth, json=body)
jsonresp = json.loads(response.content)
grpid = jsonresp.get("id")
print("Group has been created")
return grpid
- Méthode
creategroup
: envoie une demande POST pour créer un groupe dans le domaine d'identité.extra
: adresse d'API permettant de créer des groupes.body
: charge utile JSON contenant les détails du groupe.requests.post
: envoie la demande POST avec le signataireauth
etbody
.json.loads
: analyse la réponse JSON.grpid
: extrait et renvoie l'ID de groupe de la réponse.
Tâche 4 : Créer une méthode utilisateur
La méthode createuser
de la classe APISignedRequest
est conçue pour créer un utilisateur dans le domaine d'identité OCI IAM.
def createuser(self):
extra = "/admin/v1/Users"
body = {
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"name": {
"givenName": "Test",
"familyName": "User"
},
"userName": "testuser@example.com",
"emails": [
{
"value": "testuser@example.com",
"type": "work",
"primary": True
},
{
"value": "testuser@example.com",
"primary": False,
"type": "recovery"
}
]
}
response = requests.post(identity_domain + extra, auth=auth, json=body)
jsonresp = json.loads(response.content)
userid = jsonresp.get("id")
print("User has been created")
return userid
- Méthode
createuser
: envoie une demande POST pour créer un utilisateur dans le domaine d'identité Oracle.extra
: adresse d'API permettant de créer des utilisateurs.body
: charge utile JSON contenant les détails utilisateur.requests.post
: envoie la demande POST avec le signataireauth
etbody
.json.loads
: analyse la réponse JSON.grpid
: extrait et renvoie l'ID utilisateur de la réponse.
Tâche 5 : Affecter un utilisateur à une méthode de groupe
La méthode assignuser
de la classe APISignedRequest
gère le processus d'affectation d'un utilisateur à un groupe dans le domaine d'identité OCI IAM.
def assignuser(self):
extra = "/admin/v1/Groups/"
obj = APISignedRequest()
grpid = obj.creategroup()
gid = str(grpid)
userid = obj.createuser()
body = {
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"Operations": [
{
"op": "add",
"path": "members",
"value": [
{
"value": userid,
"type": "User"
}
]
}
]
}
response = requests.patch(identity_domain + extra + gid, auth=auth, json=body)
print("User has been assigned to the group")
- Méthode
assignuser
: orchestre la création d'un groupe et d'un utilisateur, puis affecte l'utilisateur au groupe.extra
: adresse d'API pour les opérations de groupe.creategroup
: crée un groupe et extrait son ID.createuser
: crée un utilisateur et extrait son ID.body
: charge utile JSON permettant d'appliquer des patches au groupe en ajoutant l'utilisateur à ses membres.requests.patch
: envoie la demande PATCH pour mettre à jour le groupe avec le nouvel utilisateur.
Tâche 6 : exécuter le flux
Créer une instance et une méthode d'appel : créez une instance de APISignedRequest
et appelez assignuser
pour exécuter l'intégralité du flux.
obj = APISignedRequest()
obj.assignuser()
Tâche 7 : utiliser le script dans OCI Cloud Shell
Une fois le script prêt, il peut être facilement exécuté sur la machine locale (avec Python installé) ou sur n'importe quel environnement de développement intégré (IDE) qui prend en charge le développement Python. Nous utilisons OCI Cloud Shell pour exécuter le script et obtenir le rapport souhaité.
- Connectez-vous à la console OCI, ouvrez OCI Cloud Shell dans l'angle supérieur droit et téléchargez le script Python
OCIAPISignedRequest.py
.
Remarque :
OCIAPISignedRequest.py
est le script Python développé à l'aide des fragments de code de tâche ci-dessus.
- Exécutez la commande
python OCIAPISignedRequest.py
.
Conclusion
L'utilisation de clés d'API pour appeler les API de domaine d'identité OCI IAM offre une alternative simple à OAuth, idéale pour certains cas d'utilisation où la simplicité et la facilité d'utilisation sont essentielles. Après ce tutoriel, vous pouvez intégrer les API de domaine d'identité OCI IAM de manière sécurisée et efficace, en tirant parti de la puissance des clés d'API pour l'authentification.
Que vous automatisiez des tâches d'administration, construisiez des outils internes ou prototypiez des applications, les clés d'API offrent une méthode flexible et pratique pour interagir avec les services OCI.
Liens connexes
Remerciements
- Auteur - Gautam Mishra (ingénieur cloud senior)
Ressources de formation supplémentaires
Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Leverage OCI Identity and Access Management Identity Domains REST APIs using API Signing Key
F99702-01
May 2024