Observação:

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:

Objetivo

Sincronize eventos de auditoria gerados em um Domínio de Identidades do OCI IAM para um armazenamento externo.

Pré-requisitos

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:

  1. O domínio de identidades do OCI IAM grava um evento de auditoria no serviço OCI Audit.
  2. 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.
  3. 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.
  4. O Azure Log Analytics Workspace serve como armazenamento de dados para o Microsoft Sentinel.

Imagem da arquitetura de alto nível

Tarefa 2: Capturar eventos de auditoria do OCI IAM usando o OCI Audit

  1. 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.

    Imagem do Agente do Espaço de Trabalho do Azure Log Analytics

  2. Acesse a Console do OCI como administrador da tenancy.

  3. 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.py e 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:

      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.py para 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" }
      )
      
  4. Siga este guia para implantar sua função usando CloudShell: Início Rápido do Serviço Functions em CloudShell.

  5. 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.

      Procura Regras na Console 1 do OCI

      Procura Regras na Console do OCI 2

    • 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.

      1. Os tipos de evento de criação, atualização e exclusão de usuário estarão disponíveis no serviço Identity.

      2. 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.

      3. 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.

        Criar Regra na Console do OCI

  6. 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.

    Localizar dados de Log do OCI no Espaço de Trabalho do Log Analytics do Azure

Aquisições

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.