概要

KongのAudit Logは、Kongが行う各種操作を記録することで、システムの状態やセキュリティに関する洞察を提供します。これにより、システムの変更や問題のトラッキング、セキュリティ侵害の検出などが可能になります。

KongのAudit Logには、一般的にJSON形式で、次のような情報が記録されます。

  • リクエストやレスポンスのデータ
  • ルートやサービスへのアクセス試行
  • ユーザーまたはクライアントの認証情報
  • APIキーの使用
  • エラーまたは警告メッセージ
  • システムイベントや構成変更

https://docs.konghq.com/gateway/latest/kong-enterprise/audit-log/

機能の有効化

Kong Audit logは、Enterpriseの機能です。デフォルトではOffであって、audit_logの変更で有効無効が設定できます。

1
2
audit_log = on ## audit logging is enabled
audit_log = off ## audit logging is disabled

利用方法

例えば以下のようなアクセスがあった場合

1
curl -i -X GET http://localhost:8001/status

このアクセスはAudit logに記録され、以下のリクエストで取得できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ curl -i -X GET http://localhost:8001/audit/requests

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Type: application/json; charset=utf-8
Date: Tue, 13 Nov 2018 17:35:24 GMT
Server: kong/3.6.1.3-enterprise-edition
Transfer-Encoding: chunked
X-Kong-Admin-Request-ID: VXgMG1Y3rZKbjrzVYlSdLNPw8asVwhET

{
   "data": [
       {
           "client_ip": "127.0.0.1",
           "method": "GET",
           "path": "/status",
           "payload": null,
           "rbac_user_id": null,
           "rbac_user_name": null,
           "removed_from_payload": null,
           "request_id": "OjOcUBvt6q6XJlX3dd6BSpy1uUkTyctC",
           "request_source": null,
           "request_timestamp": 1676424547,
           "signature": null,
           "status": 200,
           "ttl": 2591997,
           "workspace": "1065b6d6-219f-4002-b3e9-334fc3eff46c"
       }
   ],
   "total": 1
}

上記の場合、rbac_user_idrbac_user_namenullになる理由は、RBACが有効になっていないからです。もしRBACがOnな状態でもう一度アクセスログを確認すると、以下のようにちゃんとrbac_user_idrbac_user_nameに値がありまして、誰がアクセスしたのかは分かります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
   "data": [
       {
           "client_ip": "127.0.0.1",
           "method": "GET",
           "path": "/status",
           "payload": null,
           "rbac_user_id": "2e959b45-0053-41cc-9c2c-5458d0964331",
           "rbac_user_name": "admin",
           "request_id": "QUtUa3RMbRLxomqcL68ilOjjl68h56xr",
           "request_source": "kong-manager",
           "request_timestamp": 1581617463,
           "signature": null,
           "status": 200,
           "ttl": 2591995,
           "workspace": "0da4afe7-44ad-4e81-a953-5d2923ce68ae"
       }
   ],
   "total": 1
}

ログローテーション

Audit Logは、KongのDBに、audit_log_record_ttlで定義して期間内に保存されます。audit_log_record_ttlを過ぎたログは自動で削除されます。このパラメータのデフォルトは30日です。

PostgreSQLは、DBにinsertがあるときに、上記の自動削除が行われます。そのため、Audit Logのエントリは上記TTL設定より長い存在する可能性もあります。特に新しいAudit Logのエントリが入ってこない時にです。