Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever e obter uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Implemente a segurança multicloud usando o OCI Audit para capturar eventos do OCI Identity and Access Management
Introdução
Os domínios de identidade do Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) geram dados de auditoria em resposta às operações executadas por administradores e usuários finais. Os eventos de auditoria são gerados para operações, como a criação ou atualização de contas de usuário ou associações de grupo, e para tentativas de log-in bem-sucedidas ou malsucedidas.
Para acessar esses dados de auditoria, você pode gerar relatórios diretamente na Console do Oracle Cloud Infrastructure (OCI) ou também pode enviar esses eventos para uma solução de monitoramento de segurança externa, que pode estar operando em uma plataforma de nuvem externa. É comum que as organizações utilizem soluções de SIEM (Security Incident and Event Management) de terceiros, e um requisito típico é ingerir dados de auditoria do OCI IAM no SIEM para análise de ameaças e conformidade. Uma forma de atender a esse requisito é aproveitar as APIs AuditEvents do domínio de identidades do OCI IAM, mas os domínios de identidade oferecem outra opção que pode ser mais fácil de implementar para algumas organizações e oferece suporte ao compartilhamento de eventos de auditoria entre ambientes multinuvem.
OCI Audit é um serviço do OCI que registra automaticamente chamadas para todas as APIs do OCI suportadas como eventos. Há alguns motivos comuns pelos quais você pode optar por extrair eventos de auditoria do OCI IAM do serviço OCI Audit, em vez de usar APIs do domínio de identidades do OCI IAM. O OCI Audit oferece os seguintes benefícios:
- Todos os dados de auditoria, para clientes com vários domínios de identidade, estão disponíveis em um local central. Com as APIs do OCI IAM, você precisaria consultar cada domínio de identidades separadamente, o que cria sobrecarga adicional.
- Os dados podem ser enviados para sistemas externos, como SIEMs, enquanto as APIs AuditEvents do OCI IAM exigem sondagem.
- O OCI Audit armazena dados de eventos por um ano; o OCI IAM armazena eventos de auditoria por 90 dias.
Objetivo
Sincronize eventos de auditoria gerados em um Domínio de Identidades do OCI IAM para um armazenamento externo.
Pré-requisitos
- Tenancy do OCI com Domínios de Identidades
- Conta do Azure na nuvem com o Espaço de Trabalho do Log Analytics do Azure
Tarefa 1: Compreender como aproveitar o OCI Audit para capturar eventos de auditoria do OCI IAM
Para demonstrar a abordagem do uso do OCI Audit para capturar eventos de auditoria do OCI IAM, usaremos o seguinte cenário:
Você tem uma tenancy com dois domínios de identidade do OCI IAM. O domínio Padrão da tenancy, que é usado para administração da tenancy, tem um tipo de domínio Livre. Chamaremos esse domínio de administrador. Há um domínio de identidades adicional com um tipo de domínio do Oracle Apps Premium, ao qual todos os funcionários são provisionados para acesso ao Oracle SaaS e a aplicativos locais. Chamaremos esse domínio de funcionários. As contas são provisionadas no domínio de funcionários do Microsoft Azure AD. Isso pode acontecer de várias maneiras (System for Cross-domain Identity Management [SCIM], provisionamento Just-in-Time ou importação de usuário em massa). Você também tem uma solução SIEM (por exemplo, Microsoft Sentinel) que ingere dados de auditoria de vários sistemas em seu ambiente, e há um requisito para publicar todos os eventos de auditoria de ambos os domínios de identidade no SIEM quase em tempo real.
A abordagem geral que tomaremos para atender aos requisitos inclui o uso do serviço OCI Audit, do serviço OCI Events, do serviço OCI Functions e do Azure Log Analytics Workspace. O fluxo básico é o seguinte:
- O domínio de identidades do OCI IAM grava um evento de auditoria no serviço OCI Audit.
- O serviço OCI Events tem uma regra que está observando o OCI Audit para tipos de evento de auditoria específicos do OCI IAM. Quando a regra é acionada, ela chama uma função nas Funções do OCI.
- A função recebe o log de auditoria bruto em seu payload e chama a API do Azure Log Analytics Data Collector para enviar os dados para o Azure Log Analytics Workspace.
- O Azure Log Analytics Workspace serve como armazenamento de dados para o Microsoft Sentinel.

