Monitoramento de logs de auditoria no Amazon OpenSearch Service - Amazon OpenSearch Service

Monitoramento de logs de auditoria no Amazon OpenSearch Service

Se seu domínio do Amazon OpenSearch Service usa o controle de acesso refinado, você pode habilitar logs de auditoria para seus dados. Os logs de auditoria são altamente personalizáveis e permitem rastrear a atividade do usuário em seus clusters do OpenSearch, incluindo falhas e êxitos na autenticação, solicitações para OpenSearch, alterações em índices e consultas de pesquisa recebidas. A configuração padrão monitora um conjunto popular de ações do usuário, mas recomendamos adaptar as configurações às suas necessidades exatas.

Assim como nos logs de aplicações e logs lentos do OpenSearch, o OpenSearch Service publica logs de auditoria no CloudWatch Logs. Se habilitados, os preços padrão do CloudWatch são aplicáveis.

nota

Para habilitar logs de auditoria, sua função de usuário deve ser mapeada na função security_manager, o que oferece a você acesso à função plugins/_security da API REST do OpenSearch. Para saber mais, consulte Modificação do usuário primário.

Limitações

Os logs de auditoria têm as seguintes limitações:

  • Os logs de auditoria não incluem solicitações de pesquisa entre clusters que foram rejeitadas pela política de acesso ao domínio do destino.

  • O tamanho máximo de cada mensagem do log de auditoria é 10.000 caracteres. A mensagem do log de auditoria será truncada se exceder esse limite.

Habilitação dos logs de auditoria

A habilitação dos logs de auditoria é um processo em duas etapas. Primeiramente, você configura seu domínio para publicar logs de auditoria no CloudWatch Logs. Em seguida, você habilita os logs de auditoria no OpenSearch Dashboards e os configura para atender às suas necessidades.

Importante

Se você encontrar um erro ao seguir essas etapas, consulte Não é possível habilitar logs de auditoria para obter informações de solução de problemas.

Etapa 1: ativar registros de log e configurar uma política de acesso

Estas etapas descrevem como habilitar logs de auditoria usando o console. Você também pode habilitá-los usando a AWS CLI, ou a API do OpenSearch Service.

Para habilitar os logs de auditoria para um domínio do OpenSearch Service (console)
  1. Escolha o domínio para abrir sua configuração e, em seguida, acesse a guia Logs.

  2. Selecione Logs de auditoria e, em seguida, Habilitar.

  3. Crie um grupo de log CloudWatch ou escolha um existente.

  4. Escolha uma política de acesso que contenha as permissões apropriadas ou crie uma política usando o JSON fornecido pelo console:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "cw_log_group_arn" } ] }

    Recomendamos que você adicione as chaves de condição aws:SourceAccount e aws:SourceArn na política para se proteger contra o problema confused deputy. A conta de origem é o proprietário do domínio e o ARN de origem é o ARN do domínio. Para adicionar essas chaves de condição, o seu domínio deve estar no software de serviço R20211203 ou superior.

    Por exemplo, você poderia adicionar o bloco de condições a seguir na política:

    "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } }
  5. Escolha Habilitar.

Etapa 2: ativar os logs de auditoria no OpenSearch Dashboards

Após habilitar os logs de auditoria no console do OpenSearch Service, também é necessário habilitá-los no OpenSearch Dashboards e configurá-los para atender às suas necessidades.

  1. Abra o OpenSearch Dashboards e escolha Segurança no menu do lado esquerdo.

  2. Escolha Logs de auditoria.

  3. Escolha Habilitar log de auditoria.

A interface do usuário do Dashboars oferece controle total das configurações do log de auditoria emConfigurações gerais e Configurações de compatibilidade. Para obter uma descrição de todas as opções de configuração, consulte Configurações de log de auditoria.

Habilitar o registro de auditoria em log usando o AWS CLI

O seguinte comando AWS CLI habilita logs de auditoria em um domínio existente:

aws opensearch update-domain-config --domain-name my-domain --log-publishing-options "AUDIT_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-log-group,Enabled=true}"

Você também pode habilitar os logs de auditoria ao criar um domínio. Para obter mais informações, consulte a Referência de comandos da AWS CLI.

