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
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.
Tópicos
- Limitações
- Habilitação dos logs de auditoria
- Habilitar o registro de auditoria em log usando o AWS CLI
- Habilitar o registro de auditoria em log usando a API de configuração
- Camadas e categorias do log de auditoria
- Configurações do log de auditoria
- Exemplo de log de auditoria
- Configuração de logs de auditoria usando a API REST
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)
-
Escolha o domínio para abrir sua configuração e, em seguida, acesse a guia Logs.
-
Selecione Logs de auditoria e, em seguida, Habilitar.
-
Crie um grupo de log CloudWatch ou escolha um existente.
-
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
eaws: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
" } } -
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.
-
Abra o OpenSearch Dashboards e escolha Segurança no menu do lado esquerdo.
-
Escolha Logs de auditoria.
-
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 |
COMPLIANCE_INTERNAL_CONFIG_WRITE |
Uma solicitação executou um evento de gravação no índice |
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 |
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:
|
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.
-
Em Configurações gerais, escolha Configurar e certifique-se de que a opção Camada REST esteja habilitada.
-
Em Configurações de compatibilidade, escolha Configurar.
-
Em Gravação, em Campos observados, adicione
accounts
para todos os eventos de gravação neste índice. -
Em Leitura, na seção Campos observados, adicione os campos
ssn
eid-
do índiceaccounts
:{ "accounts-": [ "ssn", "id-" ] }
Etapa 2: Executar eventos de leitura e gravação
-
Navegue até o OpenSearch Dashboards, escolha Ferramentas de desenvolvimento e indexe um documento de exemplo:
PUT accounts/_doc/0 { "ssn": "123", "id-": "456" }
-
Para testar um evento de leitura, envie a seguinte solicitação:
GET accounts/_search { "query": { "match_all": {} } }
Etapa 3: Observar os logs
-
Abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/
. -
No painel de navegação, escolha Grupos de logs.
-
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.
-
Em Fluxos de log, escolha Pesquisar tudo.
-
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
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" ] } }