Coletar registros do AWS IAM

Compatível com:

Este documento explica como transferir os registros do AWS IAM para o Google Security Operations. O analisador transforma registros brutos formatados em JSON em um modelo de dados unificado (UDM) estruturado. Ele extrai campos relevantes, como detalhes do usuário, informações de função, permissões e carimbos de data/hora, mapeando-os para os campos correspondentes do UDM para uma análise de segurança consistente.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem acesso privilegiado à AWS.

Configurar o AWS IAM e o S3

  1. Crie um bucket do Amazon S3 seguindo este guia do usuário: Criar um bucket.
  2. Salve o Nome e a Região do bucket para uso futuro.
  3. Crie um usuário seguindo este guia: Como criar um usuário do IAM.
  4. Selecione o Usuário criado.
  5. Selecione a guia Credenciais de segurança.
  6. Clique em Criar chave de acesso na seção Chaves de acesso.
  7. Selecione Serviço de terceiros como o caso de uso.
  8. Clique em Próxima.
  9. Opcional: adicione uma tag de descrição.
  10. Clique em Criar chave de acesso.
  11. Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para uso futuro.
  12. Clique em Concluído.
  13. Selecione a guia Permissões.
  14. Clique em Adicionar permissões na seção Políticas de permissões.
  15. Selecione Adicionar permissões.
  16. Selecione Anexar políticas diretamente.
  17. Pesquise e selecione a política AmazonS3FullAccess.
  18. Clique em Próxima.
  19. Clique em Adicionar permissões

Configurar o CloudTrail para capturar registros do IAM

  1. Faça login no Console de Gerenciamento da AWS.
  2. Na barra de pesquisa, digite e selecione CloudTrail na lista de serviços.
  3. Clique em Criar trilha.
  4. Informe o nome do percurso, por exemplo, IAMActivityTrail.
    • Aplicar o rastro a todas as regiões: selecione Sim para capturar atividades em todas as regiões.
    • Local de armazenamento: selecione o bucket do S3 criado anteriormente ou crie um novo.
    • Bucket do S3: insira um nome para o bucket do S3, por exemplo, iam-logs-bucket.
    • Selecione Criar um novo papel do IAM (se não tiver sido criado anteriormente).
    • Eventos de gerenciamento: selecione Ler e Escrever para capturar eventos de leitura e gravação em recursos do IAM.
    • Eventos de dados: ative os eventos de dados do S3 e do Lambda.
  5. Clique em Criar para criar a trilha.