Habilitar o registro de auditoria em log usando a API de configuração

A seguinte solicitação para a API de configuração habilita os logs de auditoria em um domínio existente:

POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config { "LogPublishingOptions": { "AUDIT_LOGS": { "CloudWatchLogsLogGroupArn":"arn:aws:logs:us-east-1:123456789012:log-group1:sample-domain", "Enabled":true } } }

Para obter mais informações, consulte a Referência da API do Amazon OpenSearch Service.

Camadas e categorias do log de auditoria

A comunicação do cluster ocorre em duas camadas separadas: a camada REST e a camada de transporte.

  • A camada REST aborda a comunicação com clientes HTTP, como curl, Logstash, OpenSearch Dashboards, o cliente REST de alto nível Java, a biblioteca Requests do Python — todas as solicitações HTTP que chegam ao cluster.

  • A camada de transporte cobre a comunicação entre nós. Por exemplo, depois que uma solicitação de pesquisa chega ao cluster (sobre a camada REST), o nó de coordenação que atende à solicitação envia a consulta para outros nós, recebe suas respostas, coleta os documentos necessários e os reúne na resposta final. Operações como alocação de fragmentos e rebalanceamento também ocorrem sobre a camada de transporte.

Você pode habilitar ou desabilitar logs de auditoria para camadas inteiras, bem como categorias de auditoria individuais para uma camada. A tabela a seguir contém um resumo das categorias de auditoria e das camadas para as quais elas estão disponíveis.

Categoria Descrição Disponível para REST Disponível para transporte

FAILED_LOGIN

Uma solicitação continha credenciais inválidas, e a autenticação falhou. Sim Sim

MISSING_PRIVILEGES

Um usuário não tinha os privilégios necessários para fazer a solicitação. Sim Sim

GRANTED_PRIVILEGES

Um usuário tinha os privilégios necessários para fazer a solicitação. Sim Sim

OPENSEARCH_SECURITY_INDEX_ATTEMPT

Uma solicitação tentou modificar o índice .opendistro_security. Não Sim

AUTHENTICATED

Uma solicitação continha credenciais válidas e a autenticação foi bem-sucedida. Sim Sim

INDEX_EVENT

Uma solicitação executou uma operação administrativa em um índice, como criar um, definir um alias ou executar uma mesclagem forçada. A lista completa de ações indices:admin/ incluídas nesta categoria estão disponíveis na documentação do OpenSearch. Não Sim

Além dessas categorias padrão, o controle de acesso refinado oferece várias categorias adicionais projetadas para atender aos requisitos de conformidade de dados.

Categoria Descrição

COMPLIANCE_DOC_READ

Uma solicitação executou um evento de leitura em um documento em um índice.

COMPLIANCE_DOC_WRITE

Uma solicitação executou um evento de gravação em um documento em um índice.

COMPLIANCE_INTERNAL_CONFIG_READ

Uma solicitação executou um evento de leitura no índice .opendistro_security.

COMPLIANCE_INTERNAL_CONFIG_WRITE

Uma solicitação executou um evento de gravação no índice .opendistro_security.

Você pode ter qualquer combinação de categorias e atributos de mensagem. Por exemplo, se você enviar uma solicitação REST para indexar um documento, poderá ver as seguintes linhas nos logs de auditoria:

  • AUTHENTICATED na camada REST (autenticação)

  • GRANTED_PRIVILEGE na camada de transporte (autorização)

  • COMPLIANCE_DOC_WRITE (documento gravado em um índice)

Configurações do log de auditoria

Há várias opções de configuração para os logs de auditoria.

Configurações gerais

As configurações gerais permitem habilitar ou desabilitar categorias individuais ou camadas inteiras. Recomendamos enfaticamente manter GRANTED_PRIVILEGES e AUTHENTICATED como categorias excluídas. Caso contrário, essas categorias serão registradas para cada solicitação válida para o cluster.

Nome Configuração de backend Descrição

Camada REST

enable_rest

Habilite ou desabilite eventos que ocorrem na camada REST.

Categorias desabilitadas de REST

disabled_rest_categories

Especifique categorias de auditoria a serem ignoradas na camada REST. Modificar essas categorias pode aumentar drasticamente o tamanho dos logs de auditoria.

