Amazon OpenSearch 서비스의 감사 로그 모니터링 - 아마존 OpenSearch 서비스

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon OpenSearch 서비스의 감사 로그 모니터링

Amazon OpenSearch Service 도메인이 세분화된 액세스 제어를 사용하는 경우 데이터에 대한 감사 로그를 활성화할 수 있습니다. 감사 로그는 고도로 사용자 지정할 수 있으며 인증 성공 및 실패, 요청, 색인 변경, 수신 검색 쿼리 등 OpenSearch 클러스터에서의 사용자 활동을 추적할 OpenSearch 수 있습니다. 기본 구성은 자주 사용되는 사용자 작업 집합을 추적하지만 정확한 요구 사항에 맞게 설정을 조정하는 것이 좋습니다.

OpenSearch 애플리케이션 로그 및 슬로우 로그와 마찬가지로 OpenSearch Service는 감사 로그를 Logs에 CloudWatch 게시합니다. 활성화된 경우 표준 CloudWatch 요금이 적용됩니다.

참고

감사 로그를 활성화하려면 사용자 역할을 역할에 매핑해야 합니다. 그러면 OpenSearch plugins/_security REST API에 액세스할 수 있습니다. security_manager 자세한 내용은 마스터 사용자 수정를 참조하세요.

제한 사항

감사 로그에는 다음과 같은 제한 사항이 있습니다.

  • 감사 로그에는 대상의 도메인 액세스 정책에 의해 거부된 클러스터 간 검색 요청이 포함되지 않습니다.

  • 각 감사 로그 메시지의 최대 크기는 10,000자입니다. 이 제한을 초과하면 감사 로그 메시지가 잘립니다.

감사 로그 활성화

감사 로그를 활성화하는 절차는 두 단계로 이루어져 있습니다. 먼저 감사 로그를 Logs에 게시하도록 도메인을 구성합니다. CloudWatch 그런 다음 OpenSearch 대시보드에서 감사 로그를 활성화하고 필요에 맞게 구성합니다.

중요

이 단계를 수행하는 동안 오류가 발생하면 감사 로그를 활성화할 수 없음에서 문제 해결 정보를 참조하세요.

1단계: 감사 로그 활성화 및 액세스 정책 구성

다음 단계에서는 콘솔을 사용하여 감사 로그를 활성화하는 방법을 설명합니다. 또는 OpenSearch Service API를 사용하여 활성화할 수도 있습니다. AWS CLI

OpenSearch 서비스 도메인에 대한 감사 로그를 활성화하려면 (콘솔)
  1. 도메인을 선택하여 구성을 열고 로그(Logs) 탭으로 이동합니다.

  2. 감사 로그(Audit logs)를 선택한 후 사용 설정(Enable)을 선택합니다.

  3. CloudWatch 로그 그룹을 만들거나 기존 그룹을 선택합니다.

  4. 적절한 사용 권한이 포함된 액세스 정책을 선택하거나 콘솔에서 제공하는 JSON을 사용하여 정책을 만듭니다.

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

    혼동된 대리자 문제로부터 자신을 보호하기 위하여 aws:SourceAccountaws:SourceArn 조건 키를 정책에 추가할 것을 권장합니다. 소스 계정은 도메인의 소유자이고 소스 ARN은 도메인의 ARN입니다. 이러한 조건 키를 추가하려면 도메인에 서비스 소프트웨어 R20211203 이상을 사용해야 합니다.

    예를 들어 정책에 다음 조건 블록을 추가할 수 있습니다.

    "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } }
  5. 활성화를 선택합니다.

2단계: OpenSearch 대시보드에서 감사 로그 켜기

OpenSearch 서비스 콘솔에서 감사 로그를 활성화한 후에는 OpenSearch 대시보드에서도 감사 로그를 활성화하고 필요에 맞게 구성해야 합니다.

  1. OpenSearch 대시보드를 열고 왼쪽 메뉴에서 보안을 선택합니다.

  2. 감사 로그(Audit logs)를 선택합니다.

  3. 감사 로깅 활성화(Enable audit logging)를 선택합니다.

