Skip to content
ეს გვერდი შეიქმნა და ითარგმნა ხელოვნური ინტელექტის დახმარებით. თუ შეამჩნევთ უზუსტობას, გთხოვთ, დაგვეხმარეთ გაუმჯობესებაში. GitHub-ზე რედაქტირება

აუდიტის ჟურნალი

PRX მოიცავს ჩაშენებულ აუდიტის ჟურნალირების სისტემას, რომელიც ყველა უსაფრთხოებასთან დაკავშირებულ ოპერაციას აღრიცხავს. AuditLogger თვალყურს ადევნებს ვინ რა გააკეთა, როდის და წარმატებით თუ არა -- რაც ხელშეუხებლობის დამადასტურებელ კვალს უზრუნველყოფს შესაბამისობის, ინციდენტებზე რეაგირებისა და სასამართლო-ტექნიკური ანალიზისთვის.

მიმოხილვა

აუდიტის სისტემა სტრუქტურირებულ მოვლენებს იჭერს ყოველი უსაფრთხოებისთვის მგრძნობიარე მოქმედებისთვის:

  • ავთენტიფიკაციის მცდელობები (წარმატებული და წარუმატებელი)
  • ავტორიზაციის გადაწყვეტილებები (ნებართვა და უარყოფა)
  • კონფიგურაციის ცვლილებები
  • ინსტრუმენტების შესრულებები და სენდბოქსის მოვლენები
  • მეხსიერებაზე წვდომა და მოდიფიკაცია
  • არხების დაკავშირება და გათიშვა
  • ევოლუციის წინადადებები და გამოყენებები
  • დანამატების სიცოცხლის ციკლის მოვლენები

ყოველი აუდიტის მოვლენა შეიცავს დროის ნიშანს, მოქმედი პირის იდენტობას, მოქმედების აღწერას, სამიზნე რესურსსა და შედეგს.

აუდიტის მოვლენის სტრუქტურა

ყოველი აუდიტის მოვლენა სტრუქტურირებული ჩანაწერია შემდეგი ველებით:

ველიტიპიაღწერა
timestampDateTime<Utc>მოვლენის დრო (UTC, ნანოწამის სიზუსტით)
event_idStringმოვლენის უნიკალური იდენტიფიკატორი (UUIDv7, დროით დალაგებული)
actorActorვინ შეასრულა მოქმედება (მომხმარებელი, აგენტი, სისტემა ან დანამატი)
actionStringრა შესრულდა (მაგ., auth.login, tool.execute, config.update)
targetStringრესურსი, რომელზეც იმოქმედეს (მაგ., სესიის ID, კონფიგურაციის გასაღები, ფაილის ბილიკი)
outcomeOutcomeშედეგი: success, failure ან denied
metadataMap<String, Value>დამატებითი კონტექსტი (IP მისამართი, უარყოფის მიზეზი და სხვ.)
session_idOption<String>ასოცირებული აგენტის სესია, ასეთის არსებობისას
severitySeverityმოვლენის სიმწვავე: info, warning, critical

მოქმედი პირის ტიპები

მოქმედი პირის ტიპიაღწერამაგალითი
userადამიანი მომხმარებელი, იდენტიფიცირებული არხით ან API ავთენტიფიკაციითuser:telegram:123456789
agentთავად PRX აგენტიagent:default
systemშიდა სისტემური პროცესები (cron, ევოლუცია)system:evolution
pluginWASM დანამატიplugin:my-plugin:v1.2.0

მოქმედების კატეგორიები

მოქმედებები წერტილით გამოყოფილი სახელთა სივრცის კონვენციას მიჰყვება:

კატეგორიამოქმედებებისიმწვავე
auth.*auth.login, auth.logout, auth.token_refresh, auth.pairinginfo / warning
authz.*authz.allow, authz.deny, authz.policy_checkinfo / warning
config.*config.update, config.reload, config.hot_reloadwarning
tool.*tool.execute, tool.sandbox_escape_attempt, tool.timeoutinfo / critical
memory.*memory.store, memory.recall, memory.delete, memory.compactinfo
channel.*channel.connect, channel.disconnect, channel.errorinfo / warning
evolution.*evolution.propose, evolution.apply, evolution.rollbackwarning / critical
plugin.*plugin.load, plugin.unload, plugin.error, plugin.permission_deniedinfo / warning
session.*session.create, session.terminate, session.timeoutinfo