Transport Layer

enable_transport

Habilite ou desabilite eventos que acontecem na camada de transporte.

Categorias desabilitadas de transporte

disabled_transport_categories

Especifique categorias de auditoria que devem ser ignoradas na camada de transporte. Modificar essas categorias pode aumentar drasticamente o tamanho dos logs de auditoria.

As configurações de atributo permitem personalizar a quantidade de detalhes em cada linha de log.

Nome Configuração de backend Descrição

Solicitações em massa

resolve_bulk_requests

Habilitar essa configuração gera um log para cada documento em uma solicitação em massa, o que pode aumentar drasticamente o tamanho dos logs de auditoria.

Corpo da solicitação

log_request_body

Inclua o corpo da solicitação das solicitações.

Resolver índices

resolve_índices

Resolva aliases em índices.

Use as configurações de ignorar para excluir um conjunto de usuários ou caminhos de API:

Nome Configuração de backend Descrição

Usuários ignorados

ignore_users

Especifique os usuários que não deseja incluir.

Solicitações ignoradas

ignore_requests

Especifique padrões de solicitação que não deseja incluir.

Configurações de conformidade

As configurações de conformidade permitem ajustar o acesso ao índice, ao documento ou ao nível de campo.

Nome Configuração de backend Descrição

Log de compatibilidade

enable_compliance

Habilite ou desabilite o log de compatibilidade

Você pode especificar as configurações a seguir para o log de eventos de leitura e gravação.

Nome Configuração de backend Descrição

Log de configuração interno

internal_config

Habilite ou desabilite o log de eventos no índice .opendistro_security.

Você pode especificar as configurações a seguir para eventos de leitura.

Nome Configuração de backend Descrição

Ler metadados

read_metadata_only

Incluir apenas metadados para eventos de leitura. Não inclua campos de documento.

Usuários ignorados

read_ignore_users

Não inclua determinados usuários para eventos de leitura.

Campos observados

read_watched_fields

Especifique os índices e campos a serem observados para eventos de leitura. A adição de campos observados gera um log por acesso ao documento, o que pode aumentar drasticamente o tamanho dos logs de auditoria. Os campos observados oferecem suporte a padrões de índice e padrões de campo:

{ "index-name-pattern": [ "field-name-pattern" ], "logs*": [ "message" ], "twitter": [ "id", "user*" ] }

Você pode especificar as configurações a seguir para eventos de gravação.

Nome Configuração de backend Descrição

Metadados de gravação

write_metadata_only

Inclua metadados somente para eventos de gravação. Não inclua campos de documento.

Diferenças de log

write_log_diffs

Se write_metadata_only for false (falso), inclua somente as diferenças entre eventos de gravação.

Usuários ignorados

write_ignore_users

Não inclua determinados usuários para eventos de gravação.

Observar índices

write_watched_índices

Especifique os índices ou padrões de índice para observar eventos de gravação. A adição de campos observados gera um log por acesso ao documento, o que pode aumentar drasticamente o tamanho dos logs de auditoria.

Exemplo de log de auditoria

Esta seção inclui um exemplo de configuração, solicitação de pesquisa e o log de auditoria resultante para todos os eventos de leitura e gravação de um índice.

Etapa 1: Configurar logs de auditoria

Depois de habilitar a publicação de logs de auditoria em um grupo do CloudWatch Logs, navegue até a página de log de auditoria do OpenSearch Dashboards e escolha Habilitar log de auditoria.

  1. Em Configurações gerais, escolha Configurar e certifique-se de que a opção Camada REST esteja habilitada.

  2. Em Configurações de compatibilidade, escolha Configurar.

  3. Em Gravação, em Campos observados, adicione accounts para todos os eventos de gravação neste índice.

  4. Em Leitura, na seção Campos observados, adicione os campos ssn e id- do índice accounts:

    { "accounts-": [ "ssn", "id-" ] }

Etapa 2: Executar eventos de leitura e gravação

  1. Navegue até o OpenSearch Dashboards, escolha Ferramentas de desenvolvimento e indexe um documento de exemplo:

    PUT accounts/_doc/0 { "ssn": "123", "id-": "456" }
  2. Para testar um evento de leitura, envie a seguinte solicitação:

    GET accounts/_search { "query": { "match_all": {} } }

