Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a Oracle Cloud Infrastructure Free Tier.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos del entorno en la nube.
Uso de las API de REST de los dominios de identidad y gestión de acceso de OCI mediante la clave de firma de API
Introducción
Al realizar la integración con las API de dominios de identidad de Oracle Cloud Infrastructure Identity and Access Management (OCI IAM), OAuth 2.0 es el método más recomendado para proteger las solicitudes de API. Sin embargo, para ciertos casos de uso, especialmente cuando la simplicidad y la direccionalidad son primordiales, la clave de firma de API ofrece una alternativa viable.
En este tutorial se explorará cómo puede llamar a las API de dominio de identidad de OCI IAM mediante claves de firma de API, proporcionando una opción más sencilla y accesible para desarrolladores y administradores.
¿Por qué utilizar la clave de firma de API?
La clave de firma de API proporciona una forma sencilla de autenticar las solicitudes de API. Son fáciles de generar y utilizar, por lo que son ideales para aplicaciones que requieren un acceso sencillo y programático sin la complejidad del proceso de intercambio de tokens OAuth. Las claves de API son especialmente útiles en escenarios como:
-
Scripts automatizados y trabajos cron: simplicidad en la autenticación sin necesidad de gestionar tokens.
-
Aplicaciones internas: complejidad reducida para los servicios que se ejecutan en una red de confianza.
-
Prototipado y desarrollo: configuración rápida para pruebas y depuración.
Público Objetivo
Profesionales, desarrolladores y administradores de OCI IAM.
Objetivo
Aproveche la API de REST de dominios de identidad de OCI IAM mediante la clave de firma de API. Para demostrar esto de manera efectiva, se puede utilizar un fragmento de Python para desarrollar un script. En este script se muestra cómo interactuar con las API del dominio de identidad de OCI IAM mediante claves de firma de API para la autenticación. También abarca las operaciones básicas de creación de un grupo, creación de un usuario y asignación del usuario al grupo, lo que demuestra cómo realizar estas acciones mediante programación con solicitudes de API seguras. El uso de claves de API simplifica el proceso, lo que facilita la integración de estas operaciones en flujos de trabajo o scripts automatizados.
Requisitos
-
Cuenta de OCI: acceso a su cuenta de Oracle Cloud Infrastructure.
-
Clave de firma de API: par de claves público-privadas para firmar solicitudes en formato PEM. Consulte Cómo generar una clave de firma de API para obtener más información.
-
Conocimientos de OCI IAM y Python.
-
Es necesario conocer la API de REST de dominios de identidad de OCI IAM.
-
Usuario de OCI IAM con autorización para gestionar aplicaciones (administrador de dominio de identidad, administrador de seguridad o administrador de aplicaciones).
-
Python 3.x instalado.
-
Paquetes Python
requests
yjson
instalados.
Tarea 1: Importación de paquetes de Python y configuración inicial
La parte inicial del script configura las importaciones y configuraciones necesarias para interactuar con las API del dominio de identidad de OCI IAM mediante claves de API.
import requests
import json
from oci.config import from_file
from oci.signer import Signer
requests
: biblioteca HTTP simple en Python para realizar solicitudes HTTP.json
: biblioteca para analizar datos de JSON.from_file
: función para leer la configuración de OCI desde un archivo.Signer
: clase para firmar solicitudes HTTP con una clave de API.
Tarea 2: Definición e Inicialización de una Clase
El fragmento define una clase, APISignedRequest
, para gestionar interacciones con las API del dominio de identidad de OCI IAM mediante claves de 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'
- Clase
APISignedRequest
: esta clase encapsula métodos para realizar solicitudes de API a dominios de identidad de OCI IAM. - Método
init
: inicializa la clase configurando las variables globalesauth
,identity_domain
yconfig
.config:
Se carga desde el archivo de configuración de OCI por defecto.auth
: instancia de firmante utilizada para firmar solicitudes de API con la clave de API.identity_domain
: URL base de la instancia de dominio de identidad.
Tarea 3: Crear Método de Grupo
El método creategroup
de la clase APISignedRequest
está diseñado para crear un nuevo grupo en el dominio de identidad de 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étodo
creategroup
: envía una solicitud POST para crear un nuevo grupo en el dominio de identidad.extra
: punto final de API para crear grupos.body
: carga útil de JSON que contiene los detalles del grupo.requests.post
: envía la solicitud POST con el firmanteauth
ybody
.json.loads
: analiza la respuesta de JSON.grpid
: extrae y devuelve el ID de grupo de la respuesta.
Tarea 4: Crear método de usuario
El método createuser
de la clase APISignedRequest
está diseñado para crear un nuevo usuario en el dominio de identidad de 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étodo
createuser
: envía una solicitud POST para crear un nuevo usuario en el dominio de identidad de Oracle.extra
: punto final de API para crear usuarios.body
: carga útil de JSON que contiene los detalles del usuario.requests.post
: envía la solicitud POST con el firmanteauth
ybody
.json.loads
: analiza la respuesta de JSON.grpid
: extrae y devuelve el ID de usuario de la respuesta.
Tarea 5: Asignar usuario a método de grupo
El método assignuser
de la clase APISignedRequest
maneja el proceso de asignación de un usuario a un grupo en el dominio de identidad de 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étodo
assignuser
: organiza la creación de un grupo y un usuario y, a continuación, asigna el usuario al grupo.extra
: punto final de API para operaciones de grupo.creategroup
: crea un grupo y recupera su ID.createuser
: crea un usuario y recupera su ID.body
: carga útil de JSON para aplicar parches al grupo agregando el usuario a sus miembros.requests.patch
: envía la solicitud PATCH para actualizar el grupo con el nuevo usuario.
Tarea 6: Ejecución del flujo
Crear instancia y método de llamada: cree una instancia de APISignedRequest
y llame a assignuser
para ejecutar todo el flujo.
obj = APISignedRequest()
obj.assignuser()
Tarea 7: Uso del script en OCI Cloud Shell
Una vez que el script está listo, se puede ejecutar fácilmente en la máquina local (con Python instalado) o en cualquier entorno de desarrollo integrado (IDE) que admita el desarrollo de Python. Estamos utilizando OCI Cloud Shell para ejecutar el script y obtener el informe deseado.
- Conéctese a la consola de OCI, abra OCI Cloud Shell desde la esquina superior derecha y cargue el script de Python
OCIAPISignedRequest.py
.
Nota:
OCIAPISignedRequest.py
es el script de Python desarrollado mediante los fragmentos de código de las tareas anteriores.
- Ejecute el comando
python OCIAPISignedRequest.py
.
Conclusión
El uso de claves de API para llamar a las API del dominio de identidad de OCI IAM proporciona una alternativa sencilla a OAuth, ideal para ciertos casos de uso en los que la simplicidad y la facilidad de uso son cruciales. Después de este tutorial, puede integrarse de forma segura y eficiente con las API del dominio de identidad de OCI IAM, aprovechando la potencia de las claves de API para la autenticación.
Ya sea que esté automatizando tareas administrativas, creando herramientas internas o creando prototipos de aplicaciones, las claves de API ofrecen un método flexible y conveniente para interactuar con los servicios de OCI.
Enlaces relacionados
Agradecimientos
- Autor: Gautam Mishra (ingeniero sénior en la nube)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Leverage OCI Identity and Access Management Identity Domains REST APIs using API Signing Key
F99701-01
May 2024