კონფიგურაცია

toml
[security.audit]
enabled = true
min_severity = "info"           # ჟურნალირების მინიმალური სიმწვავე: "info", "warning", "critical"

[security.audit.file]
enabled = true
path = "~/.local/share/openprx/audit.log"
format = "jsonl"                # "jsonl" ან "csv"
max_size_mb = 100               # როტაცია ფაილის ამ ზომის გადაჭარბებისას
max_files = 10                  # 10-მდე როტაციული ფაილის შენახვა
compress_rotated = true         # როტაციული ფაილების gzip კომპრესია

[security.audit.database]
enabled = false
backend = "sqlite"              # "sqlite" ან "postgres"
path = "~/.local/share/openprx/audit.db"
retention_days = 90             # 90 დღეზე ძველი მოვლენების ავტო-წაშლა

კონფიგურაციის მითითება

ველიტიპინაგულისხმევიაღწერა
enabledbooltrueაუდიტის ჟურნალირების გლობალური ჩართვა ან გამორთვა
min_severityString"info"ჩაწერის მინიმალური სიმწვავის დონე
file.enabledbooltrueაუდიტის მოვლენების ჟურნალის ფაილში ჩაწერა
file.pathString"~/.local/share/openprx/audit.log"აუდიტის ჟურნალის ფაილის ბილიკი
file.formatString"jsonl"ჟურნალის ფორმატი: "jsonl" (ერთი JSON ობიექტი თითო ხაზზე) ან "csv"
file.max_size_mbu64100მაქსიმალური ფაილის ზომა როტაციამდე (MB)
file.max_filesu3210შესანახი როტაციული ფაილების რაოდენობა
file.compress_rotatedbooltrueროტაციული ჟურნალის ფაილების gzip კომპრესია
database.enabledboolfalseაუდიტის მოვლენების მონაცემთა ბაზაში ჩაწერა
database.backendString"sqlite"მონაცემთა ბაზის ბექენდი: "sqlite" ან "postgres"
database.pathString""მონაცემთა ბაზის ბილიკი (SQLite) ან კავშირის URL (PostgreSQL)
database.retention_daysu6490N დღეზე ძველი მოვლენების ავტო-წაშლა. 0 = სამუდამოდ შენახვა

შენახვის ბექენდები

ფაილი (JSONL)

ნაგულისხმევი ბექენდი ერთ JSON ობიექტს წერს თითო ხაზზე ჟურნალის ფაილში. ეს ფორმატი თავსებადია სტანდარტულ ჟურნალის ანალიზის ინსტრუმენტებთან (jq, grep, Elasticsearch ingest).

ჟურნალის ჩანაწერის მაგალითი:

json
{
  "timestamp": "2026-03-21T10:15:30.123456789Z",
  "event_id": "019520a8-1234-7000-8000-000000000001",
  "actor": {"type": "user", "id": "user:telegram:123456789"},
  "action": "tool.execute",
  "target": "shell:ls -la /tmp",
  "outcome": "success",
  "metadata": {"sandbox": "bubblewrap", "duration_ms": 45},
  "session_id": "sess_abc123",
  "severity": "info"
}

მონაცემთა ბაზა (SQLite / PostgreSQL)

მონაცემთა ბაზის ბექენდი მოვლენებს სტრუქტურირებულ ცხრილში ინახავს ინდექსებით timestamp, actor, action და severity ველებზე ეფექტური მოთხოვნებისთვის.

აუდიტის კვალის მოთხოვნები

CLI მოთხოვნები

bash
# ბოლო აუდიტის მოვლენების ნახვა
prx audit log --tail 50

# მოქმედების კატეგორიით ფილტრაცია
prx audit log --action "auth.*" --last 24h

# სიმწვავით ფილტრაცია
prx audit log --severity critical --last 7d

# მოქმედი პირით ფილტრაცია
prx audit log --actor "user:telegram:123456789"

# JSON-ში ექსპორტი
prx audit log --last 30d --format json > audit_export.json

მონაცემთა ბაზის მოთხოვნები

