

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

# Amazon OpenSearch Service의 감사 로그 모니터링
<a name="audit-logs"></a>

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

[OpenSearch 애플리케이션 로그 및 느린 로그](createdomain-configure-slow-logs.md)와 마찬가지로 OpenSearch Service는 CloudWatch Logs를 통해 감사 로그를 게시합니다. 활성화되면, [표준 CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing/)이 적용됩니다.

**참고**  
감사 로그를 활성화하려면 사용자 역할이 `security_manager` 역할에 매핑되어OpenSearch `plugins/_security` REST API에 액세스할 수 있어야 합니다. 자세한 내용은 [마스터 사용자 수정](fgac.md#fgac-forget) 섹션을 참조하세요.

**Topics**
+ [제한 사항](#audit-logs-limitations)
+ [감사 로그 활성화](#audit-log-enabling)
+ [를 사용하여 감사 로깅 활성화 AWS CLI](#audit-log-enabling-cli)
+ [구성 API를 사용하여 감사 로깅 활성화](#audit-log-enabling-api)
+ [감사 로그 계층 및 범주](#audit-log-layers)
+ [감사 로그 설정](#audit-log-settings)
+ [감사 로그 예제](#audit-log-example)
+ [REST API를 사용하여 감사 로그 구성](#audit-log-rest-api)

## 제한 사항
<a name="audit-logs-limitations"></a>

감사 로그에는 다음과 같은 제한 사항이 있습니다.
+ 감사 로그에는 대상의 도메인 액세스 정책에 의해 거부된 클러스터 간 검색 요청이 포함되지 않습니다.
+ 각 감사 로그 메시지의 최대 크기는 10,000자입니다. 이 제한을 초과하면 감사 로그 메시지가 잘립니다.

## 감사 로그 활성화
<a name="audit-log-enabling"></a>

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

**중요**  
이 단계를 수행하는 동안 오류가 발생하면 [감사 로그를 활성화할 수 없음](handling-errors.md#troubleshooting-audit-logs-error)에서 문제 해결 정보를 참조하세요.

### 1단계: 감사 로그 활성화 및 액세스 정책 구성
<a name="audit-log-enable"></a>

다음 단계에서는 콘솔을 사용하여 감사 로그를 활성화하는 방법을 설명합니다. 또는 [OpenSearch Service API](#audit-log-enabling-api)[를 사용하여 활성화 AWS CLI](#audit-log-enabling-cli)할 수도 있습니다.

**OpenSearch Service 도메인(콘솔)에 대한 감사 로그를 활성화하려면**

1. 도메인을 선택하여 구성을 열고 **로그(Logs)** 탭으로 이동합니다.

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

1. CloudWatch 로그 그룹을 생성하거나 기존 로그 그룹을 선택합니다.

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

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "es.amazonaws.com"
         },
         "Action": [
           "logs:PutLogEvents",
           "logs:CreateLogStream"
         ],
         "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:/aws/opensearch/domains/domain-name/*"
       }
     ]
   }
   ```

------

   [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)로부터 자신을 보호하기 위하여 `aws:SourceAccount` 및 `aws:SourceArn` 조건 키를 정책에 추가할 것을 권장합니다. 소스 계정은 도메인의 소유자이고 소스 ARN은 도메인의 ARN입니다. 이러한 조건 키를 추가하려면 도메인에 서비스 소프트웨어 R20211203 이상을 사용해야 합니다.

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

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

1. **활성화**를 선택합니다.

### 2단계: OpenSearch Dashboards에서 감사 로그 켜기
<a name="audit-log-dashboards-ui"></a>

OpenSearch Service 콘솔에서 감사 로그를 활성화한 후 OpenSearch Dashboards에서도 활성화하고 필요에 맞게 구성*해야 합니다*.

1. OpenSearch Dashboards를 열고 왼쪽 메뉴에서 **보안(Security)**을 선택합니다.

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

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

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

## 를 사용하여 감사 로깅 활성화 AWS CLI
<a name="audit-log-enabling-cli"></a>

다음 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 명령 참조](https://docs.aws.amazon.com/cli/latest/reference/)를 참조하세요.

## 구성 API를 사용하여 감사 로깅 활성화
<a name="audit-log-enabling-api"></a>

구성 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 Service API 참조](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_LogPublishingOption.html)를 확인하세요.

## 감사 로그 계층 및 범주
<a name="audit-log-layers"></a>

클러스터 통신은 두 개의 별도 *계층*인 REST 계층과 전송 계층을 통해 이루어집니다.
+ REST 계층은 curl, Logstash, OpenSearch 대시 보드, Java 상위 수준 REST 클라이언트, Python [Requests](https://2.python-requests.org/) 라이브러리와 같은 HTTP 클라이언트와의 통신을 다룹니다. 이들은 모두 클러스터에 도착하는 모든 HTTP 요청입니다.
+ 전송 계층은 노드 간 통신을 다룹니다. 예를 들어, 검색 요청이 REST 계층을 통해 클러스터에 도착한 후 요청을 제공하는 조정 노드는 쿼리를 다른 노드로 보내고 응답을 수신하고 필요한 문서를 수집하여 최종 응답으로 수집합니다. 샤드 할당 및 재조정과 같은 작업도 전송 계층을 통해 이루어집니다.

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


| 범주 | 설명 | REST 사용 가능 | 전송 사용 가능 | 
| --- | --- | --- | --- | 
|  FAILED\$1LOGIN  | 요청에 잘못된 자격 증명이 포함되어 있으며 인증에 실패했습니다. | 예 | 예 | 
|  MISSING\$1PRIVILEGES  | 사용자에게 요청을 할 수 있는 권한이 없습니다. | 예 | 예 | 
|  GRANTED\$1PRIVILEGES  | 사용자에게 요청을 할 수 있는 권한이 있었습니다. | 예 | 예 | 
|  OPENSEARCH\$1SECURITY\$1INDEX\$1ATTEMPT  | 요청에서 .opendistro\$1security 인덱스를 수정하려고 시도했습니다. | 아니요 | 예 | 
|  AUTHENTICATED  | 요청에 유효한 자격 증명이 포함되어 있으며 인증에 성공했습니다. | 예 | 예 | 
|  INDEX\$1EVENT  | 요청에서 인덱스에 대한 관리 작업(예: 인덱스 생성, 별칭 설정 또는 강제 병합 수행)을 수행했습니다. 범주에 포함되는 indices:admin/ 작업의 전체 목록은 [OpenSearch 설명서](https://docs.opensearch.org/latest/security-plugin/access-control/permissions/)에서 확인할 수 있습니다. | 아니요 | 예 | 

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


| 범주 | 설명 | 
| --- | --- | 
|  COMPLIANCE\$1DOC\$1READ  | 요청에서 인덱스의 문서에 대해 읽기 이벤트를 수행했습니다. | 
|  COMPLIANCE\$1DOC\$1WRITE  | 요청에서 인덱스의 문서에 대해 쓰기 이벤트를 수행했습니다. | 
|  COMPLIANCE\$1INTERNAL\$1CONFIG\$1READ  |  요청에서 `.opendistro_security` 인덱스에 대해 읽기 이벤트를 수행했습니다.  | 
|  COMPLIANCE\$1INTERNAL\$1CONFIG\$1WRITE  | 요청에서 `.opendistro_security` 인덱스에 대해 쓰기 이벤트를 수행했습니다. | 

범주와 메시지 속성을 자유롭게 조합할 수 있습니다. 예를 들어 문서를 인덱싱하기 위해 REST 요청을 보내는 경우 감사 로그에 다음 줄이 표시될 수 있습니다.
+ AUTHENTICATED on REST layer (authentication)
+ GRANTED\$1PRIVILEGE on transport layer (authorization)
+ COMPLIANCE\$1DOC\$1WRITE (document written to an index)

## 감사 로그 설정
<a name="audit-log-settings"></a>

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

### 일반 설정
<a name="audit-logs-general-settings"></a>

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


| 이름 | 백엔드 설정 | 설명 | 
| --- | --- | --- | 
|  REST 계층  |  enable\$1rest  |  REST 계층에서 발생하는 이벤트를 활성화하거나 비활성화합니다.  | 
|  REST 비활성화 범주  |  disabled\$1rest\$1categories  |  REST 계층에서 무시할 감사 범주를 지정합니다. 이러한 범주를 수정하면 감사 로그의 크기가 많이 늘어날 수 있습니다.  | 
|  전송 계층  |  enable\$1transport  |  전송 계층에서 발생하는 이벤트를 활성화하거나 비활성화합니다.  | 
|  전송 비활성화 범주  |  disabled\$1transport\$1categories  |  전송 계층에서 무시해야 하는 감사 범주를 지정합니다. 이러한 범주를 수정하면 감사 로그의 크기가 많이 늘어날 수 있습니다.  | 

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


| 이름 | 백엔드 설정 | 설명 | 
| --- | --- | --- | 
|  대량 요청  |  resolve\$1bulk\$1requests  |  이 설정을 활성화하면 대량 요청하는 각 문서에 대한 로그가 생성되므로 감사 로그의 크기가 많이 늘어날 수 있습니다.  | 
|  요청 본문  |  log\$1request\$1body  |  요청의 요청 본문을 포함합니다.  | 
|  인덱스 해석  |  resolve\$1indices  |  별칭을 인덱스로 해석합니다.  | 

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


| 이름 | 백엔드 설정 | 설명 | 
| --- | --- | --- | 
|  무시된 사용자  |  ignore\$1users  |  제외할 사용자를 지정합니다.  | 
|  무시된 요청  |  ignore\$1requests  |  제외할 요청 패턴을 지정합니다.  | 

### 규정 준수 설정
<a name="audit-logs-compliance-settings"></a>

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


| 이름 | 백엔드 설정 | 설명 | 
| --- | --- | --- | 
|  규정 준수 로깅  |  enable\$1compliance  |  규정 준수 로깅을 활성화하거나 비활성화합니다.  | 

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


| 이름 | 백엔드 설정 | 설명 | 
| --- | --- | --- | 
|  내부 구성 로깅  |  internal\$1config  |  `.opendistro_security` 인덱스에서 이벤트 로깅을 활성화하거나 비활성화합니다.  | 

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


| 이름 | 백엔드 설정 | 설명 | 
| --- | --- | --- | 
|  메타데이터 읽기  |  read\$1metadata\$1only  |  읽기 이벤트에 대한 메타데이터만 포함합니다. 문서 필드는 포함하지 않습니다.  | 
|  무시된 사용자  |  read\$1ignore\$1users  |  읽기 이벤트에 특정 사용자를 포함하지 않습니다.  | 
|  감시된 필드  |  read\$1watched\$1fields  |  읽기 이벤트를 감시할 인덱스와 필드를 지정합니다. 감시된 필드를 추가하면 문서 액세스당 하나의 로그가 생성되므로 감사 로그의 크기가 많이 늘어날 수 있습니다. 감시된 필드는 인덱스 패턴 및 필드 패턴을 지원합니다. <pre>{<br />  "index-name-pattern": [<br />    "field-name-pattern"<br />  ],<br />  "logs*": [<br />    "message"<br />  ],<br />  "twitter": [<br />    "id",<br />    "user*"<br />  ]<br />}</pre>  | 

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


| 이름 | 백엔드 설정 | 설명 | 
| --- | --- | --- | 
|  메타데이터 쓰기  |  write\$1metadata\$1only  |  쓰기 이벤트에 대한 메타데이터만 포함합니다. 문서 필드는 포함하지 않습니다.  | 
|  로그 차이  |  write\$1log\$1diffs  |  write\$1metadata\$1only가 거짓인 경우 쓰기 이벤트 간의 차이만 포함합니다.  | 
|  무시된 사용자  |  write\$1ignore\$1users  |  쓰기 이벤트에 특정 사용자를 포함하지 않습니다.  | 
|  인덱스 감시  |  write\$1watched\$1indices  |  쓰기 이벤트를 감시할 인덱스 또는 인덱스 패턴을 지정합니다. 감시된 필드를 추가하면 문서 액세스당 하나의 로그가 생성되므로 감사 로그의 크기가 많이 늘어날 수 있습니다.  | 

## 감사 로그 예제
<a name="audit-log-example"></a>

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

### 1단계: 감사 로그 구성
<a name="audit-log-example-step1"></a>

CloudWatch Logs 로그 그룹에 감사 로그 게시를 활성화한 후 OpenSearch Dashboards 감사 로깅 페이지로 이동하여 **감사 로깅 활성화(Enable audit logging)**를 선택합니다.

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

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

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

1. **감시된 필드**의 **읽기**에서 `accounts` 인덱스의 `ssn` 및 `id-` 필드를 추가합니다.

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

### 2단계: 읽기 및 쓰기 이벤트 수행
<a name="audit-log-example-step2"></a>

1. OpenSearch 대시보드로 이동하여 **개발자 도구(Dev Tools)**를 선택하고 샘플 문서를 인덱싱합니다.

   ```
   PUT accounts/_doc/0
   {
     "ssn": "123",
     "id-": "456"
   }
   ```

1. 읽기 이벤트를 테스트하려면 다음 요청을 보냅니다.

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

### 3단계: 로그 관찰
<a name="audit-log-example-step2"></a>

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

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

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

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

1. 읽기 및 쓰기 이벤트는 해당 로그를 참조하세요. 로그가 나타나기 전 예상 지연 시간은 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 Dashboards의 **규정 준수 설정(Compliance settings)**으로 돌아가 **메타데이터 쓰기(Write metadata)**를 비활성화합니다. 특정 사용자별로 이벤트를 제외하려면 해당 사용자를 **무시된 사용자(Ignored Users)**에 추가합니다.

각 감사 로그 필드에 대한 설명은 [감사 로그 필드 참조](https://docs.opensearch.org/latest/security-plugin/audit-logs/field-reference/)를 참조하세요. 감사 로그 데이터 검색 및 분석에 대한 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [CloudWatch Logs Insights를 사용한 로그 데이터 분석](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)을 참조하세요.

## REST API를 사용하여 감사 로그 구성
<a name="audit-log-rest-api"></a>

OpenSearch Dashboards를 사용하여 감사 로그를 구성하는 것이 좋지만 세분화된 액세스 제어 REST API를 사용할 수도 있습니다. 이 섹션에는 샘플 요청이 포함되어 있습니다. REST API에 대한 전체 설명서는 [OpenSearch 설명서](https://opensearch.org/docs/latest/security/access-control/api/#audit-logs)에서 확인할 수 있습니다.

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