Configurar o CloudTrail para exportar registros para o S3

  1. Acesse Serviços > S3.
  2. Selecione o bucket do S3 em que os registros do CloudTrail são armazenados, por exemplo, iam-logs-bucket.
  3. Verifique se o CloudTrail tem as permissões corretas para gravar registros no bucket.
  4. Adicione a seguinte política, se ela ainda não estiver presente:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "CloudTrailS3Access",
          "Effect": "Allow",
          "Principal": {
            "Service": "cloudtrail.amazonaws.com"
          },
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::your-bucket-name/AWSLogs/*"
        }
      ]
    }
    
  5. Ative o controle de versões no bucket do S3 para garantir que os registros sejam armazenados com várias versões.

  6. Acesse Propriedades > Controle de versão do bucket > Ativar.

Opcional: configure o Lambda para exportação em tempo real

  1. Acesse o console da AWS Lambda.
  2. Clique em Criar função.
  3. Selecione Criar do zero.
  4. Defina o nome da função como ExportIAMLogsToS3.
  5. Selecione um ambiente de execução do Python 3.x.
  6. Atribua um papel do IAM à função que tem permissões para:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "logs:GetLogEvents",
            "logs:FilterLogEvents",
            "logs:DescribeLogGroups",
            "logs:DescribeLogStreams"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutObject"
          ],
          "Resource": "arn:aws:s3:::your-bucket-name/*"
        }
      ]
    }
    
  7. Use o código Python abaixo para buscar registros do IAM e fazer o upload deles para o S3:

    import boto3
    import gzip
    from io import BytesIO
    
    s3 = boto3.client('s3')
    logs = boto3.client('logs')
    
    def lambda_handler(event, context):
        log_group = event['logGroup']
        log_stream = event['logStream']
    
        log_events = logs.get_log_events(
            logGroupName=log_group,
            logStreamName=log_stream,
            startFromHead=True
        )
    
        log_data = "\n".join([event['message'] for event in log_events['events']])
    
        # Compress and upload to S3
        compressed_data = gzip.compress(log_data.encode('utf-8'))
        s3.put_object(
            Bucket='your-s3-bucket-name',
            Key='iam-logs/{log_stream}.gz',
            Body=compressed_data
        )
    
  • Substitua your-s3-bucket-name pelo nome real do bucket.

Configurar o acionador do Lambda para os registros do CloudWatch

  1. No console do Lambda, acesse o Designer.
  2. Selecione Adicionar acionador > CloudWatch Logs.
  3. Selecione o grupo de registros do CloudWatch Logs associado aos seus registros do IAM, por exemplo, /aws/cloudtrail/.
  4. Clique em Adicionar.

Configurar um feed no Google SecOps para ingerir registros do AWS IAM

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed, por exemplo, AWS IAM Logs.
  4. Selecione Amazon S3 como o Tipo de origem.
  5. Selecione AWS IAM como o Tipo de registro.
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:

    • Região: a região em que o bucket do Amazon S3 está localizado.
    • URI do S3: o URI do bucket.
      • s3://your-log-bucket-name/
        • Substitua your-log-bucket-name pelo nome real do bucket.
    • O URI é: selecione Diretório ou Diretório que inclui subdiretórios.
    • Opções de exclusão de origem: selecione a opção de exclusão de acordo com sua preferência.

    • ID da chave de acesso: a chave de acesso do usuário com acesso ao bucket do S3.

    • Chave de acesso secreta: a chave secreta do usuário com acesso ao bucket do S3.

    • Namespace do recurso: o namespace do recurso.

    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos desse feed.

  8. Clique em Próxima.

  9. Revise a configuração do novo feed na tela Finalizar e clique em Enviar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
Arn entity.entity.resource.name Mapeado diretamente do campo Arn para os tipos de entidade USUÁRIO e RECURSO. Para o tipo de entidade GROUP, ele é mapeado de Group.Arn.
AssumeRolePolicyDocument entity.entity.resource.attribute.permissions.name Mapeado diretamente do campo AssumeRolePolicyDocument, mas apenas para o tipo de entidade RESOURCE.
CreateDate entity.entity.user.attribute.creation_time Mapeado diretamente do campo CreateDate e convertido para o formato de carimbo de data/hora do Chronicle para o tipo de entidade USER.
CreateDate entity.entity.resource.attribute.creation_time Mapeado diretamente do campo CreateDate e convertido para o formato de carimbo de data/hora do Chronicle para o tipo de entidade RESOURCE.
Group.Arn entity.entity.resource.name Mapeado diretamente do campo Group.Arn para o tipo de entidade GRUPO.
Group.CreateDate entity.entity.group.attribute.creation_time Mapeado diretamente do campo Group.CreateDate e convertido para o formato de carimbo de data/hora do Chronicle.
Group.GroupID entity.entity.group.product_object_id Mapeado diretamente do campo Group.GroupID.
Group.GroupName entity.entity.group.group_display_name Mapeado diretamente do campo Group.GroupName.
Group.GroupName entity.entity.group.email_addresses Mapeado diretamente do campo Group.GroupName.
Group.Path entity.entity.group.attribute.labels.value Mapeado diretamente do campo Group.Path, a chave é fixada em path
IsTruncated entity.entity.group.attribute.labels.value Mapeado diretamente do campo IsTruncated e convertido em string, a chave é fixada em is_truncated
Marcador entity.entity.group.attribute.labels.value Mapeado diretamente do campo Marker, a chave é fixada em marker
PasswordLastUsed entity.entity.user.last_login_time Mapeado diretamente do campo PasswordLastUsed e convertido para o formato de carimbo de data/hora do Chronicle.
Caminho entity.entity.user.attribute.labels.value Mapeado diretamente do campo Path para o tipo de entidade USER, a chave é codificada como path.
Caminho entity.entity.resource.attribute.labels.value Mapeada diretamente do campo Path para o tipo de entidade RESOURCE, a chave é codificada como path.
PermissionsBoundary.PermissionsBoundaryArn entity.entity.resource.attribute.labels.value Mapeada diretamente do campo PermissionsBoundary.PermissionsBoundaryArn, a chave é fixada em permissions_boundary_arn.
PermissionsBoundary.PermissionsBoundaryType entity.entity.resource.attribute.labels.value Mapeada diretamente do campo PermissionsBoundary.PermissionsBoundaryType, a chave é fixada em permissions_boundary_type.
RoleID entity.entity.resource.product_object_id Mapeado diretamente do campo RoleID.
RoleLastUsed.LastUsedDate entity.entity.resource.attribute.labels.value Mapeada diretamente do campo RoleLastUsed.LastUsedDate, a chave é fixada em role_last_used_date.
RoleLastUsed.Region entity.entity.location.name Mapeado diretamente do campo RoleLastUsed.Region.
RoleName entity.entity.resource.attribute.roles.name Mapeado diretamente do campo RoleName.
Tags.Key entity.entity.user.attribute.labels.key Usado como chave do campo labels no atributo do usuário.
Tags.Value entity.entity.user.attribute.labels.value Usado como o valor do campo labels no atributo do usuário.
UserID entity.entity.user.product_object_id Mapeado diretamente do campo UserID.
Nome de usuário entity.entity.user.userid Mapeado diretamente do campo UserName.
Users.Arn relations.entity.resource.name Mapeado diretamente do campo Users.Arn na relação do usuário.
Users.CreateDate relations.entity.user.attribute.creation_time Mapeado diretamente do campo Users.CreateDate na relação do usuário e convertido para o formato de carimbo de data/hora do Chronicle.
Users.PasswordLastUsed relations.entity.user.last_login_time Mapeado diretamente do campo Users.PasswordLastUsed na relação do usuário e convertido para o formato de carimbo de data/hora do Chronicle.
Users.Path relations.entity.user.attribute.labels.value Mapeado diretamente do campo Users.Path na relação do usuário, a chave é codificada como path.
Users.PermissionsBoundary.PermissionsBoundaryArn relations.entity.resource.attribute.labels.value Mapeado diretamente do campo Users.PermissionsBoundary.PermissionsBoundaryArn na relação do usuário, a chave é codificada como permissions_boundary_arn.
Users.PermissionsBoundary.PermissionsBoundaryType relations.entity.resource.attribute.labels.value Mapeado diretamente do campo Users.PermissionsBoundary.PermissionsBoundaryType na relação do usuário, a chave é codificada como permissions_boundary_type.
Users.UserID relations.entity.user.product_object_id Mapeado diretamente do campo Users.UserID na relação do usuário.
Users.UserName relations.entity.user.userid Mapeado diretamente do campo Users.UserName na relação do usuário.
N/A entity.metadata.collected_timestamp Preenchido com o carimbo de data/hora do evento do registro bruto.
N/A entity.metadata.vendor_name Fixado em AWS.
N/A entity.metadata.product_name Fixado em AWS IAM.
N/A entity.metadata.entity_type Determinado com base na presença de campos específicos: USER se UserID existir, RESOURCE se RoleName existir e GROUP se Group.GroupName existir.
N/A entity.entity.resource.resource_subtype Defina como User para os tipos de entidade USER e GROUP.
N/A entity.entity.resource.resource_type Defina como ACCESS_POLICY para o tipo de entidade RESOURCE.
N/A entity.entity.resource.attribute.cloud.environment Fixado em AMAZON_WEB_SERVICES.
N/A relations.entity_type Fixado em USER para relações de usuários em um grupo.
N/A relations.relationship Fixado em MEMBER para relações de usuários em um grupo.
N/A relations.direction Fixado em UNIDIRECTIONAL para relações de usuários em um grupo.
N/A relations.entity.resource.resource_subtype Fixado em User para relações de usuários em um grupo.

Alterações

2023-12-14

  • Parser recém-criado.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.