მონაცემთა ბაზის ბექენდის გამოყენებისას, SQL-ით პირდაპირ მოთხოვნა შეგიძლიათ:

sql
-- წარუმატებელი ავთენტიფიკაციის მცდელობები ბოლო 24 საათში
SELECT * FROM audit_events
WHERE action LIKE 'auth.%'
  AND outcome = 'failure'
  AND timestamp > datetime('now', '-24 hours')
ORDER BY timestamp DESC;

-- კონკრეტული მომხმარებლის ინსტრუმენტის შესრულებები
SELECT action, target, outcome, timestamp
FROM audit_events
WHERE actor_id = 'user:telegram:123456789'
  AND action LIKE 'tool.%'
ORDER BY timestamp DESC
LIMIT 100;

-- კრიტიკული მოვლენების შეჯამება
SELECT action, COUNT(*) as count
FROM audit_events
WHERE severity = 'critical'
  AND timestamp > datetime('now', '-7 days')
GROUP BY action
ORDER BY count DESC;

შესაბამისობა

აუდიტის ჟურნალირების სისტემა შესაბამისობის მოთხოვნების მხარდასაჭერადაა შექმნილი:

  • უცვლელობა -- ჟურნალის ფაილები მხოლოდ-მიმატების რეჟიმშია; როტაციული ფაილების მთლიანობა საკონტროლო ჯამებით მოწმდება
  • სრულყოფილება -- ყველა უსაფრთხოებასთან დაკავშირებული ოპერაცია ნაგულისხმევად info დონეზე აღირიცხება
  • შენარჩუნება -- კონფიგურირებადი შენახვის ვადები ავტომატური როტაციითა და წაშლით
  • უარყოფის შეუძლებლობა -- ყოველი მოვლენა მოქმედი პირის იდენტობასა და დროის ნიშანს შეიცავს
  • ხელმისაწვდომობა -- ორმაგი გამოტანა (ფაილი + მონაცემთა ბაზა) მოვლენების დაკარგვას გამორიცხავს ერთი ბექენდის წარუმატებლობისას

რეკომენდებული პარამეტრები შესაბამისობისთვის

toml
[security.audit]
enabled = true
min_severity = "info"

[security.audit.file]
enabled = true
format = "jsonl"
max_size_mb = 500
max_files = 50
compress_rotated = true

[security.audit.database]
enabled = true
backend = "postgres"
path = "postgresql://audit_user:password@localhost/prx_audit"
retention_days = 365

წარმადობა

აუდიტის ჟურნალი მინიმალური ზედნადებისთვისაა შექმნილი:

  • მოვლენები ასინქრონულად იწერება შემოსაზღვრული არხის მეშვეობით (ნაგულისხმევი ტევადობა: 10,000 მოვლენა)
  • ფაილში ჩაწერა ბუფერირებულია და პერიოდულად იფლაშება (ყოველ 1 წამში ან ყოველ 100 მოვლენაზე)
  • მონაცემთა ბაზაში ჩაწერა ჯგუფურადაა (ნაგულისხმევი ჯგუფის ზომა: 50 მოვლენა)
  • თუ მოვლენების არხი სავსეა, მოვლენები გაფრთხილების მთვლელით იგდება (აგენტის ძირითად ციკლს არასდროს ბლოკავს)

შეზღუდვები

  • ფაილის ბექენდი ჩაშენებულ ხელყოფის აღმოჩენას არ უზრუნველყოფს (მაღალი უსაფრთხოების განთავსებებისთვის გარე მთლიანობის მონიტორინგი განიხილეთ)
  • დანამატის კოდის აუდიტის მოვლენები ჰოსტის მიერ აღირიცხება; დანამატებს აუდიტის სისტემის გვერდის ავლა არ შეუძლიათ
  • CSV ფორმატი ჩადგმულ მეტამონაცემთა ველებს არ უჭერს მხარს (სრული სიზუსტისთვის JSONL გამოიყენეთ)
  • მონაცემთა ბაზის შენახვის გასუფთავება საათში ერთხელ სრულდება; მოვლენები კონფიგურირებული შენახვის ვადაზე ოდნავ მეტხანს შეიძლება შენარჩუნდეს

დაკავშირებული გვერდები

Released under the Apache-2.0 License.