Remarque :
- 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 Oracle Cloud Infrastructure, la location et les compartiments. A la fin de votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
Implémenter la sécurité multicloud à l'aide d'OCI Audit pour capturer les événements à partir d'OCI Identity and Access Management
Introduction
Les domaines d'identité Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) génèrent des données d'audit en réponse aux opérations effectuées par les administrateurs et les utilisateurs finals. Des événements d'audit sont générés pour des opérations telles que la création ou la mise à jour de comptes utilisateur ou d'appartenances à des groupes, ainsi que pour des tentatives de connexion réussies ou infructueuses.
Pour accéder à ces données d'audit, vous pouvez générer des rapports directement dans la console Oracle Cloud Infrastructure (OCI) ou envoyer ces événements à une solution de surveillance de la sécurité externe, qui peut fonctionner sur une plate-forme cloud externe. Il est courant pour les entreprises de tirer parti des solutions tierces de gestion des incidents et des événements de sécurité (SIEM). En général, il est nécessaire d'inclure les données d'audit OCI IAM dans le SIEM pour l'analyse et la conformité des menaces. L'une des façons de répondre à cette exigence est d'exploiter les API AuditEvents du domaine d'identité OCI IAM, mais les domaines d'identité offrent une autre option qui peut être plus facile à implémenter pour certaines organisations et prend en charge le partage des événements d'audit dans les environnements multicloud.
OCI Audit est un service OCI qui enregistre automatiquement les appels à toutes les API OCI prises en charge en tant qu'événements. Vous pouvez choisir d'extraire les événements d'audit OCI IAM à partir du service OCI Audit plutôt que d'utiliser les API de domaine d'identité OCI IAM. OCI Audit offre les avantages suivants :
- Toutes les données d'audit, pour les clients ayant plusieurs domaines d'identité, sont disponibles au même endroit. Avec les API OCI IAM, vous devez interroger chaque domaine d'identité séparément, ce qui entraîne une surcharge supplémentaire.
- Les données peuvent être transmises à des systèmes externes tels que des SIEM, tandis que les API OCI IAM AuditEvents nécessitent une interrogation.
- OCI Audit stocke les données d'événement pendant un an ; OCI IAM stocke les événements d'audit pendant 90 jours.
Objectif
Synchronisez les événements d'audit générés dans un domaine d'identité OCI IAM avec un emplacement de stockage externe.
Prérequis
- Location OCI avec des domaines d'identité
- Compte cloud Azure avec Azure Log Analytics Workspace
Tâche 1 : comprendre comment exploiter OCI Audit pour capturer des événements d'audit à partir d'OCI IAM
Pour démontrer l'approche de l'utilisation d'OCI Audit pour capturer les événements d'audit à partir d'OCI IAM, nous utiliserons le scénario suivant :
Vous disposez d'une location avec deux domaines d'identité OCI IAM. Le domaine par défaut de la location, utilisé pour l'administration de la location, a le type de domaine Libre. Nous allons appeler ce domaine administrateur. Il existe un domaine d'identité supplémentaire de type Oracle Apps Premium auquel tous les employés sont provisionnés pour avoir accès à Oracle SaaS et aux applications on-premise. Nous appellerons le domaine de l'employé. Les comptes sont provisionnés dans le domaine des employés à partir de Microsoft Azure AD. Cela peut se produire de plusieurs manières (système de gestion des identités interdomaine [SCIM], provisionnement juste à temps ou import d'utilisateurs en masse). Vous disposez également d'une solution SIEM (par exemple, Microsoft Sentinel) qui ingère les données d'audit de nombreux systèmes de votre environnement, et vous devez publier presque en temps réel tous les événements d'audit des deux domaines d'identité dans le SIEM.
L'approche globale que nous allons adopter pour répondre aux exigences comprend l'utilisation du service OCI Audit, du service OCI Events, du service OCI Functions et de l'espace de travail Azure Log Analytics. Le flux de base est comme suit :
- Le domaine d'identité OCI IAM écrit un événement d'audit dans OCI Audit.
- Le service OCI Events dispose d'une règle qui surveille OCI Audit pour des types d'événement d'audit spécifiques à partir d'OCI IAM. Lorsque la règle est déclenchée, elle appelle une fonction dans Fonctions OCI.
- La fonction reçoit le journal d'audit brut dans ses données traitées et appelle l'API du collecteur de données Azure Log Analytics pour envoyer les données à l'espace de travail Azure Log Analytics.
- Azure Log Analytics Workspace sert de magasin de données pour Microsoft Sentinel.
Tâche 2 : capture des événements d'audit à partir d'OCI IAM à l'aide d'OCI Audit
-
Cet exemple suppose que vous avez configuré un espace de travail Azure Log Analytics sur le portail Azure. Une fois que vous l'avez configuré, copiez l'ID d'espace de travail et la clé primaire (ou secondaire) sous le nom d'espace de travail, les paramètres, les agents, les instructions d'agent Log Analytics. Vous aurez besoin de ces valeurs lors de l'écriture de votre fonction personnalisée avec OCI Functions.
-
Connectez-vous à la console OCI en tant qu'administrateur de location.
-
Ecrivez votre fonction personnalisée qui sera déployée avec OCI Functions. L'exemple de code suivant utilise Python, mais vous pouvez facilement implémenter la fonction dans le langage de votre choix. Ajoutons le code de fonction en trois étapes simples.
-
Créez un fichier Python nommé
func.py
et ajoutez les déclarations de paramètre et les instructions d'import requises suivantes. Les valeurs de paramètre doivent correspondre à l'environnement d'espace de travail Log Analytics. Vous pouvez trouver l'ID client (ID d'espace de travail dans le portail) et les valeurs de clé partagée dans le portail Azure sous l'espace de travail Log Analytics, le nom de votre espace de travail et la page de gestion des agents. Le paramètre de type de journal est un nom convivial utilisé pour définir un nouveau journal personnalisé (ou sélectionner un journal existant) dans votre espace de travail Azure Log Analytics et l'emplacement cible pour les téléchargements de données.Au lieu de coder en dur l'ID client de l'espace de travail Log Analytics et les valeurs de clé partagée, vous pouvez utiliser le service de clés secrètes OCI pour fournir un accès sécurisé aux valeurs de la fonction OCI. Pour une procédure détaillée d'utilisation des clés secrètes OCI dans votre code, reportez-vous aux articles suivants :
- Mode sécurisé de gestion des clés secrètes dans OCI
- Utilisation de principaux d'instance OCI et d'un coffre avec Python pour extraire une clé secrète
Dans le cadre de ce tutoriel, nous supposons que vous disposez des clés secrètes stockées dans un coffre et que vous configurez des stratégies IAM pour accorder l'accès au principal d'instance de fonction 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'
-
Ajoutez les lignes de code suivantes pour définir les tâches permettant d'effectuer des appels REST sécurisés vers l'adresse de téléchargement de données Azure. Vous devrez peut-être valider ce code pour vérifier la syntaxe par rapport à la dernière syntaxe de version ou d'adresse de Microsoft.
Remarque : des parties de ce code sont copiées à partir de la documentation Microsoft suivante.
{.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)
-
Ajoutez le bloc de code suivant à votre fichier de code
func.py
pour définir le point d'entrée d'exécution et les détails de structure. Vous n'avez pas besoin d'apporter de modifications sauf si vous souhaitez ajouter des fonctionnalités facultatives, telles que l'analyse avancée des données, le formatage ou la gestion personnalisée des exceptions.{.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" } )
-
-
Suivez ce guide pour déployer votre fonction à l'aide de CloudShell : Démarrage rapide des fonctions sur CloudShell.
-
Créez une règle dans le service OCI Events qui recherche les journaux d'audit correspondant à vos critères et appelle la fonction que vous avez créée et déployée aux étapes 3 et 4.
-
Accédez au service Events en recherchant "événements" dans la barre de recherche de la console ou dans la barre de recherche du menu Services à gauche. Cliquez sur Règles dans les résultats de la recherche.
-
Créez une règle avec des conditions qui recherchent des événements de création, de mise à jour ou de suppression par l'utilisateur dans les domaines administrateur et employé.
-
Les types d'événement de création, de mise à jour et de suppression d'utilisateurs seront disponibles sous le service Identity.
-
Ajoutez une condition d'attribut supplémentaire avec les GUID des deux domaines d'identité.
Remarque (facultatif). Par défaut, les événements d'audit de tous les domaines d'identité du compte cloud sont mis en correspondance. Mais si vous êtes uniquement intéressé par un sous-ensemble de domaines d'identité, vous pouvez spécifier explicitement les domaines inclus dans le périmètre.) Vous pouvez trouver le GUID du domaine d'identité sur la page de présentation du domaine d'identité.
-
Dans le panneau Actions, sélectionnez le type d'action Fonctions et sélectionnez la fonction que vous avez créée et déployée aux étapes 3 et 4 ci-dessus.
-
-
-
Maintenant, lorsque vous créez, mettez à jour ou supprimez un utilisateur dans l'un des domaines d'identité, la fonction OCI est appelée avec le journal d'audit brut comme charge utile. A son tour, la fonction OCI publie les données dans Azure Log Analytics Workspace. Les données apparaissent dans une table personnalisée nommée
OCILogging_CL
.
Liens connexes
Remerciements
- Auteurs : Ari Kermaier (membre du personnel technique, identité OCI) et Manoj Gaddam (chef de produit principal, identité OCI)
Ressources de formation supplémentaires
Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour consulter la documentation produit, consultez 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.