監控 Amazon OpenSearch 服務中的審核日誌 - Amazon OpenSearch 服務

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

監控 Amazon OpenSearch 服務中的審核日誌

如果您的 Amazon OpenSearch 服務網域使用精細的存取控制,您可以為資料啟用稽核日誌。稽核記錄具有高度可自訂性,可讓您追蹤 OpenSearch叢集上的使用者活動,包括驗證成功與失敗、要求 OpenSearch、索引變更以及傳入的搜尋查詢。預設設定會追蹤一組常用的使用者動作,但我們建議您根據您的確切需求量身打造設定。

就像OpenSearch 應用程式記錄檔和慢速記錄檔一樣, OpenSearch Service 會將稽核記錄發佈至 CloudWatch 記錄 如果啟用,則適用標準 CloudWatch 定價

注意

若要啟用稽核記錄,您的使用者角security_manager色必須對應至可讓您存取 OpenSearch plugins/_security REST API 的角色。如需進一步了解,請參閱 修改主要使用者

限制

稽核日誌具有下列限制:

  • 稽核日誌不包含被目的地網域存取政策拒絕的跨叢集搜尋請求。

  • 每個稽核日誌訊息的大小上限為 10,000 個字元。如果稽核日誌訊息超過此限制,就會被截斷。

啟用稽核日誌

啟用稽核日誌分為兩個步驟。首先,您將網域設定為將稽核記錄發佈到 CloudWatch 記錄檔。然後,您可以在 OpenSearch 儀表板中啟用稽核記錄,並對其進行設定以符合您的需求。

重要

如果您在執行這些步驟時遇到錯誤,請參閱無法啟用稽核日誌,瞭解故障診斷資訊。

步驟 1:啟用稽核日誌並設定存取政策

以下步驟說明如何使用主控台啟用稽核日誌。您也可以使用OpenSearch 服務 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 Service Console 中啟用稽核記錄之後,您還必須在 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 層和傳輸層。

  • 其餘層涵蓋了與 HTTP 客戶端,如捲曲,日誌信息, OpenSearch 儀表板,Java 高級 REST 客戶端,Python 請求庫,到達集群的所有 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 請求以索引文件,您可能會在稽核日誌中看到下列幾行:

  • REST 層上的 AUTHENTICATED (身分驗證)

  • 傳輸層上的 GRANTED_PRIVILEGE (授權)

  • COMPLIANCE_DOC_WRITE (文件寫入到索引)

稽核日誌設定

稽核日誌有許多組態選項。

一般設定

使用一般設定可啟用或停用個別類別或整個層。我們強烈建議您將 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 為 false,則只包括寫入事件之間的差異。

已忽略的使用者

write_ignore_users

不包括寫入事件的特定使用者。

監視指數

write_watched_indices

指定針對寫入事件而監視的索引或索引模式。新增監視的欄位會依據每個文件存取產生一個日誌,這會大幅增加稽核日誌的大小。

稽核日誌範例

本節包含索引的所有讀取和寫入事件的範例組態、搜尋請求以及產生的稽核日誌。

步驟 1:設定稽核日誌

啟用將稽核記錄發佈至記 CloudWatch 錄群組後,請瀏覽至 [ OpenSearch 儀表板稽核記錄] 頁面,然後選擇 [啟用稽核記錄]。

  1. General Settings (一般設定) 中,選擇 Configure (設定),並確保 REST layer (REST 層) 已啟用。

  2. Compliance Settings (合規設定) 中,選擇 Configure (設定)。

  3. Write (寫入) 下面的 Watched Fields (監視欄位) 中,將所有寫入事件的 accounts 新增至此索引。

  4. Read (讀取) 下面的 Watched Fields (監視欄位) 中,新增 accounts 索引的 ssnid- 欄位:

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

步驟 2:執行讀取和寫入事件

  1. 導覽至 [ OpenSearch 儀表板]、選擇 [開發工具],並索引範例文件:

    PUT accounts/_doc/0 { "ssn": "123", "id-": "456" }
  2. 若要測試讀取事件,請傳送下列請求:

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

步驟 3:觀察日誌

  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

  2. 在導覽窗格中,選擇 Log groups (日誌群組)。

  3. 選擇您在啟用稽核日誌時指定的日誌群組。在記錄群組中, OpenSearch Service 會為網域中的每個節點建立記錄資料流。

  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 日誌洞察分析 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" ] } }