Coletar registros do IAM da AWS

Compatível com:

Este documento explica como ingerir registros do AWS IAM no 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 da 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: Como criar um bucket.
  2. Salve o Nome e a Região do bucket para uso posterior.
  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 posterior.
  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 rastreamento.
  4. Forneça um Nome do rastreamento, por exemplo, IAMActivityTrail.
    • Aplicar rastreamento 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 papel do IAM (se ainda não tiver sido criado).
    • Eventos de gerenciamento: selecione Leitura e Gravação 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ões do bucket > Ativar.

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

  1. Acesse o console do Lambda da AWS.
  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 à função um papel do IAM com 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 seguinte código Python para buscar registros do IAM e fazer 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 um gatilho do Lambda para os registros do CloudWatch

  1. No Console do Lambda, acesse Designer.
  2. Escolha Adicionar gatilho > 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 feeds

Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:

  • Configurações do SIEM > Feeds > Adicionar novo
  • Central de conteúdo > Pacotes de conteúdo > Começar

Como configurar o feed do AWS IAM

  1. Clique no pacote Amazon Cloud Platform.
  2. Localize o tipo de registro IAM da AWS.
  3. Especifique os valores nos campos a seguir.

    • Tipo de origem: API de terceiros
    • Nome de usuário: nome de usuário para autenticação
    • Secret: secret para autenticar com

    Opções avançadas

    • Nome do feed: um valor pré-preenchido que identifica o feed.
    • Namespace do recurso: namespace associado ao feed.
    • Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
  4. Clique em Criar feed.

Para mais informações sobre como configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.

Tabela de mapeamento da UDM

Campo de registro Mapeamento do UDM Lógica
Arn entity.entity.resource.name Mapeado diretamente do campo Arn para tipos de entidades USER e RESOURCE. 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 GROUP.
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 Mapeada diretamente do campo Group.Path, a chave é codificada como path.
IsTruncated entity.entity.group.attribute.labels.value Mapeada diretamente do campo IsTruncated e convertida em string, a chave é fixada no código como is_truncated.
Marcador entity.entity.group.attribute.labels.value Mapeada diretamente do campo Marker, a chave é codificada como 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 Mapeada 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 é codificada como permissions_boundary_arn.
PermissionsBoundary.PermissionsBoundaryType entity.entity.resource.attribute.labels.value Mapeada diretamente do campo PermissionsBoundary.PermissionsBoundaryType, a chave é codificada como 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 é codificada como 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 a 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 Mapeada 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 Mapeada 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 Mapeada 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 log bruto.
N/A entity.metadata.vendor_name Fixado no código como AWS.
N/A entity.metadata.product_name Fixado no código como 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 Definido como ACCESS_POLICY para o tipo de entidade RESOURCE.
N/A entity.entity.resource.attribute.cloud.environment Fixado no código como AMAZON_WEB_SERVICES.
N/A relations.entity_type Codificado como USER para relações de usuários em um grupo.
N/A relations.relationship Codificado como MEMBER para relações de usuários em um grupo.
N/A relations.direction Codificado como UNIDIRECTIONAL para relações de usuários em um grupo.
N/A relations.entity.resource.resource_subtype Codificado como User para relações de usuários em um grupo.

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