Nota:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la capa gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Implemente la seguridad multinube mediante OCI Audit para capturar eventos de OCI Identity and Access Management
Introducción
Los dominios de identidad de Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) generan datos de auditoría en respuesta a las operaciones realizadas por administradores y usuarios finales. Los eventos de auditoría se generan para operaciones como la creación o actualización de cuentas de usuario o afiliaciones a grupos, y para intentos de conexión correctos o incorrectos.
Para acceder a estos datos de auditoría, puede generar informes directamente en la consola de Oracle Cloud Infrastructure (OCI) o también puede enviar estos eventos a una solución de control de seguridad externa, que puede estar funcionando en una plataforma en la nube externa. Es habitual que las organizaciones aprovechen las soluciones de gestión de eventos e incidentes de seguridad (SIEM) de terceros, y un requisito típico es la ingestión de datos de auditoría de OCI IAM en SIEM para el análisis de amenazas y el cumplimiento. Una forma de cumplir ese requisito es aprovechar las API AuditEvents del dominio de identidad de OCI IAM, pero los dominios de identidad ofrecen otra opción que puede ser más fácil de implementar para algunas organizaciones y admite el uso compartido de eventos de auditoría en entornos multinube.
OCI Audit es un servicio de OCI que registra automáticamente las llamadas a todas las API de OCI soportadas como eventos. Hay algunos motivos comunes por los que puede elegir extraer eventos de auditoría de OCI IAM del servicio de auditoría de OCI en lugar de utilizar las API del dominio de identidad de OCI IAM. OCI Audit ofrece las siguientes ventajas:
- Todos los datos de auditoría, para clientes con varios dominios de identidad, están disponibles en un único lugar central. Con las API de OCI IAM, tendría que consultar cada dominio de identidad por separado, lo que crea una sobrecarga adicional.
- Los datos se pueden transferir a sistemas externos como SIEM, mientras que las API de OCI IAM AuditEvents requieren sondeo.
- OCI Audit almacena datos de eventos durante un año; OCI IAM almacena eventos de auditoría durante 90 días.
Objetivo
Sincronice los eventos de auditoría generados en un dominio de identidad de OCI IAM con un almacén externo.
Requisitos
- Arrendamiento de OCI con dominios de identidad
- Cuenta en la nube de Azure con Azure Log Analytics Workspace
Tarea 1: Descripción de cómo aprovechar la auditoría de OCI para capturar eventos de auditoría de OCI IAM
Para demostrar el enfoque de uso de la auditoría de OCI para capturar eventos de auditoría de OCI IAM, utilizaremos el siguiente escenario:
Tiene un arrendamiento con dos dominios de identidad de OCI IAM. El dominio por defecto del arrendamiento, que se utiliza para la administración del arrendamiento, tiene un tipo de dominio Libre. Llamaremos al dominio de administrador. Existe un dominio de identidad adicional con un tipo de dominio de Oracle Apps Premium, al que se aprovisionan todos los empleados para acceder a Oracle SaaS y aplicaciones locales. Llamaremos al dominio del empleado. Las cuentas se suministran en el dominio del empleado desde Microsoft Azure AD. Esto puede ocurrir de varias formas (Sistema para gestión de identidades entre dominios [SCIM], Aprovisionamiento justo a tiempo o importación masiva de usuarios). También dispone de una solución SIEM (por ejemplo, Microsoft Sentinel) que ingiere datos de auditoría de numerosos sistemas del entorno, y es necesario publicar todos los eventos de auditoría de ambos dominios de identidad en el SIEM prácticamente en tiempo real.
El enfoque general que tomaremos para abordar los requisitos incluye el uso del servicio de auditoría de OCI, el servicio de eventos de OCI, el servicio de funciones de OCI y el espacio de trabajo de Azure Log Analytics. El flujo básico es el siguiente:
- El dominio de identidad de OCI IAM escribe un evento de auditoría en la auditoría de OCI.
- El servicio Eventos de OCI tiene una regla que está observando la auditoría de OCI para tipos de eventos de auditoría específicos de OCI IAM. Cuando se dispara la regla, llama a una función en Funciones de OCI.
- La función recibe el log de auditoría raw en su carga útil y llama a la API del recopilador de datos de Azure Log Analytics para enviar los datos a Azure Log Analytics Workspace.
- El espacio de trabajo de Azure Log Analytics sirve como almacén de datos para Microsoft Sentinel.