Dashboards UI에서는 일반 설정(General settings)규정 준수 설정(Compliance settings)에서 감사 로그 설정을 완전히 제어할 수 있습니다. 모든 구성 옵션에 대한 설명은 감사 로그 설정을 참조하세요.

를 사용하여 감사 로깅을 활성화합니다. AWS CLI

다음 AWS CLI 명령은 기존 도메인의 감사 로그를 활성화합니다.

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}"

도메인을 생성할 때 감사 로그를 활성화할 수도 있습니다. 자세한 내용은 AWS CLI 명령 참조를 참조하세요.

구성 API를 사용하여 감사 로깅 활성화

구성 API에 다음을 요청하면 기존 도메인에서 감사 로그를 활성화할 수 있습니다.

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 } } }

자세한 내용은 Amazon OpenSearch 서비스 API 레퍼런스를 참조하십시오.

감사 로그 계층 및 범주

클러스터 통신은 두 개의 별도 계층인 REST 계층과 전송 계층을 통해 이루어집니다.

  • REST 계층은 curl, Logstash, OpenSearch 대시보드, Java 고급 REST 클라이언트, Python 요청 라이브러리 등 클러스터에 도착하는 모든 HTTP 요청과 같은 HTTP 클라이언트와의 통신을 다룹니다.

  • 전송 계층은 노드 간 통신을 다룹니다. 예를 들어, 검색 요청이 REST 계층을 통해 클러스터에 도착한 후 요청을 제공하는 조정 노드는 쿼리를 다른 노드로 보내고 응답을 수신하고 필요한 문서를 수집하여 최종 응답으로 수집합니다. 샤드 할당 및 재조정과 같은 작업도 전송 계층을 통해 이루어집니다.

계층에 대한 개별 감사 범주뿐만 아니라 전체 계층에 대한 감사 로그를 활성화하거나 비활성화할 수 있습니다. 다음 표에는 감사 범주 및 감사 범주가 사용할 수 있는 계층에 대한 요약이 나와 있습니다.

범주 설명 REST 사용 가능 전송 사용 가능

FAILED_LOGIN

요청에 잘못된 자격 증명이 포함되어 있으며 인증에 실패했습니다.

MISSING_PRIVILEGES

사용자에게 요청을 할 수 있는 권한이 없습니다.

GRANTED_PRIVILEGES

사용자에게 요청을 할 수 있는 권한이 있었습니다.

OPENSEARCH_SECURITY_INDEX_ATTEMPT

요청에서 .opendistro_security 인덱스를 수정하려고 시도했습니다. 아니요

AUTHENTICATED

요청에 유효한 자격 증명이 포함되어 있으며 인증에 성공했습니다.

INDEX_EVENT

요청에서 인덱스에 대한 관리 작업(예: 인덱스 생성, 별칭 설정 또는 강제 병합 수행)을 수행했습니다. 이 범주에 포함된 전체 indices:admin/ 작업 목록은 설명서에서 확인할 수 있습니다. OpenSearch 아니요

이러한 표준 범주 외에도 세분화된 액세스 제어는 데이터 규정 준수 요구 사항을 충족하도록 설계된 몇 가지 추가 범주를 제공합니다.

범주 설명

COMPLIANCE_DOC_READ

요청에서 인덱스의 문서에 대해 읽기 이벤트를 수행했습니다.

COMPLIANCE_DOC_WRITE

요청에서 인덱스의 문서에 대해 쓰기 이벤트를 수행했습니다.

COMPLIANCE_INTERNAL_CONFIG_READ

요청에서 .opendistro_security 인덱스에 대해 읽기 이벤트를 수행했습니다.

COMPLIANCE_INTERNAL_CONFIG_WRITE