Etapa 3: Observar os logs

  1. Abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/.

  2. No painel de navegação, escolha Grupos de logs.

  3. Escolha o grupo de logs que você especificou ao habilitar os logs de auditoria. No grupo de logs, o OpenSearch Service cria um fluxo de log para cada nó em seu domínio.

  4. Em Fluxos de log, escolha Pesquisar tudo.

  5. Para os eventos de leitura e gravação, consulte os logs correspondentes. Um atraso de 5 segundos antes do log ser exibido é normal.

    Exemplo de gravação de log de auditoria

    { "audit_compliance_operation": "CREATE", "audit_cluster_name": "824471164578:audit-test", "audit_node_name": "be217225a0b77c2bd76147d3ed3ff83c", "audit_category": "COMPLIANCE_DOC_WRITE", "audit_request_origin": "REST", "audit_compliance_doc_version": 1, "audit_node_id": "3xNJhm4XS_yTzEgDWcGRjA", "@timestamp": "2020-08-23T05:28:02.285+00:00", "audit_format_version": 4, "audit_request_remote_address": "3.236.145.227", "audit_trace_doc_id": "lxnJGXQBqZSlDB91r_uZ", "audit_request_effective_user": "admin", "audit_trace_shard_id": 8, "audit_trace_indices": [ "accounts" ], "audit_trace_resolved_indices": [ "accounts" ] }

    Exemplo de leitura de log de auditoria

    { "audit_cluster_name": "824471164578:audit-docs", "audit_node_name": "806f6050cb45437e2401b07534a1452f", "audit_category": "COMPLIANCE_DOC_READ", "audit_request_origin": "REST", "audit_node_id": "saSevm9ASte0-pjAtYi2UA", "@timestamp": "2020-08-31T17:57:05.015+00:00", "audit_format_version": 4, "audit_request_remote_address": "54.240.197.228", "audit_trace_doc_id": "config:7.7.0", "audit_request_effective_user": "admin", "audit_trace_shard_id": 0, "audit_trace_indices": [ "accounts" ], "audit_trace_resolved_indices": [ "accounts" ] }

Para incluir o corpo da solicitação, volte para Configurações de compatibilidade no OpenSearch Dashboards e desabilite Metadados de gravação. Para excluir eventos por um usuário específico, adicione o usuário a Usuários Ignorados.

Para obter uma descrição de cada campo do log de auditoria, consulte Referência de campos do log de auditoria. Para obter informações sobre como pesquisar e analisar seus dados de log de auditoria, consulte Análise de dados de log com o CloudWatch Logs Insights no Manual do usuário do Amazon CloudWatch Logs.

Configuração de logs de auditoria usando a API REST

Recomendamos usar o OpenSearch Dashboards para configurar logs de auditoria, mas você também pode usar a API REST de controle de acesso refinado. Esta seção contém uma solicitação de exemplo. A documentação completa da API REST está disponível na documentação do OpenSearch.

PUT _opendistro/_security/api/audit/config { "enabled": true, "audit": { "enable_rest": true, "disabled_rest_categories": [ "GRANTED_PRIVILEGES", "AUTHENTICATED" ], "enable_transport": true, "disabled_transport_categories": [ "GRANTED_PRIVILEGES", "AUTHENTICATED" ], "resolve_bulk_requests": true, "log_request_body": true, "resolve_indices": true, "exclude_sensitive_headers": true, "ignore_users": [ "kibanaserver" ], "ignore_requests": [ "SearchRequest", "indices:data/read/*", "/_cluster/health" ] }, "compliance": { "enabled": true, "internal_config": true, "external_config": false, "read_metadata_only": true, "read_watched_fields": { "read-index-1": [ "field-1", "field-2" ], "read-index-2": [ "field-3" ] }, "read_ignore_users": [ "read-ignore-1" ], "write_metadata_only": true, "write_log_diffs": false, "write_watched_indices": [ "write-index-1", "write-index-2", "log-*", "*" ], "write_ignore_users": [ "write-ignore-1" ] } }