Tarea 2: Captura de eventos de auditoría de OCI IAM mediante la auditoría de OCI
-
En este ejemplo, se asume que ha configurado un espacio de trabajo de Azure Log Analytics en el portal de Azure. Una vez que lo haya configurado, copie el ID de espacio de trabajo y la clave primaria (o secundaria) en su nombre de espacio de trabajo, Configuración, Agentes e Instrucciones de agente de Log Analytics. Necesitará estos valores mientras escribe su función personalizada con OCI Functions.

-
Inicie sesión en la consola de OCI como administrador del arrendamiento.
-
Escriba su función personalizada que se desplegará con OCI Functions. En el siguiente ejemplo de código se utiliza Python, pero puede implantar fácilmente la función en el lenguaje que elija. Vamos a agregar el código de función en tres sencillos pasos.
-
Cree un archivo Python denominado
func.pyy agregue las siguientes sentencias de importación y declaraciones de parámetros necesarias. Los valores de parámetros deben coincidir con el entorno del espacio de trabajo de Log Analytics. Puede encontrar el ID de cliente (ID de espacio de trabajo en el portal) y los valores de clave compartida en el portal de Azure en el espacio de trabajo de Log Analytics, su nombre de espacio de trabajo y la página de gestión de agentes. El parámetro de tipo de log es un nombre fácil de recordar utilizado para definir un nuevo log personalizado (o seleccionar uno existente) en el espacio de trabajo de Azure Log Analytics y la ubicación de destino para las cargas de datos.En lugar de codificar el ID de cliente del espacio de trabajo de Log Analytics y los valores de clave compartida, puede utilizar el servicio Secretos de OCI para proporcionar acceso seguro a los valores de la función de OCI. Para obtener un repaso detallado de los pasos para utilizar los secretos de OCI en el código, consulte los siguientes artículos:
- Forma segura de gestionar secretos en OCI
- Uso de los principales de instancias y el almacén de instancias de OCI con Python para recuperar un secreto
Para este tutorial, asumiremos que tiene los secretos almacenados en un almacén y configurará políticas de IAM para otorgar acceso al principal de instancia de función de OCI.
{.python .numberLines .lineAnchors} import oci import io import json import requests import datetime import hashlib import hmac import base64 import logging from fdk import response # Get instance principal context, and initialize secrets client signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner() secret_client = oci.secrets.SecretsClient(config={}, signer=signer) # Replace values below with the ocids of your secrets customer_id_ocid = "ocid1.vaultsecret.oc1.<customer_id_ocid>" shared_key_ocid = "ocid1.vaultsecret.oc1.<shared_key_ocid>" # Retrieve secret def read_secret_value(secret_client, secret_id): response = secret_client.get_secret_bundle(secret_id) base64_Secret_content = response.data.secret_bundle_content.content base64_secret_bytes = base64_Secret_content.encode('ascii') base64_message_bytes = base64.b64decode(base64_secret_bytes) secret_content = base64_message_bytes.decode('ascii') return secret_content # Retrieve the customer ID using the secret client. customer_id = read_secret_value(secret_client, customer_id_ocid) # For the shared key, use either the primary or the secondary Connected Sources client authentication key _shared_key = read_secret_value(secret_client, shared_key_ocid) # The log type is the name of the event that is being submitted log_type = 'OCILogging' -
Agregue las siguientes líneas de código para definir las tareas para realizar llamadas REST seguras al punto final de carga de datos de Azure. Puede que necesite validar este código para verificar la sintaxis con respecto a la última sintaxis de punto final o versión de Microsoft.
Nota: Las partes de este código se copian de la siguiente documentación de Microsoft.
{.python .numberLines .lineAnchors} # Build the API signature def build_signature(customer_id, shared_key, date, content_length, method, content_type, resource): x_headers = 'x-ms-date:' + date string_to_hash = method + "\n" + str(content_length) + "\n" + content_type + "\n" + x_headers + "\n" + resource bytes_to_hash = bytes(string_to_hash, encoding= "utf-8" ) decoded_key = base64.b64decode(shared_key) encoded_hash = base64.b64encode(hmac.new(decoded_key, bytes_to_hash, digestmod=hashlib.sha256).digest()).decode() authorization = "SharedKey {}:{}" .format(customer_id,encoded_hash) return authorization # Build and send a request to the POST API def post_data(customer_id, shared_key, body, log_type, logger): method = 'POST' content_type = 'application/json' resource = '/api/logs' rfc1123date = datetime.datetime.utcnow().strftime( '%a, %d %b %Y %H:%M:%S GMT' ) content_length = len(body) signature = build_signature(customer_id, shared_key, rfc1123date, content_length, method, content_type, resource) uri = 'https://' + customer_id + '.ods.opinsights.azure.com' + resource + '?api-version=2016-04-01' headers = { 'content-type' : content_type, 'Authorization' : signature, 'Log-Type' : log_type, 'x-ms-date' : rfc1123date } response = requests.post(uri,data=body, headers=headers) if (response.status_code >= 200 and response.status_code <= 299 ): logger.info( 'Upload accepted' ) else : logger.info( "Error during upload. Response code: {}" .format(response.status_code)) print(response.text) -
Agregue el siguiente bloque de código al archivo de código
func.pypara definir el punto de entrada de ejecución y los detalles del marco. No es necesario realizar cambios a menos que desee agregar funciones opcionales, como análisis avanzado de datos, formato o manejo personalizado de excepciones.{.python .numberLines .lineAnchors} """ Entrypoint and initialization """ def handler(ctx, data: io.BytesIO= None ): logger = logging.getLogger() try : _log_body = data.getvalue() post_data(_customer_id, _shared_key, _log_body, _log_type, logger) except Exception as err: logger.error( "Error in main process: {}" .format(str(err))) return response.Response( ctx, response_data=json.dumps({ "status" : "Success" }), headers={ "Content-Type" : "application/json" } )
-
-
Siga esta guía para desplegar la función con CloudShell: Inicio rápido de funciones en CloudShell.
-
Cree una regla en el servicio OCI Events que busque logs de auditoría que coincidan con sus criterios y llame a la función que ha creado y desplegado en los pasos 3 y 4.
-
Vaya al servicio de eventos buscando "eventos" en la barra de búsqueda de la consola o en la barra de búsqueda dentro del menú de servicios de la izquierda. Haga clic en Reglas en los resultados de búsqueda.


