Coletar registros do IAM da AWS
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 do UDM para uma análise de segurança consistente.
Antes de começar
Verifique se você atende os seguintes pré-requisitos:
- Uma instância do Google SecOps
- Acesso privilegiado ao console da AWS
- Permissões para criar usuários, papéis e políticas do IAM
Escolher o método de integração
O Google SecOps oferece suporte a dois métodos para ingerir dados do AWS IAM:
Método A: CloudTrail + Amazon S3 (registros de atividades)
- O que ele coleta: registros de atividade do IAM (quem realizou quais ações)
- Fonte de dados: eventos do AWS CloudTrail
- Latência: vários minutos (baseada em polling)
- Caso de uso: trilha de auditoria histórica, relatórios de compliance
- Tipo de origem do feed: Amazon S3 V2
Método B: API de terceiros (snapshot de configuração)
- O que ele coleta: dados de configuração do IAM (usuários, grupos, papéis, políticas)
- Fonte de dados: chamadas diretas da API do AWS IAM
- Latência: quase em tempo real (polling periódico)
- Caso de uso: monitoramento da configuração do IAM em tempo real, revisão de acesso
- Tipo de origem do feed: API de terceiros
Método A: integração do CloudTrail e do Amazon S3
Esse método usa o AWS CloudTrail para capturar a atividade do IAM e armazena registros no Amazon S3, que o Google SecOps ingere.
Criar um bucket do Amazon S3
- Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket.
- Salve o Nome e a Região do bucket para referência futura (por exemplo,
iam-activity-logs-bucket).
Configurar a política do bucket do S3 para o CloudTrail
O CloudTrail precisa de permissões para gravar registros no seu bucket do S3.
- No console do Amazon S3, selecione seu bucket.
- Acesse Permissões > Política do bucket.
Clique em Editar e adicione a seguinte política:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudTrailAclCheck", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::iam-activity-logs-bucket" }, { "Sid": "CloudTrailWrite", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::iam-activity-logs-bucket/AWSLogs/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }- Substitua
iam-activity-logs-bucketpelo nome real do bucket.
- Substitua
Clique em Salvar alterações.
Configurar o CloudTrail para capturar a atividade do IAM
- Faça login no Console de Gerenciamento da AWS.
- Na barra de pesquisa, digite e selecione CloudTrail na lista de serviços.
- Clique em Criar rastreamento.
- Informe os seguintes detalhes de configuração:
- Nome do teste: insira um nome descritivo (por exemplo,
IAMActivityTrail). - Aplicar rastreamento a todas as regiões: selecione Sim para capturar atividades em todas as regiões.
- Local de armazenamento: selecione Usar bucket do S3 atual e escolha o bucket criado anteriormente.
- Prefixo do arquivo de registro (opcional): insira um prefixo (por exemplo,
iam-logs/). - Criptografia SSE-KMS do arquivo de registros: opcional. Se ativada, crie ou selecione uma chave do KMS.
- Nome do teste: insira um nome descritivo (por exemplo,
- Clique em Próxima.
- Configurar a seleção de eventos:
- Eventos de gerenciamento: selecione Leitura e Gravação para capturar eventos de leitura e gravação em recursos do IAM.
- Eventos de dados: opcional. Ative os eventos de dados do S3 e do Lambda, se necessário.
- Eventos de insights: opcional. Ative para detecção de atividades incomuns.
- Clique em Próxima.
- Revise a configuração e clique em Criar rastreamento.
Opcional: ativar o controle de versão do bucket do S3 (recomendado)
- No console do Amazon S3, selecione seu bucket.
- Acesse Propriedades > Controle de versões do bucket.
- Clique em Editar.
- Selecione Ativar.
- Clique em Salvar alterações.
Criar um usuário do IAM para acesso ao S3 do Google SecOps
- Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como Caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Clique em Criar política em uma nova guia.
- No Editor de políticas, selecione a guia JSON.
Insira a seguinte política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::iam-activity-logs-bucket", "arn:aws:s3:::iam-activity-logs-bucket/*" ] } ] }- Substitua
iam-activity-logs-bucketpelo nome real do bucket.
- Substitua
Clique em Próxima.
Nomeie a política como
chronicle-s3-read-policy.Clique em Criar política.
Volte para a guia de criação de usuários e atualize a lista de políticas.
Pesquise e selecione
chronicle-s3-read-policy.Clique em Próxima.
Clique em Adicionar permissões
Opcional: criar a função do Lambda para exportação em tempo real
Se você precisar de uma exportação quase em tempo real dos registros do CloudTrail para o S3:
- No console da AWS, acesse Lambda > Functions > Create function.
- Clique em Criar do zero.
Informe os seguintes detalhes de configuração:
Configuração Valor Nome ExportIAMLogsToS3Ambiente de execução Python 3.13 Arquitetura x86_64 Função de execução Criar uma nova função com permissões básicas do Lambda Clique em Criar função.
Depois que a função for criada, abra a guia Código, exclua o stub e insira o seguinte código:
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='iam-activity-logs-bucket', Key=f'iam-logs/{log_stream}.gz', Body=compressed_data ) return { 'statusCode': 200, 'body': 'Logs exported successfully' }- Substitua
iam-activity-logs-bucketpelo nome do seu bucket.
- Substitua
Clique em Implantar para salvar o código da função.
Opcional: configurar permissões de função de execução do Lambda
- Na mesma função, selecione a guia Configuração.
- Selecione Permissões no menu à esquerda.
- Clique no nome da função de execução para abrir no console do IAM.
- Clique em Adicionar permissões > Anexar políticas.
- Clique em Criar política em uma nova guia.
Selecione a guia JSON e cole a seguinte política:
{ "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:::iam-activity-logs-bucket/*" } ] }- Substitua
iam-activity-logs-bucketpelo nome do seu bucket.
- Substitua
Clique em Próxima.
Nomeie a política como
lambda-iam-logs-export-policy.Clique em Criar política.
Volte para a guia "Função" e atualize.
Pesquise e selecione
lambda-iam-logs-export-policy.Clique em Adicionar permissões
Opcional: configurar o tempo limite do Lambda
- Na função do Lambda, permaneça na guia Configuração.
- Selecione Configuração geral no menu à esquerda.
- Clique em Editar.
- Mude Tempo limite para 5 minutos (300 segundos).
- Clique em Salvar.
Opcional: configurar o gatilho do Lambda para os registros do CloudWatch
- Na função do Lambda, selecione a seção Visão geral da função na parte de cima.
- Clique em Adicionar acionador.
- No menu suspenso Configuração do acionador, selecione Registros do CloudWatch.
- Informe os seguintes detalhes de configuração:
- Grupo de registros: selecione ou insira o grupo de registros do CloudWatch Logs associado ao CloudTrail (por exemplo,
/aws/cloudtrail/). - Nome do filtro: insira um nome descritivo, por exemplo,
IAM-events-filter. - Padrão de filtro: deixe em branco para capturar todos os eventos ou insira um padrão específico.
- Grupo de registros: selecione ou insira o grupo de registros do CloudWatch Logs associado ao CloudTrail (por exemplo,
- 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 feed
- Hub de conteúdo > Pacotes de conteúdo > Comece já
Como configurar o feed do AWS IAM
- Clique no pacote Amazon Cloud Platform.
- Localize o tipo de registro IAM da AWS.
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: chave secreta para autenticação.
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.
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.
Como usar as configurações do SIEM
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
AWS IAM CloudTrail Logs). - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione AWS IAM como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
URI do S3:
s3://iam-activity-logs-bucket/- Substitua
iam-activity-logs-bucketpelo nome real do bucket.
- Substitua
Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência:
- Nunca: nunca exclui arquivos após as transferências (recomendado para testes).
- Em caso de sucesso: exclui todos os arquivos e diretórios vazios após a transferência bem-sucedida (para otimização de custos).
Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3.
Chave de acesso secreta: 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 deste feed.
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Método B: integração de API de terceiros
Esse método usa chamadas diretas da API do IAM da AWS para coletar dados de configuração atuais do IAM (usuários, grupos, papéis, políticas).
Receber intervalos de IP do Google SecOps
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Observe os intervalos de IP mostrados na parte de cima da página.
- Também é possível recuperar intervalos de IP de maneira programática usando a API Feed Management.
Criar um usuário do IAM com as permissões necessárias
Opção A: usar a política gerenciada da AWS (recomendado)
- Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como Caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Pesquise IAMReadOnlyAccess (política gerenciada pela AWS).
- Selecione a política.
- Clique em Próxima.
- Clique em Adicionar permissões
Importante:a política IAMReadOnlyAccess inclui todas as permissões necessárias:
iam:GetUseriam:ListUsersiam:GetGroupiam:ListGroupsiam:GetPolicyiam:ListPoliciesiam:GetRoleiam:ListRolesiam:ListAttachedUserPoliciesiam:ListAttachedGroupPoliciesiam:ListAttachedRolePoliciesiam:GetAccountSummary
Opção B: criar uma política personalizada (privilégio mínimo)
Se a sua política de segurança exigir permissões mínimas em vez da política gerenciada:
- No console da AWS, acesse IAM > Políticas > Criar política > guia JSON.
Cole a seguinte política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetUser", "iam:ListUsers", "iam:GetGroup", "iam:ListGroups", "iam:GetPolicy", "iam:ListPolicies", "iam:GetRole", "iam:ListRoles", "iam:ListAttachedUserPolicies", "iam:ListAttachedGroupPolicies", "iam:ListAttachedRolePolicies", "iam:GetAccountSummary" ], "Resource": "*" } ] }Clique em Próxima.
Nomeie a política como
chronicle-iam-api-read-policy.Clique em Criar política.
Crie um usuário seguindo este guia: Como criar um usuário do IAM.
Selecione o usuário criado.
Selecione a guia Credenciais de segurança.
Clique em Criar chave de acesso na seção Chaves de acesso.
Selecione Serviço de terceiros como Caso de uso.
Clique em Próxima.
Opcional: adicione uma tag de descrição.
Clique em Criar chave de acesso.
Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para referência futura.
Clique em Concluído.
Selecione a guia Permissões.
Clique em Adicionar permissões na seção Políticas de permissões.
Selecione Adicionar permissões.
Selecione Anexar políticas diretamente.
Pesquise e selecione
chronicle-iam-api-read-policy.Clique em Próxima.
Clique em Adicionar permissões
Configurar um feed no Google SecOps para ingerir dados de configuração do IAM
Usar o Hub de conteúdo (recomendado)
- Acesse Hub de conteúdo > Pacotes de conteúdo > Comece já.
- Clique no pacote Amazon Cloud Platform.
- Localize o tipo de registro IAM da AWS.
- Selecione API de terceiros no menu suspenso Tipo de origem.
- Informe os seguintes detalhes de configuração:
- Nome de usuário: o ID da chave de acesso do usuário do IAM criado anteriormente.
- Secret: a chave de acesso secreta do usuário do IAM criada anteriormente.
- Nome do feed: um valor pré-preenchido que identifica o feed (por exemplo,
AWS IAM API Configuration). - Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
- 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.
Como usar as configurações do SIEM
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
AWS IAM API Configuration). - Selecione API de terceiros como o Tipo de fonte.
- Selecione AWS IAM como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
- Nome de usuário: o ID da chave de acesso do usuário do IAM criado anteriormente.
- Secret: a chave de acesso secreta do usuário do IAM criada anteriormente.
- Região: a região da AWS (por exemplo,
us-east-1).
- Namespace do recurso: o namespace do recurso.
- Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
Clique em Próxima.
Revise a nova configuração do 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. Aplicado a vários tipos de entidade. Para o tipo de entidade GROUP, 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. |
CreateDate |
entity.entity.resource.attribute.creation_time |
Mapeado diretamente do campo "CreateDate" e convertido para o formato de carimbo de data/hora do Chronicle. |
Group.Arn |
entity.entity.resource.name |
Mapeado diretamente do campo "Group.Arn". |
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 |
Mapeado diretamente do campo "IsTruncated" convertido em string, a chave é fixada no código como "is_truncated". |
Marker |
entity.entity.group.attribute.labels.value |
Mapeado 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. |
Path |
entity.entity.user.attribute.labels.value |
Mapeado diretamente do campo "Path" para o tipo de entidade "USER". A chave é codificada como "path". |
Path |
entity.entity.resource.attribute.labels.value |
Mapeado diretamente do campo "Path" para o tipo de entidade "RESOURCE", a chave é codificada como "path". |
PermissionsBoundary.PermissionsBoundaryArn |
entity.entity.resource.attribute.labels.value |
Mapeado diretamente do campo "PermissionsBoundary.PermissionsBoundaryArn". A chave é codificada como "permissions_boundary_arn". |
PermissionsBoundary.PermissionsBoundaryType |
entity.entity.resource.attribute.labels.value |
Mapeado 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 |
Mapeado 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 dos rótulos na entidade do usuário. |
Tags.Value |
entity.entity.user.attribute.labels.value |
Usado como o valor dos rótulos na entidade do usuário. |
UserID |
entity.entity.user.product_object_id |
Mapeado diretamente do campo "UserID". |
UserName |
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 de 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 caminho. |
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 de usuário. |
| N/A | entity.metadata.collected_timestamp |
Preenchido com o carimbo de data/hora da ingestão de eventos. |
| N/A | entity.metadata.vendor_name |
Fixado no código como AWS. |
| N/A | entity.metadata.product_name |
Codificado no IAM da AWS. |
| N/A | entity.metadata.entity_type |
Determinado com base na presença de campos específicos: USER se UserID existir, RESOURCE se RoleID existir, GROUP se Group.GroupName existir. |
| N/A | entity.entity.resource.resource_subtype |
Defina como "User" para USER e "Role" para RESOURCE. |
| 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ário. |
| N/A | relations.relationship |
Codificado como MEMBER para relações de grupo de usuários. |
| N/A | relations.direction |
Fixado no código como UNIDIRECTIONAL. |
| N/A | relations.entity.resource.resource_subtype |
Codificado como "User" para relações de usuário. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.