# Аудит

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

_Аудит_ Kubernetes забезпечує безпеку шляхом створення хронологічного набору записів, які документують послідовність дій у кластері. Кластер аудитує дії, що генеруються користувачами, застосунками, які використовують API Kubernetes, а також самою панеллю управління.

Аудит дозволяє адміністраторам кластера відповісти на такі питання:

- що сталося?
- коли це сталося?
- хто це ініціював?
- на чому це сталося?
- де це було помічено?
- звідки це було ініційовано?
- куди це направлялося?

<!-- body -->

Записи аудиту починають свій життєвий цикл всередині компонента [kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/). Кожен запит на кожному етапі його виконання генерує подію аудиту, яка потім передається до попередньої обробки відповідно до певної політики та записується в бекенд. Політика визначає, що буде записано, а бекенд зберігає записи. Поточні реалізації бекендів включають файли логів та вебхуки.

Кожний запит може бути записаний з асоційованим _stage_. Визначені етапи:

- `RequestReceived` — Етап для подій, що генеруються, як тільки обробник аудиту отримує запит, і до того, як він передає його вниз по ланцюжку обробників.
- `ResponseStarted` — Після надсилання заголовків відповіді, але перед відправленням тіла відповіді. Цей етап генерується лише для тривалих запитів (наприклад, watch).
- `ResponseComplete` — Тіло відповіді завершено і більше байтів не буде відправлено.
- `Panic` — Події, що генеруються при виникненні паніки.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Конфігурація <a href="/uk/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Event">події аудиту</a> відрізняється від обʼєкта API <a href="/docs/reference/generated/kubernetes-api/v1.36/#event-v1-core">Event</a>.</div>


Функція логування аудиту збільшує витрати памʼяті сервера API, оскільки для кожного запиту зберігається певний контекст, необхідний для аудитування. Витрати памʼяті залежать від конфігурації логування аудиту.

## Політика аудиту {#audit-policy}

Політика аудиту визначає правила того, які події повинні бути записані та які дані вони повинні містити. Структура обʼєкта політики аудиту визначена в групі API [`audit.k8s.io`](/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Policy). Коли подія обробляється, її порівнюють зі списком прав по черзі. Перший збіг прав встановлює _рівень аудиту_ події. Визначені рівні аудиту:

- `None` — не записувати події, які відповідають цьому правилу.
- `Metadata` — реєструвати події з метаданими (користувач, часова відмітка, ресурс, дія тощо), але не тіло запиту чи відповіді.
- `Request` — реєструвати події з метаданими та тілом запиту, але не з тілом відповіді. Це не застосовується до нересурсних запитів.
- `RequestResponse` — реєструвати події з метаданими запиту, тілом запиту та тілом відповіді. Це не застосовується до нересурсних запитів.

Ви можете передати файл з політикою до `kube-apiserver`, використовуючи прапорець `--audit-policy-file`. Якщо прапорець пропущено, жодні події не записуються. Зверніть увагу, що поле `rules` __обовʼязково__ повинно бути вказано у файлі політики аудиту. Політика з нульовою кількістю (0) прав вважається неприпустимою.