-
Cree una regla con condiciones que busquen eventos de creación, actualización o supresión de usuarios en los dominios de administrador y empleado.
-
Los tipos de eventos de creación, actualización y supresión de usuarios estarán disponibles en el servicio Identidad.
-
Agregue una condición de "atributo" adicional con los GUID de los dos dominios de identidad.
Nota: es opcional. Por defecto, los eventos de auditoría de todos los dominios de identidad de la cuenta en la nube coinciden. Sin embargo, si solo está interesado en un subjuego de dominios de identidad, puede especificar explícitamente los dominios dentro del ámbito). Puede encontrar el GUID del dominio de identidad en la página de visión general del dominio de identidad.
-
En el panel Acciones, seleccione el tipo de acción Funciones y seleccione la función que ha creado y desplegado en los pasos 3 y 4 anteriores.

-
-
-
Ahora, al crear, actualizar o suprimir un usuario en cualquiera de los dominios de identidad, se llama a la función de OCI con el log de auditoría raw como carga útil. La función OCI, a su vez, publica los datos en el espacio de trabajo de Azure Log Analytics. Verá los datos en una tabla personalizada denominada
OCILogging_CL.
Enlaces relacionados
Acuses de recibo
- Autores: Ari Kermaier (miembro consultor del personal técnico, OCI Identity) y Manoj Gaddam (mánager principal de productos, OCI Identity)
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 un explorador de Oracle Learning.
Para obtener documentación sobre los productos, visite Oracle Help Center.
Implement multicloud security using OCI Audit to capture events from OCI Identity and Access Management
F83130-01
June 2023
Copyright © 2023, Oracle and/or its affiliates.