요청에서 .opendistro_security 인덱스에 대해 쓰기 이벤트를 수행했습니다.

범주와 메시지 속성을 자유롭게 조합할 수 있습니다. 예를 들어 문서를 인덱싱하기 위해 REST 요청을 보내는 경우 감사 로그에 다음 줄이 표시될 수 있습니다.

  • AUTHENTICATED on REST layer (authentication)

  • GRANTED_PRIVILEGE on transport layer (authorization)

  • COMPLIANCE_DOC_WRITE (document written to an index)

감사 로그 설정

감사 로그에는 다양한 구성 옵션이 있습니다.

일반 설정

일반 설정을 사용하면 개별 범주 또는 전체 계층을 활성화하거나 비활성화할 수 있습니다. GRANTED_PRIVILEGES 및 AUTHENTICATED를 제외된 범주로 남겨 두는 것이 좋습니다. 그렇지 않으면 클러스터에 대한 모든 유효한 요청에 대해 이러한 범주가 기록됩니다.

명칭 백엔드 설정 설명

REST 계층

enable_rest

REST 계층에서 발생하는 이벤트를 활성화하거나 비활성화합니다.

REST 비활성화 범주

disabled_rest_categories

REST 계층에서 무시할 감사 범주를 지정합니다. 이러한 범주를 수정하면 감사 로그의 크기가 많이 늘어날 수 있습니다.

전송 계층

enable_transport

전송 계층에서 발생하는 이벤트를 활성화하거나 비활성화합니다.

전송 비활성화 범주

disabled_transport_categories

전송 계층에서 무시해야 하는 감사 범주를 지정합니다. 이러한 범주를 수정하면 감사 로그의 크기가 많이 늘어날 수 있습니다.

속성 설정을 사용하여 각 로그 행의 세부 정보 양을 사용자 지정할 수 있습니다.

명칭 백엔드 설정 설명

대량 요청

resolve_bulk_requests

이 설정을 활성화하면 대량 요청하는 각 문서에 대한 로그가 생성되므로 감사 로그의 크기가 많이 늘어날 수 있습니다.

요청 본문

log_request_body

요청의 요청 본문을 포함합니다.

인덱스 해석

resolve_indices

별칭을 인덱스로 해석합니다.

무시 설정을 사용하여 사용자 또는 API 경로 집합을 제외합니다.

명칭 백엔드 설정 설명

무시된 사용자

ignore_users

제외할 사용자를 지정합니다.

무시된 요청

ignore_requests

제외할 요청 패턴을 지정합니다.

규정 준수 설정

규정 준수 설정을 사용하면 색인, 문서 또는 필드 수준 액세스를 조정할 수 있습니다.

명칭 백엔드 설정 설명

규정 준수 로깅

enable_compliance

규정 준수 로깅을 활성화하거나 비활성화합니다.

읽기 및 쓰기 이벤트 로깅에 대한 다음 설정을 지정할 수 있습니다.

명칭 백엔드 설정 설명

내부 구성 로깅

internal_config

.opendistro_security 인덱스에서 이벤트 로깅을 활성화하거나 비활성화합니다.

읽기 이벤트에 대한 다음 설정을 지정할 수 있습니다.

명칭 백엔드 설정 설명

메타데이터 읽기

read_metadata_only

읽기 이벤트에 대한 메타데이터만 포함합니다. 문서 필드는 포함하지 않습니다.

무시된 사용자

read_ignore_users

읽기 이벤트에 특정 사용자를 포함하지 않습니다.

감시된 필드

read_watched_fields

읽기 이벤트를 감시할 인덱스와 필드를 지정합니다. 감시된 필드를 추가하면 문서 액세스당 하나의 로그가 생성되므로 감사 로그의 크기가 많이 늘어날 수 있습니다. 감시된 필드는 인덱스 패턴 및 필드 패턴을 지원합니다.

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

쓰기 이벤트에 대한 다음 설정을 지정할 수 있습니다.

