Recolha registos do AWS IAM
Este documento explica como carregar registos do AWS IAM para o Google Security Operations. O analisador transforma registos formatados JSON não processados num modelo de dados unificado (UDM) estruturado. Extrai campos relevantes, como detalhes do utilizador, informações de funções, autorizações e datas/horas, mapeando-os para os campos da UDM correspondentes para uma análise de segurança consistente.
Antes de começar
Certifique-se de que cumpre os seguintes pré-requisitos:
- Uma instância do Google SecOps
- Acesso privilegiado à consola da AWS
- Autorizações para criar utilizadores, funções e políticas do IAM
Escolha o método de integração
O Google SecOps suporta dois métodos para carregar dados do AWS IAM:
Método A: CloudTrail + Amazon S3 (registos de atividade)
- O que recolhe: registos de atividade do IAM (quem realizou que ações)
- Origem de dados: eventos do AWS CloudTrail
- Latência: vários minutos (baseada em sondagem)
- Exemplo de utilização: registo de auditoria histórico, relatórios de conformidade
- Tipo de origem do feed: Amazon S3 V2
Método B: API de terceiros (captura instantânea da configuração)
- O que recolhe: dados de configuração da IAM (utilizadores, grupos, funções, políticas)
- Origem de dados: chamadas diretas da API AWS IAM
- Latência: quase em tempo real (sondagem periódica)
- Exemplo de utilização: monitorização da configuração do IAM em tempo real, revisão do acesso
- Tipo de origem do feed: API de terceiros
Método A: integração do CloudTrail + Amazon S3
Este método usa o AWS CloudTrail para capturar a atividade do IAM e armazena registos no Amazon S3, que o Google SecOps ingere.
Crie um contentor do Amazon S3
- Crie um contentor do Amazon S3 seguindo este guia do utilizador: Criar um contentor.
- Guarde o nome e a região do contentor para referência futura (por exemplo,
iam-activity-logs-bucket).
Configure a política do contentor S3 para o CloudTrail
O CloudTrail precisa de autorizações para escrever registos no seu contentor do S3.
- Na consola do Amazon S3, selecione o seu contentor.
- Aceda a Autorizações > Política de contentores.
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 seu contentor.
- Substitua
Clique em Guardar alterações.
Configure o CloudTrail para capturar a atividade do IAM
- Inicie sessão na AWS Management Console.
- Na barra de pesquisa, escreva e selecione CloudTrail na lista de serviços.
- Clique em Criar trilho.
- Forneça os seguintes detalhes de configuração:
- Nome do caminho: introduza um nome descritivo (por exemplo,
IAMActivityTrail). - Aplicar trajeto a todas as regiões: selecione Sim para capturar atividades em todas as regiões.
- Localização de armazenamento: selecione Usar bucket do S3 existente e escolha o bucket criado anteriormente.
- Prefixo do ficheiro de registo (opcional): introduza um prefixo (por exemplo,
iam-logs/). - Encriptação SSE-KMS do ficheiro de registo: opcional. Se estiver ativada, crie ou selecione uma chave do KMS.
- Nome do caminho: introduza um nome descritivo (por exemplo,
- Clicar em Seguinte.
- Configure a seleção de eventos:
- Eventos de gestão: selecione Leitura e Escrita para capturar eventos de leitura e escrita em recursos do IAM.
- Eventos de dados: opcional. Ative os eventos de dados S3 e Lambda, se necessário.
- Eventos de estatísticas: opcional. Ative a deteção de atividade invulgar.
- Clicar em Seguinte.
- Reveja a configuração e clique em Criar trilho.
Opcional: ative o controlo de versões do contentor S3 (recomendado)
- Na consola do Amazon S3, selecione o seu contentor.
- Aceda a Propriedades > Controlo de versões do contentor.
- Clique em Edit.
- Selecione Ativar.
- Clique em Guardar alterações.
Crie um utilizador do IAM para acesso ao S3 do Google SecOps
- Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
- Selecione o utilizador criado.
- Selecione o separador Credenciais de segurança.
- Clique em Criar chave de acesso na secção Chaves de acesso.
- Selecione Serviço de terceiros como Exemplo de utilização.
- Clicar em Seguinte.
- Opcional: adicione uma etiqueta de descrição.
- Clique em Criar chave de acesso.
- Clique em Transferir ficheiro CSV para guardar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione o separador Autorizações.
- Clique em Adicionar autorizações na secção Políticas de autorizações.
- Selecione Adicionar autorizações.
- Selecione Anexar políticas diretamente.
- Clique em Criar política num novo separador.
- No editor de políticas, selecione o separador JSON.
Introduza 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 seu contentor.
- Substitua
Clicar em Seguinte.
Atribua um nome à política
chronicle-s3-read-policy.Clique em Criar política.
Regresse ao separador de criação de utilizadores e atualize a lista de políticas.
Pesquise e selecione
chronicle-s3-read-policy.Clicar em Seguinte.
Clique em Adicionar autorizações.
Opcional: crie a função Lambda para a exportação em tempo real
Se precisar de exportação quase em tempo real de registos do CloudTrail para o S3:
- Na consola da AWS, aceda a Lambda > Functions > Create function.
- Clique em Criar do zero.
Faculte os seguintes detalhes de configuração:
Definição Valor Nome ExportIAMLogsToS3Runtime Python 3.13 Arquitetura x86_64 Função de execução Crie uma nova função com autorizações básicas do Lambda Clique em Criar função.
Depois de criar a função, abra o separador Código, elimine o stub e introduza 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 contentor.
- Substitua
Clique em Implementar para guardar o código da função.
Opcional: configure as autorizações da função de execução do Lambda
- Na mesma função, selecione o separador Configuração.
- Selecione Autorizações no menu do lado esquerdo.
- Clique no nome da função de execução para a abrir na consola do IAM.
- Clique em Adicionar autorizações > Anexar políticas.
- Clique em Criar política num novo separador.
Selecione o separador 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 contentor.
- Substitua
Clicar em Seguinte.
Atribua um nome à política
lambda-iam-logs-export-policy.Clique em Criar política.
Regresse ao separador Função e atualize.
Pesquise e selecione
lambda-iam-logs-export-policy.Clique em Adicionar autorizações.
Opcional: configure o limite de tempo do Lambda
- Na função Lambda, mantenha-se no separador Configuração.
- Selecione Configuração geral no menu do lado esquerdo.
- Clique em Edit.
- Altere o Tempo limite para 5 minutos (300 segundos).
- Clique em Guardar.
Opcional: configure o acionador do Lambda para os registos do CloudWatch
- Na função Lambda, selecione a secção Vista geral da função na parte superior.
- Clique em Adicionar acionador.
- No menu pendente Configuração do acionador, selecione Registos do CloudWatch.
- Forneça os seguintes detalhes de configuração:
- Grupo de registos: selecione ou introduza o grupo de registos do CloudWatch Logs associado ao CloudTrail (por exemplo,
/aws/cloudtrail/). - Nome do filtro: introduza um nome descritivo (por exemplo,
IAM-events-filter). - Padrão de filtro: deixe em branco para captar todos os eventos ou introduza um padrão específico.
- Grupo de registos: selecione ou introduza o grupo de registos do CloudWatch Logs associado ao CloudTrail (por exemplo,
- Clique em Adicionar.
Configure feeds
Existem dois pontos de entrada diferentes para configurar feeds na plataforma Google SecOps:
- Definições do SIEM > Feeds > Adicionar novo feed
- Content Hub > Pacotes de conteúdo > Começar
Como configurar o feed do AWS IAM
- Clique no pacote Amazon Cloud Platform.
- Localize o tipo de registo IAM do AWS.
Especifique os valores nos seguintes campos.
- Tipo de origem: API de terceiros
- Nome de utilizador: nome de utilizador para autenticação
- Segredo: segredo para autenticação
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Espaço de nomes do recurso: espaço de nomes associado ao feed.
- Etiquetas de carregamento: etiquetas aplicadas a todos os eventos deste feed.
Clique em Criar feed.
Para mais informações sobre a configuração de vários feeds para diferentes tipos de registos nesta família de produtos, consulte o artigo Configure feeds por produto.
Usar definições de SIEM
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza 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 registo.
- Clicar em Seguinte.
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 seu contentor.
- Substitua
Opção de eliminação da origem: selecione a opção de eliminação de acordo com a sua preferência:
- Nunca: nunca elimina ficheiros após transferências (recomendado para testes).
- Em caso de êxito: elimina todos os ficheiros e diretórios vazios após a transferência bem-sucedida (para otimização de custos).
Idade máxima do ficheiro: inclua ficheiros modificados no último número de dias. A predefinição é 180 dias.
ID da chave de acesso: chave de acesso do utilizador com acesso ao contentor do S3.
Chave de acesso secreta: chave secreta do utilizador com acesso ao contentor do S3.
Espaço de nomes do recurso: o espaço de nomes do recurso.
Etiquetas de carregamento: a etiqueta a aplicar aos eventos deste feed.
Clicar em Seguinte.
Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Método B: integração de API de terceiros
Este método usa chamadas API AWS IAM diretas para recolher dados de configuração IAM atuais (utilizadores, grupos, funções, políticas).
Obtenha intervalos de IP do Google SecOps
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Tenha em atenção os intervalos de IP apresentados na parte superior da página.
- Em alternativa, obtenha intervalos de IP programaticamente através da API Feed Management.
Crie um utilizador do IAM com as autorizações necessárias
Opção A: use a política gerida da AWS (recomendado)
- Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
- Selecione o utilizador criado.
- Selecione o separador Credenciais de segurança.
- Clique em Criar chave de acesso na secção Chaves de acesso.
- Selecione Serviço de terceiros como Exemplo de utilização.
- Clicar em Seguinte.
- Opcional: adicione uma etiqueta de descrição.
- Clique em Criar chave de acesso.
- Clique em Transferir ficheiro CSV para guardar a chave de acesso e a chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione o separador Autorizações.
- Clique em Adicionar autorizações na secção Políticas de autorizações.
- Selecione Adicionar autorizações.
- Selecione Anexar políticas diretamente.
- Pesquise IAMReadOnlyAccess (política gerida pela AWS).
- Selecione a política.
- Clicar em Seguinte.
- Clique em Adicionar autorizações.
Importante: a política IAMReadOnlyAccess inclui todas as autorizações necessárias:
iam:GetUseriam:ListUsersiam:GetGroupiam:ListGroupsiam:GetPolicyiam:ListPoliciesiam:GetRoleiam:ListRolesiam:ListAttachedUserPoliciesiam:ListAttachedGroupPoliciesiam:ListAttachedRolePoliciesiam:GetAccountSummary
Opção B: crie uma política personalizada (menor privilégio)
Se a sua política de segurança exigir autorizações mínimas em vez da política gerida:
- Na consola da AWS, aceda a IAM > Políticas > Criar política > separador 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": "*" } ] }Clicar em Seguinte.
Atribua um nome à política
chronicle-iam-api-read-policy.Clique em Criar política.
Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
Selecione o utilizador criado.
Selecione o separador Credenciais de segurança.
Clique em Criar chave de acesso na secção Chaves de acesso.
Selecione Serviço de terceiros como Exemplo de utilização.
Clicar em Seguinte.
Opcional: adicione uma etiqueta de descrição.
Clique em Criar chave de acesso.
Clique em Transferir ficheiro CSV para guardar a chave de acesso e a chave de acesso secreta para referência futura.
Clique em Concluído.
Selecione o separador Autorizações.
Clique em Adicionar autorizações na secção Políticas de autorizações.
Selecione Adicionar autorizações.
Selecione Anexar políticas diretamente.
Pesquise e selecione
chronicle-iam-api-read-policy.Clicar em Seguinte.
Clique em Adicionar autorizações.
Configure um feed no Google SecOps para carregar dados de configuração do IAM
Usar o centro de conteúdo (recomendado)
- Aceda a Content Hub > Pacotes de conteúdo > Começar.
- Clique no pacote Amazon Cloud Platform.
- Localize o tipo de registo IAM do AWS.
- Selecione API de terceiros no menu pendente Tipo de origem.
- Forneça os seguintes detalhes de configuração:
- Nome de utilizador: o ID da chave de acesso do utilizador do IAM criado anteriormente.
- Segredo: a chave de acesso secreta do utilizador do IAM criado anteriormente.
- Nome do feed: um valor pré-preenchido que identifica o feed (por exemplo,
AWS IAM API Configuration). - Espaço de nomes do recurso: espaço de nomes associado ao feed.
- Etiquetas de carregamento: etiquetas aplicadas a todos os eventos deste feed.
- Clique em Criar feed.
Para mais informações sobre a configuração de vários feeds para diferentes tipos de registos nesta família de produtos, consulte o artigo Configure feeds por produto.
Usar definições de SIEM
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo,
AWS IAM API Configuration). - Selecione API de terceiros como o Tipo de origem.
- Selecione AWS IAM como o Tipo de registo.
- Clicar em Seguinte.
Especifique valores para os seguintes parâmetros de entrada:
- Nome de utilizador: o ID da chave de acesso do utilizador do IAM criado anteriormente.
- Segredo: a chave de acesso secreta do utilizador do IAM criado anteriormente.
- Região: a região da AWS (por exemplo,
us-east-1).
- Espaço de nomes do recurso: o espaço de nomes do recurso.
- Etiquetas de carregamento: a etiqueta a aplicar aos eventos deste feed.
Clicar em Seguinte.
Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Tabela de mapeamento da UDM
| Campo de registo | Mapeamento da UDM | Lógica |
|---|---|---|
Arn |
entity.entity.resource.name |
Mapeado diretamente a partir do campo ARN. Aplicado a vários tipos de entidades. Para o tipo de entidade GROUP, mapeado a partir de Group.Arn. |
AssumeRolePolicyDocument |
entity.entity.resource.attribute.permissions.name |
Mapeado diretamente a partir do campo AssumeRolePolicyDocument, mas apenas para o tipo de entidade RESOURCE. |
CreateDate |
entity.entity.user.attribute.creation_time |
Mapeado diretamente a partir do campo CreateDate e convertido para o formato de data/hora do Chronicle. |
CreateDate |
entity.entity.resource.attribute.creation_time |
Mapeado diretamente a partir do campo CreateDate e convertido para o formato de data/hora do Chronicle. |
Group.Arn |
entity.entity.resource.name |
Mapeado diretamente a partir do campo Group.Arn. |
Group.CreateDate |
entity.entity.group.attribute.creation_time |
Mapeado diretamente a partir do campo Group.CreateDate e convertido para o formato de data/hora do Chronicle. |
Group.GroupID |
entity.entity.group.product_object_id |
Mapeado diretamente a partir do campo Group.GroupID. |
Group.GroupName |
entity.entity.group.group_display_name |
Mapeado diretamente a partir do campo Group.GroupName. |
Group.GroupName |
entity.entity.group.email_addresses |
Mapeado diretamente a partir do campo Group.GroupName. |
Group.Path |
entity.entity.group.attribute.labels.value |
Mapeada diretamente a partir do campo Group.Path, a chave está codificada de forma rígida para o caminho. |
IsTruncated |
entity.entity.group.attribute.labels.value |
Mapeada diretamente a partir do campo IsTruncated convertido em string, a chave está codificada de forma rígida para is_truncated. |
Marker |
entity.entity.group.attribute.labels.value |
Mapeada diretamente a partir do campo Marker, a chave está codificada no marcador. |
PasswordLastUsed |
entity.entity.user.last_login_time |
Mapeado diretamente a partir do campo PasswordLastUsed e convertido para o formato de data/hora do Chronicle. |
Path |
entity.entity.user.attribute.labels.value |
Mapeado diretamente a partir do campo Path para o tipo de entidade USER. A chave está codificada de forma rígida para o caminho. |
Path |
entity.entity.resource.attribute.labels.value |
Mapeada diretamente a partir do campo Path para o tipo de entidade RESOURCE, a chave está codificada de forma rígida para o caminho. |
PermissionsBoundary.PermissionsBoundaryArn |
entity.entity.resource.attribute.labels.value |
Mapeado diretamente a partir do campo PermissionsBoundary.PermissionsBoundaryArn, a chave é codificada de forma rígida para permissions_boundary_arn. |
PermissionsBoundary.PermissionsBoundaryType |
entity.entity.resource.attribute.labels.value |
Mapeada diretamente a partir do campo PermissionsBoundary.PermissionsBoundaryType, a chave está codificada de forma rígida para permissions_boundary_type. |
RoleID |
entity.entity.resource.product_object_id |
Mapeado diretamente a partir do campo RoleID. |
RoleLastUsed.LastUsedDate |
entity.entity.resource.attribute.labels.value |
Mapeada diretamente do campo RoleLastUsed.LastUsedDate, a chave está codificada de forma rígida para role_last_used_date. |
RoleLastUsed.Region |
entity.entity.location.name |
Mapeado diretamente a partir do campo RoleLastUsed.Region. |
RoleName |
entity.entity.resource.attribute.roles.name |
Mapeado diretamente a partir do campo RoleName. |
Tags.Key |
entity.entity.user.attribute.labels.key |
Usado como chave para as etiquetas na entidade do utilizador. |
Tags.Value |
entity.entity.user.attribute.labels.value |
Usado como o valor das etiquetas na entidade do utilizador. |
UserID |
entity.entity.user.product_object_id |
Mapeado diretamente a partir do campo UserID. |
UserName |
entity.entity.user.userid |
Mapeado diretamente a partir do campo UserName. |
Users.Arn |
relations.entity.resource.name |
Mapeado diretamente a partir do campo Users.Arn na relação de utilizadores. |
Users.CreateDate |
relations.entity.user.attribute.creation_time |
Mapeado diretamente a partir do campo Users.CreateDate na relação de utilizadores e convertido para o formato de data/hora do Chronicle. |
Users.PasswordLastUsed |
relations.entity.user.last_login_time |
Mapeado diretamente a partir do campo Users.PasswordLastUsed na relação de utilizadores e convertido para o formato de data/hora do Chronicle. |
Users.Path |
relations.entity.user.attribute.labels.value |
Mapeado diretamente a partir do campo Users.Path na relação de utilizadores, a chave é codificada de forma rígida para o caminho. |
Users.PermissionsBoundary.PermissionsBoundaryArn |
relations.entity.resource.attribute.labels.value |
Mapeado diretamente a partir do campo Users.PermissionsBoundary.PermissionsBoundaryArn na relação de utilizadores, a chave está codificada de forma rígida para permissions_boundary_arn. |
Users.PermissionsBoundary.PermissionsBoundaryType |
relations.entity.resource.attribute.labels.value |
Mapeado diretamente a partir do campo Users.PermissionsBoundary.PermissionsBoundaryType na relação de utilizadores, a chave está codificada de forma rígida para permissions_boundary_type. |
Users.UserID |
relations.entity.user.product_object_id |
Mapeado diretamente a partir do campo Users.UserID na relação de utilizadores. |
Users.UserName |
relations.entity.user.userid |
Mapeado diretamente a partir do campo Users.UserName na relação de utilizadores. |
| N/A | entity.metadata.collected_timestamp |
Preenchido com a data/hora de carregamento do evento. |
| N/A | entity.metadata.vendor_name |
Codificado para o AWS. |
| N/A | entity.metadata.product_name |
Codificado no AWS IAM. |
| 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 |
Definido como User para os tipos de entidades 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 |
Codificado de forma rígida para AMAZON_WEB_SERVICES. |
| N/A | relations.entity_type |
Codificado de forma rígida como USER para relações de utilizadores. |
| N/A | relations.relationship |
Codificado de forma rígida como MEMBER para relações de grupos de utilizadores. |
| N/A | relations.direction |
Codificado como UNIDIRECTIONAL. |
| N/A | relations.entity.resource.resource_subtype |
Codificado de forma rígida para o utilizador para relações de utilizadores. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.