Нижче наведено приклад файлу політики аудиту:


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/audit/audit-policy.yaml" download="audit/audit-policy.yaml"><code>audit/audit-policy.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('audit-audit-policy-yaml')" title="Копіювати audit/audit-policy.yaml до буферу обміну"></img></div>
    <div class="includecode" id="audit-audit-policy-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">audit.k8s.io/v1</span><span class="w"> </span><span class="c"># Це обовʼязково.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Policy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Не генерувати події аудиту для всіх запитів на етапі RequestReceived.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">omitStages</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="s2">&#34;RequestReceived&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">rules</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Логувати зміни у вузлах на рівні RequestResponse</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">RequestResponse</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Ресурс &#34;pods&#34; не відповідає запитам на будь-який підресурс вузлів,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># що відповідає політиці RBAC.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;pods&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Логувати &#34;pods/log&#34;, &#34;pods/status&#34; на рівні Metadata</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">Metadata</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;pods/log&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;pods/status&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Не логувати запити на configmap під назвою &#34;controller-leader&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;configmaps&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">resourceNames</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;controller-leader&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Не логувати watch-запити &#34;system:kube-proxy&#34; на endpoints або services</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">users</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;system:kube-proxy&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">verbs</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;watch&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&#34;</span><span class="w"> </span><span class="c"># Основна група API</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;endpoints&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;services&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Не логувати автентифіковані запити до певних URL-шляхів, що не є ресурсами.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">userGroups</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;system:authenticated&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nonResourceURLs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="s2">&#34;/api*&#34;</span><span class="w"> </span><span class="c"># Зіставлення з шаблоном.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="s2">&#34;/version&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Логувати тіло запиту на зміни configmap у kube-system.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">Request</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&#34;</span><span class="w"> </span><span class="c"># Основна група API</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;configmaps&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># Це правило застосовується тільки до ресурсів в просторі імен &#34;kube-system&#34;.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># Порожній рядок &#34;&#34; можна використовувати для вибору ресурсів без простору імен.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">namespaces</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;kube-system&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Логувати зміни configmap і secret у всіх інших просторах імен на рівні Metadata.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">Metadata</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&#34;</span><span class="w"> </span><span class="c"># Основна група API</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;secrets&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;configmaps&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Логувати всі інші ресурси в основній і розширюваній групах на рівні Request.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">Request</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;&#34;</span><span class="w"> </span><span class="c"># Основна група API</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">group</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;extensions&#34;</span><span class="w"> </span><span class="c"># Версія групи НЕ повинна включатися.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Загальне правило для логування всіх інших запитів на рівні Metadata.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">Metadata</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># Довгострокові запити, такі як watches, які підпадають під це правило,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># не генерують подію аудиту на етапі RequestReceived.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">omitStages</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;RequestReceived&#34;</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

Ви можете використовувати мінімальну політику аудиту для логування всіх запитів на рівні `Metadata`:

```yaml
# Записати всі запити на рівні Metadata.
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
```