명칭 백엔드 설정 설명

메타데이터 쓰기

write_metadata_only

쓰기 이벤트에 대한 메타데이터만 포함합니다. 문서 필드는 포함하지 않습니다.

로그 차이

write_log_diffs

write_metadata_only가 거짓인 경우 쓰기 이벤트 간의 차이만 포함합니다.

무시된 사용자

write_ignore_users

쓰기 이벤트에 특정 사용자를 포함하지 않습니다.

인덱스 감시

write_watched_indices

쓰기 이벤트를 감시할 인덱스 또는 인덱스 패턴을 지정합니다. 감시된 필드를 추가하면 문서 액세스당 하나의 로그가 생성되므로 감사 로그의 크기가 많이 늘어날 수 있습니다.

감사 로그 예제

이 섹션에는 인덱스의 모든 읽기 및 쓰기 이벤트에 대한 예제 구성, 검색 요청 및 결과 감사 로그가 포함되어 있습니다.

1단계: 감사 로그 구성

로그 그룹에 감사 로그를 게시할 수 있도록 설정한 후 OpenSearch 대시보드 감사 로깅 페이지로 이동하여 감사 로깅 활성화를 선택합니다. CloudWatch

  1. 일반 설정(General Settings)에서 구성(Configure)을 선택하고 REST 계층(REST layer)이 활성화되었는지 확인합니다.

  2. 규정 준수 설정(Compliance Settings)에서 구성(Configure)을 선택합니다.

  3. 감시된 필드(Watched Fields)쓰기(Write)에서 모든 쓰기 이벤트에 대한 accounts을 이 인덱스에 추가합니다.

  4. 감시된 필드(Watched Fields)읽기(Read)에서 ssn 인덱스의 id- 필드 및 accounts를 추가합니다.

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

2단계: 읽기 및 쓰기 이벤트 수행

  1. OpenSearch 대시보드로 이동하여 개발 도구를 선택하고 샘플 문서를 색인화하십시오.

    PUT accounts/_doc/0 { "ssn": "123", "id-": "456" }
  2. 읽기 이벤트를 테스트하려면 다음 요청을 보냅니다.

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

3단계: 로그 관찰

  1. https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 창에서 로그 그룹(Log groups)을 선택합니다.

  3. 감사 로그를 활성화하는 동안 지정한 로그 그룹을 선택합니다. 로그 그룹 내에서 OpenSearch 서비스는 도메인의 각 노드에 대한 로그 스트림을 생성합니다.

  4. 로그 스트림(Log streams)에서 모두 검색(Search all)을 선택합니다.

  5. 읽기 및 쓰기 이벤트는 해당 로그를 참조하세요. 로그가 나타나기 전 예상 지연 시간은 5초입니다.

    샘플 쓰기 감사 로그

    { "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" ] }

    샘플 읽기 감사 로그

    { "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" ] }

요청 본문을 포함하려면 OpenSearch 대시보드의 규정 준수 설정으로 돌아가 메타데이터 쓰기를 비활성화하세요. 특정 사용자별로 이벤트를 제외하려면 해당 사용자를 무시된 사용자(Ignored Users)에 추가합니다.

각 감사 로그 필드에 대한 설명은 감사 로그 필드 참조를 참조하세요. 감사 로그 데이터 검색 및 분석에 대한 자세한 내용은 Amazon Logs 사용 설명서의 CloudWatch Logs Insights를 사용한 CloudWatch 로그 데이터 분석을 참조하십시오.

REST API를 사용하여 감사 로그 구성

OpenSearch 대시보드를 사용하여 감사 로그를 구성하는 것이 좋지만 세분화된 액세스 제어 REST API를 사용할 수도 있습니다. 이 섹션에는 샘플 요청이 포함되어 있습니다. REST API에 대한 전체 설명서는 설명서에서 확인할 수 있습니다. OpenSearch

PUT _plugins/_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" ] } }