Tarefa 2: Capturar eventos de auditoria do OCI IAM usando o OCI Audit
-
Este exemplo pressupõe que você tenha configurado um Espaço de Trabalho do Log Analytics do Azure no portal do Azure. Depois de configurá-lo, copie o ID do Espaço de Trabalho e a chave primária (ou secundária) em seu nome do espaço de trabalho, Configurações, Agentes, Instruções do Agente do Log Analytics. Você precisará desses valores enquanto estiver gravando sua função personalizada com o OCI Functions.

-
Acesse a Console do OCI como administrador da tenancy.
-
Escreva sua função personalizada que será implantada com o OCI Functions. O exemplo de código a seguir usa Python, mas você pode implementar facilmente a função na linguagem de sua escolha. Vamos adicionar o código de função em três etapas simples.
-
Crie um arquivo Python denominado
func.pye adicione as seguintes instruções de importação e declarações de parâmetro necessárias. Os valores de parâmetro devem corresponder ao seu ambiente de espaço de trabalho do Log Analytics. Você pode encontrar o ID do cliente (ID do espaço de trabalho no portal) e os valores de chave compartilhada no Portal do Azure no espaço de trabalho do Log Analytics, sua página de gerenciamento de espaço de trabalho e Agentes. O parâmetro de tipo de log é um nome amigável usado para definir um novo (ou selecionar um log personalizado existente) no espaço de trabalho do Azure Log Analytics e o local de destino para uploads de dados.Em vez de codificar o ID do cliente do espaço de trabalho do Log Analytics e os valores de chave compartilhada, você pode usar o serviço de Segredos do OCI para fornecer acesso seguro aos valores na Função do OCI. Para obter um passo a passo detalhado das etapas para usar os Segredos do OCI em seu código, consulte os seguintes artigos:
- Maneira segura de gerenciar segredos no OCI
- Usando os Diretores de Instância e o Vault do OCI com Python para recuperar um Segredo
Para a finalidade deste tutorial, vamos supor que você tenha os segredos armazenados em um vault e configure políticas do IAM para conceder acesso ao principal de instâncias de função do 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' -
Adicione as seguintes linhas de código para definir as tarefas para fazer chamadas REST seguras ao ponto final de upload de dados do Azure. Talvez você precise validar este código para verificar a sintaxe em relação ao ponto final ou à sintaxe de versão mais recente da Microsoft.
Observação: partes deste código são copiadas da seguinte documentação da 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) -
Adicione o bloco de código a seguir ao arquivo de código
func.pypara definir o ponto de entrada de execução e os detalhes da estrutura. Você não precisa fazer alterações, a menos que queira adicionar recursos opcionais, como análise avançada de dados, formatação ou tratamento personalizado de exceções.{.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 este guia para implantar sua função usando CloudShell: Início Rápido do Serviço Functions em CloudShell.
-
Crie uma regra no serviço OCI Events, que procura logs de auditoria correspondentes aos seus critérios e chama a função criada e implantada nas etapas 3 e 4.
-
Vá para o Events Service, pesquisando "eventos" na barra de pesquisa da console ou na barra de pesquisa dentro do menu de serviços à esquerda. Clique em Regras nos resultados da pesquisa.


-
Crie uma regra com condições que procure eventos de criação, atualização ou exclusão de usuário nos domínios administrador e funcionário.
-
Os tipos de evento de criação, atualização e exclusão de usuário estarão disponíveis no serviço Identity.
-
Adicione uma condição "atributo" adicional com os GUIDs dos dois domínios de identidade.
Observação: Isso é opcional. Por padrão, os eventos de auditoria para todos os domínios de identidade na conta do Cloud são correspondidos. Mas se você estiver interessado apenas em um subconjunto de domínios de identidade, poderá especificar explicitamente os domínios no escopo.) Você pode encontrar o GUID do domínio de identidades na página de visão geral do domínio de identidades.
-
No painel Ações, selecione o Tipo de Ação Funções e selecione a função que você criou e implantou nas etapas 3 e 4 acima.

-
-
-
Agora, quando você cria, atualiza ou exclui um usuário em um dos domínios de identidade, a Função do OCI é chamada com o log de auditoria bruto como o payload. A Função OCI, por sua vez, publica os dados no Azure Log Analytics Workspace. Você verá os dados em uma tabela personalizada chamada
OCILogging_CL.
Links Relacionados
Aquisições
- Autores: Ari Kermaier (Membro Consultor da Equipe Técnica, Identidade do OCI) e Manoj Gaddam (Gerente de Produtos Principal, Identidade do OCI)
Mais Recursos de Aprendizagem
Explore outros laboratórios no site docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o 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.