Якщо ви створюєте власний профіль аудиту, ви можете скористатися профілем аудиту для Google Container-Optimized OS як вихідною точкою. Ви можете перевірити сценарій [configure-helper.sh](https://github.com/kubernetes/kubernetes/blob/master/cluster/gce/gci/configure-helper.sh), який генерує файл політики аудиту. Більшість файлу політики аудиту можна побачити, дивлячись безпосередньо на цей сценарій.

Ви також можете звернутися до [посилання на конфігурацію `Policy`](/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Policy) для отримання деталей про визначені поля.

## Бекенди аудиту {#audit-backends}

Події аудиту зберігаються в зовнішньому сховищі за допомогою бекендів аудиту. Стандартно `kube-apiserver` надає два бекенди:

- Файловий бекенд, який записує події у файлову систему.
- Бекенд Webhook, який відправляє події на зовнішній HTTP API.

У всіх випадках події аудиту слідують структурі, визначеній API Kubernetes в групі API [`audit.k8s.io`](/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Event).


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4><p>У випадку патчів тіло запиту є масивом JSON з операціями патча, а не обʼєктом JSON з відповідним обʼєктом API Kubernetes. Наприклад, наступне тіло запиту є допустимим запитом на накладання патча до <code>/apis/batch/v1/namespaces/some-namespace/jobs/some-job-name</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">[</span>
</span></span><span class="line"><span class="cl">  <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;op&#34;</span><span class="p">:</span> <span class="s2">&#34;replace&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;path&#34;</span><span class="p">:</span> <span class="s2">&#34;/spec/parallelism&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;value&#34;</span><span class="p">:</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;op&#34;</span><span class="p">:</span> <span class="s2">&#34;remove&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;path&#34;</span><span class="p">:</span> <span class="s2">&#34;/spec/template/spec/containers/0/terminationMessagePolicy&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span></code></pre></div></div>


### Бекенд логів {#log-backend}

Бекенд логів записує події аудиту у файл у форматі [JSONlines](https://jsonlines.org/). Ви можете налаштувати бекенд логів за допомогою наступних прапорців `kube-apiserver`:

- `--audit-log-path` вказує шлях до файлу логу, який бекенд логів використовує для запису подій аудиту. Відсутність цього прапорця вимикає бекенд логів; `-` означає стандартний вивід
- `--audit-log-maxage` визначає максимальну кількість днів для зберігання старих файлів логів аудиту
- `--audit-log-maxbackup` визначає максимальну кількість файлів логів аудиту для зберігання
- `--audit-log-maxsize` визначає максимальний розмір в мегабайтах файлу логів аудиту до його ротації

Якщо панель управління вашого кластера працює з `kube-apiserver` як з Pod, не забудьте змонтувати `hostPath` до місця розташування файлу політики та файлу логів, щоб записи аудиту були збережені. Наприклад:

```yaml
  - --audit-policy-file=/etc/kubernetes/audit-policy.yaml
  - --audit-log-path=/var/log/kubernetes/audit/audit.log
```

потім змонтуйте томи:

```yaml
...
volumeMounts:
  - mountPath: /etc/kubernetes/audit-policy.yaml
    name: audit
    readOnly: true
  - mountPath: /var/log/kubernetes/audit/
    name: audit-log
    readOnly: false
```

і нарешті налаштуйте `hostPath`:

```yaml
...
volumes:
- name: audit
  hostPath:
    path: /etc/kubernetes/audit-policy.yaml
    type: File

- name: audit-log
  hostPath:
    path: /var/log/kubernetes/audit/
    type: DirectoryOrCreate
```

### Бекенд Webhook {#webhook-backend}

Бекенд аудиту webhook надсилає події аудиту до віддаленого веб-API, яке вважається формою Kubernetes API, включаючи засоби автентифікації. Ви можете налаштувати бекенд webhook за допомогою наступних прапорців `kube-apiserver`:

- `--audit-webhook-config-file` вказує шлях до файлу з конфігурацією webhook. Конфігурація webhook фактично є спеціалізованим [kubeconfig](/docs/tasks/access-application-cluster/configure-access-multiple-clusters).
- `--audit-webhook-initial-backoff` вказує час очікування після першого невдалого запиту перед повторною спробою. Наступні запити повторюються з експоненційною затримкою.

Файл конфігурації webhook використовує формат kubeconfig для вказування віддаленої адреси служби та облікових даних, які використовуються для підключення до неї.

## Пакетна обробка подій {#batching}

Обидва типи бекенд систем, як `log`, так і `webhook`, підтримують пакетну обробку. Нижче наведено перелік доступних прапорців для кожного бекенду. Стандартно пакетна обробка __увімкнена__ для `webhook` і __вимкнена__ для `log`.

<ul class="nav nav-tabs" id="tabs-tab-with-md" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-tab-with-md-0" role="tab" aria-controls="tabs-tab-with-md-0" aria-selected="true">webhook</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-tab-with-md-1" role="tab" aria-controls="tabs-tab-with-md-1">log</a></li></ul>

<div class="tab-content" id="tabs-tab-with-md-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-tab-with-md-0" role="tabpanel" aria-labelledby="tabs-tab-with-md-0-tab" tabindex="tab-with-md"><ul>
<li><code>--audit-webhook-mode</code> визначає стратегію буферизації. Одна з наступних:
<ul>
<li><code>batch</code> — буферизувати події та асинхронно обробляти їх пакетами. Це стандартне значення для <code>webhook</code>.</li>
<li><code>blocking</code> — блокувати відповіді сервера API на обробці кожної окремої події.</li>
<li><code>blocking-strict</code> — те саме, що й <code>blocking</code>, але коли відбувається збій під час логування аудиту на етапі RequestReceived, весь запит до kube-apiserver зазнає збою.</li>
</ul>
</li>
</ul>
<p>Наступні прапорці використовуються тільки в режимі <code>batch</code>:</p>
<ul>
<li><code>--audit-webhook-batch-buffer-size</code> визначає кількість подій для буферизації перед пакетною обробкою. Якщо швидкість надходження подій переповнює буфер, події відкидаються. Стандартне значення — 10000.</li>
<li><code>--audit-webhook-batch-max-size</code> визначає максимальну кількість подій в одному пакеті. Стандартне значення — 400.</li>
<li><code>--audit-webhook-batch-max-wait</code> визначає максимальний час очікування перед безумовною буферизацією подій у черзі.</li>
<li><code>--audit-webhook-batch-throttle-enable</code> визначає, чи увімкнено тротлінг пакетів. Стандартно тротлінг увімкнено.</li>
<li><code>--audit-webhook-batch-throttle-qps</code> визначає максимальну середню кількість пакетів, що генеруються за секунду. Стандартне значення — 10.</li>
<li><code>--audit-webhook-batch-throttle-burst</code> визначає максимальну кількість пакетів, які генеруються в той же момент, якщо дозволений QPS раніше не використовувався повністю. Стандартне значення — 15.</li>
</ul>
</div><div class="tab-body tab-pane fade"
        id="tabs-tab-with-md-1" role="tabpanel" aria-labelledby="tabs-tab-with-md-1-tab" tabindex="tab-with-md"><ul>
<li><code>--audit-log-mode</code> визначає стратегію буферизації. Одна з наступних:
<ul>
<li><code>batch</code> — буферизувати події та асинхронно обробляти їх пакетами. Пакетна обробка не рекомендується для бекенду <code>log</code>.</li>
<li><code>blocking</code> — блокувати відповіді сервера API при обробці кожної окремої події. Це стандартний режим для бекенду <code>log</code>.</li>
<li><code>blocking-strict</code> — те ж саме, що і блокування, але при збої під час логування аудиту на етапі RequestReceived, весь запит до kube-apiserver зазнає невдачі.</li>
</ul>
</li>
</ul>
<p>Наступні прапорці використовуються тільки в режимі <code>batch</code> (стандартно для бекенду <code>log</code> пакетна обробка <strong>вимкнена</strong>, і коли пакетну обробку вимкнено, всі прапорці, повʼязані з пакетною обробкою, ігноруються):</p>
<ul>
<li><code>--audit-log-batch-buffer-size</code> визначає кількість подій для буферизації перед пакетною обробкою. Якщо кількість подій, що надходять, переповнює буфер, події буде відкинуто.</li>
<li><code>--audit-log-batch-max-size</code> визначає максимальну кількість подій в одному пакеті.</li>
<li><code>--audit-log-batch-max-wait</code> визначає максимальний час очікування перед безумовною обробкою подій у черзі.</li>
<li><code>--audit-log-batch-throttle-enable</code> визначає, чи увімкнено тротлінг пакетної обробки.</li>
<li><code>--audit-log-batch-throttle-qps</code> визначає максимальну середню кількість пакетів, що генеруються за секунду.</li>
<li><code>--audit-log-batch-throttle-burst</code> визначає максимальну кількість пакетів, згенерованих за один момент часу, якщо раніше було недовикористано дозволений QPS.</li>
</ul>
</div></div>


## Налаштування параметрів {#parameter-tuning}

Параметри повинні бути встановлені з урахуванням навантаження на API-сервер.

Наприклад, якщо kube-apiserver отримує 100 запитів кожну секунду, і кожен запит проходить аудит лише на етапах `ResponseStarted` та `ResponseComplete`, вам слід розрахувати приблизно 200 подій аудиту, які генеруються кожну секунду. Припускаючи, що в пакеті може бути до 100 подій, вам слід встановити рівень обмеження принаймні у 2 запити на секунду. Припускаючи, що система може потребувати до 5 секунд для запису подій, вам слід встановити розмір буфера для зберігання подій протягом до 5 секунд; це означає: 10 пакетів або 1000 подій.

Проте в більшості випадків стандартні значення параметрів повинні бути достатніми, і вам не потрібно хвилюватися про їх ручне встановлення. Ви можете переглянути наступні метрики Prometheus, які експонує kube-apiserver, а також логи, щоб контролювати стан підсистеми аудиту.

- Метрика `apiserver_audit_event_total` містить загальну кількість експортованих подій аудиту.
- Метрика `apiserver_audit_error_total` містить загальну кількість подій, які були втрачені через помилку під час експортування.

### Обмеження розміру запису в лозі {#truncate}

Обидва бекенди і логів, і webhook підтримують обмеження розміру подій, які записуються. Наприклад, ось список прапорців, доступних для бекенду логів:

- `audit-log-truncate-enabled` визначає, чи ввімкнене обрізання подій та пакетів.
- `audit-log-truncate-max-batch-size` максимальний розмір у байтах пакета, який надсилається до бекенду.
- `audit-log-truncate-max-event-size` максимальний розмір у байтах аудитної події, яка надсилається до бекенду.

Типово обрізання вимкнено як у `webhook`, так і у `log`. Адміністратор кластера повинен встановити `audit-log-truncate-enabled` або `audit-webhook-truncate-enabled`, щоб увімкнути цю функцію.

## Що далі

- Дізнайтеся про [анотації аудиту мутуючих вебхуків](/docs/reference/access-authn-authz/extensible-admission-controllers/#mutating-webhook-auditing-annotations).
- Дізнайтеся більше про типи ресурсів [`Event`](/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Event) та [`Policy`](/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Policy) з Довідки налаштування аудиту.
