# Авторизація

> Деталі механізмів авторизації Kubernetes і підтримувані режими авторизації.

---

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

---

<!-- overview -->

Авторизація в Kubernetes відбувається після [автентифікації](/docs/reference/access-authn-authz/authentication/). Зазвичай клієнт, що робить запит, має бути автентифікований (увійти в систему), перш ніж його запит може бути дозволений; однак, Kubernetes також дозволяє анонімні запити за деяких обставин.

Для огляду того, як авторизація вписується в ширший контекст контролю доступу до API, читайте [Контроль доступу до Kubernetes API](/docs/concepts/security/controlling-access/).

<!-- body -->

## Вердикти авторизації {#determine-whether-a-request-is-allowed-or-denied}

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

Усі частини запиту до API повинні бути дозволені деяким механізмом авторизації, щоб він міг продовжити виконання. Іншими словами: типово доступ заборонений.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4><p>Контроль доступу і політики, що залежать від конкретних полів конкретних видів обʼєктів, обробляються <a class='glossary-tooltip' title='Фрагмент коду, який перехоплює запити до сервера API Kubernetes перед збереженням обʼєкта.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/reference/access-authn-authz/admission-controllers/' target='_blank' aria-label='контролерами допуску'>контролерами допуску</a>.</p>
<p>Контроль допуску в Kubernetes відбувається після завершення авторизації (і, отже, тільки коли рішення про авторизацію було дозволити запит).</p>
</div>


Коли налаштовано кілька [модулів авторизації](#authorization-modules), кожен перевіряється по черзі. Якщо будь-який авторизатор _схвалює_ або _відхиляє_ запит, це рішення негайно повертається і жоден інший авторизатор не перевіряється. Якщо всі модулі не мають _думки_ щодо запиту, то запит відхиляється. Загальний вердикт "відхилено" означає, що API-сервер відхиляє запит і відповідає зі статусом HTTP 403 (Forbidden).

## Атрибути запиту, що використовуються для авторизації {#request-attributes-used-for-authorization}

Kubernetes розглядає тільки наступні атрибути запиту до API:

* **user** — Рядок `user`, наданий під час автентифікації.
* **group** — Список імен груп, до яких належить автентифікований користувач.
* **extra** — Map довільних рядкових ключів з рядковими значеннями, надана шаром автентифікації.
* **API** — Вказує, чи є запит запитом на ресурс API.
* **Request path** — Шлях до різних нересурсних точок доступу, таких як `/api` або `/healthz`.
* **API request verb** — Дієслова API, такі як `get`, `list`, `create`, `update`, `patch`, `watch`, `delete` і `deletecollection`, використовуються для запитів до ресурсів. Щоб визначити дієслово запиту для точки доступу API ресурсу, дивіться [дієслова запитів та авторизація](#determine-the-request-verb).
* **HTTP request verb** — Методи HTTP в нижньому регістрі, такі як `get`, `post`, `put` і `delete`, використовуються для нересурсних запитів.
* **Resource** — Ідентифікатор або імʼя ресурсу, до якого здійснюється доступ (тільки для запитів до ресурсів). Для запитів до ресурсів, що використовують дієслова `get`, `update`, `patch` і `delete`, ви повинні надати імʼя ресурсу.
* **Subresource** — Субесурс, до якого здійснюється доступ (тільки для запитів до ресурсів). Це може бути стандартний субресурс (наприклад, `status` або `scale`) або синтетичний субресурс, який використовується для детальної авторизації.
* **Namespace** — Простір імен обʼєкта, до якого здійснюється доступ (тільки для запитів до ресурсів у просторі імен).
* **API group** — <a class='glossary-tooltip' title='Набір повʼязаних шляхів в API Kubernetes.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/overview/kubernetes-api/#api-groups-and-versioning' target='_blank' aria-label='Група API'>Група API</a>, до якої здійснюється доступ (тільки для запитів до ресурсів). Порожній рядок позначає _основну_ [групу API](/docs/reference/using-api/#api-groups).

### Дієслова запиту та авторизація {#determine-the-request-verb}

#### Нересурсні запити {#request-verb-non-resource}

Запити до точок доступу, відмінних від `/api/v1/...` або `/apis/<group>/<version>/...`, вважаються _нересурсними запитами_ та використовують метод HTTP як дієслово в нижньому регістрі. Наприклад, виконання запиту `GET` за допомогою HTTP до точок доступу, таких як `/api` або `/healthz`, буде використовувати **get** як дієслово.

#### Ресурсні запити {#request-verb-resource}

Щоб визначити дієслово запиту для точки доступу API ресурсу, Kubernetes показує використаний HTTP метод і розглядає, чи діє запит на індивідуальний ресурс чи на колекцію ресурсів:

HTTP метод     | дієслово запиту
--------------|---------------
`POST`        | **create**
`GET`, `HEAD` | **get** (для індивідуальних ресурсів), **list** (для колекцій, включаючи повний вміст обʼєктів), **watch** (для спостереження за індивідуальним ресурсом або колекцією ресурсів)
`PUT`         | **update**
`PATCH`       | **patch**
`DELETE`      | **delete** (для індивідуальних ресурсів), **deletecollection** (для колекцій)

<div class="alert alert-caution" role="note"><h4 class="alert-heading">Увага:</h4>Дієслова <strong>get</strong>, <strong>list</strong> та <strong>watch</strong> можуть повертати повні деталі ресурсу. В плані доступу до повернених даних вони є еквівалентними. Наприклад, <strong>list</strong> для <code>secrets</code> розкриє атрибути <strong>data</strong> будь-яких повернених ресурсів.</div>


Іноді Kubernetes перевіряє авторизацію для додаткових дозволів, використовуючи спеціалізовані дієслова. Наприклад:

* Особливі випадки [автентифікації](/docs/reference/access-authn-authz/authentication/)
  * Дієслово **impersonate** для `users`, `groups`, і `serviceaccounts` в основній групі API, та `userextras` у групі API `authentication.k8s.io`.
* [Авторизація CertificateSigningRequests](/docs/reference/access-authn-authz/certificate-signing-requests/#authorization)
  * Дієслово **approve** для CertificateSigningRequests, та **update** для переглядів наявних схвалень
* [RBAC](/docs/reference/access-authn-authz/rbac/#privilege-escalation-prevention-and-bootstrapping)
  * Дієслова **bind** та **escalate** для ресурсів `roles` та `clusterroles` у групі API `rbac.authorization.k8s.io`.
* [Динамічне виділення ресурсів (DRA)](/docs/concepts/scheduling-eviction/dynamic-resource-allocation/)
  * Синтетичні субресурси, такі як `resourceclaims/binding` та `resourceclaims/driver` у групі API `resource.k8s.io`.
  * Дієслова, що враховують вузол, такі як `associated-node:update`, `associated-node:patch`, `arbitrary-node:update` та `arbitrary-node:patch` для оновлень драйвера DRA `resourceclaims/status`.

## Контекст авторизації {#authorization-context}

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

## Режими авторизації {#authorization-modules}

API-сервер Kubernetes може авторизувати запит, використовуючи один з декількох режимів авторизації:

`AlwaysAllow`
: Цей режим дозволяє всі запити, що несе [ризики для безпеки](#warning-always-allow). Використовуйте цей режим авторизації тільки якщо вам не потрібна авторизація для ваших запитів до API (наприклад, для тестування).

`AlwaysDeny`
: Цей режим блокує всі запити. Використовуйте цей режим авторизації тільки для тестування.

`ABAC` ([контроль доступу на основі атрибутів](/docs/reference/access-authn-authz/abac/))
: Режим ABAC в Kubernetes визначає парадигму управління доступом, згідно з якою права доступу надаються користувачам за допомогою політик, які обʼєднують атрибути разом. Політики можуть використовувати будь-який тип атрибутів (атрибути користувача, атрибути ресурсу, обʼєкта, середовища тощо).

`RBAC` ([контроль доступу на основі ролей](/docs/reference/access-authn-authz/rbac/))
: Kubernetes RBAC — це метод регулювання доступу до компʼютерних або мережевих ресурсів на основі ролей окремих користувачів в організації. У цьому контексті доступ — це можливість окремого користувача виконувати певне завдання, наприклад, переглядати, створювати або змінювати файл. В цьому режимі Kubernetes використовує групу API `rbac.authorization.k8s.io` для прийняття рішень щодо авторизації, що дозволяє вам динамічно налаштовувати політики дозволів через API Kubernetes.

`Node`
: Спеціальний режим авторизації, який надає дозволи для kubeletʼів на основі запланованих до запуску Podʼів. Щоб дізнатися більше про режим авторизації вузла, див. [Авторизація вузла](/docs/reference/access-authn-authz/node/).

`Webhook`
: Kubernetes [режим webhook](/docs/reference/access-authn-authz/webhook/) для авторизації робить синхронний HTTP-виклик, блокуючи запит до тих пір, поки віддалений HTTP-сервіс не відповість на нього. Ви можете написати власне програмне забезпечення для обробки виклику або використовувати рішення з екосистеми.

<a id="warning-always-allow" />

<div class="alert alert-danger" role="note"><h4 class="alert-heading">Попередження:</h4><p>Увімкнення режиму <code>AlwaysAllow</code> обходить авторизацію; не використовуйте це в кластері, де ви не довіряєте <strong>всім</strong> потенційним клієнтам API, включаючи робочі навантаження, які ви запускаєте.</p>
<p>Механізми авторизації зазвичай повертають результат <em>deny</em> або <em>no opinion</em>; для більш детальної інформації дивіться <a href="#determine-whether-a-request-is-allowed-or-denied">рішення авторизації</a>. Активування режиму <code>AlwaysAllow</code> означає, що якщо всі інші авторизатори повертають &quot;немає думки&quot;, запит дозволяється. Наприклад, <code>--authorization-mode=AlwaysAllow,RBAC</code> має такий самий ефект, як і <code>--authorization-mode=AlwaysAllow</code>, тому що RBAC Kubernetes не надає негативних (відмовних) правил доступу.</p>
<p>Ви не повинні використовувати режим <code>AlwaysAllow</code> на кластері Kubernetes, де API сервер доступний публічно з інтернету.</p>
</div>


### Група system:masters {#the-system-masters-group}

Група `system:masters` є вбудованою групою Kubernetes, яка надає необмежений доступ до сервера API. Будь-який користувач, призначений до цієї групи, має повні привілеї адміністратора кластера, обходячи будь-які обмеження авторизації, що накладаються механізмами RBAC або Webhook. [Не додавайте користувачів](/docs/concepts/security/rbac-good-practices/#least-privilege) до цієї групи. Якщо вам потрібно надати користувачеві права cluster-admin, ви можете створити [ClusterRoleBinding](/docs/reference/access-authn-authz/rbac/#user-facing-roles) до вбудованої `cluster-admin` ClusterRole.

### Конфігурація режиму авторизації {#choice-of-authz-config}

Ви можете налаштувати ланцюжок авторизації API сервера Kubernetes, використовуючи або [конфігураційний файл](#using-configuration-file-for-authorization), або [параметри командного рядка](#using-flags-for-your-authorization-module).

Ви повинні вибрати один з двох підходів до конфігурації: задати обидва шляхи `--authorization-config` і налаштувати вебхук авторизації за допомогою аргументів командного рядка `--authorization-mode` та `--authorization-webhook-*` не допускається. Якщо ви спробуєте це зробити, API сервер повідомить про помилку під час запуску та одразу завершить роботу.

<!-- keep legacy hyperlinks working -->
<a id="configuring-the-api-server-using-an-authorization-config-file" />

### Налаштування API сервера за допомогою конфігураційного файлу авторизації {#using-configuration-file-for-authorization}








  <div class="feature-state-notice feature-stable" title="Функціональна можливість: StructuredAuthorizationConfiguration">
              <span class="feature-state-name">СТАН ФУНКЦІОНАЛУ:</span> 
              <code>Kubernetes v1.32 [stable]</code>(стандартно увімкнено)</div>


Kubernetes дозволяє налаштовувати ланцюжки авторизації, які можуть включати декілька вебхуків. Елементи авторизації в цьому ланцюжку можуть мати чітко визначені параметри, які перевіряють запити в певному порядку, пропонуючи вам тонке налаштування, наприклад, явну відмову при невдачах.

Підхід з використанням конфігураційного файлу навіть дозволяє вам вказувати [правила CEL](/docs/reference/using-api/cel/) для попередньої фільтрації запитів перед їх відправленням до вебхуків, допомагаючи вам уникнути непотрібних викликів. API сервер також автоматично перезавантажує ланцюжок авторизатора при зміні конфігураційного файлу.

Ви вказуєте шлях до конфігурації авторизації за допомогою аргументу командного рядка `--authorization-config`.

Якщо ви хочете використовувати параметри командного рядка замість конфігураційного файлу, це також є дійсним і підтримуваним підходом. Деякі можливості авторизації (наприклад: кілька вебхуків, політика відмови вебхука та правила попередньої фільтрації) доступні тільки при використанні конфігураційного файлу авторизації.

#### Приклад конфігурації {#authz-config-example}

<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line hl"><span class="cl"><span class="c">#</span><span class="w">
</span></span></span><span class="line hl"><span class="cl"><span class="c"># НЕ ВИКОРИСТОВУЙТЕ КОНФІГУРАЦІЮ ТАК, ЯК ВОНА Є. ЦЕ ПРИКЛАД.</span><span class="w">
</span></span></span><span class="line hl"><span class="cl"><span class="c">#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">apiserver.config.k8s.io/v1</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">AuthorizationConfiguration</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">authorizers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">Webhook</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># Це явно використовується в механізмі моніторингу для метрик</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c">#   - Перевірка цього поля схожа на перевірку міток K8s на сьогодні.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">webhook</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">webhook</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Тривалість кешування відповідей &#39;authorized&#39; від вебхука</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># Те саме, що і встановлення прапорця `--authorization-webhook-cache-authorized-ttl`.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Типово: 5m0s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">authorizedTTL</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Якщо встановлено в false, &#39;authorized&#39; відповіді від вебхука не кешуються</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># і вказаний authorizedTTL ігнорується/не має ефекту.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Те саме, що і встановлення прапорця `--authorization-webhook-cache-authorized-ttl` в `0`.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Примітка: Встановлення authorizedTTL в `0` призводить до використання його типового значення.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Типове: true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">cacheAuthorizedRequests</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Тривалість кешування відповідей &#39;unauthorized&#39; від вебхука</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># Те саме, що і встановлення прапорця `--authorization-webhook-cache-unauthorized-ttl`.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Типово: 30 с</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">unauthorizedTTL</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Якщо встановлено в false, &#39;unauthorized&#39; відповіді від вебхука не кешуються</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># і вказаний unauthorizedTTL ігнорується/не має ефекту.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Те саме, що і встановлення прапорця `--authorization-webhook-cache-unauthorized-ttl` в `0`.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Примітка: Встановлення unauthorizedTTL в `0` призводить до використання його типового значення.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Типове: true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">cacheUnauthorizedRequests</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># Максимально допустимий: 30 с</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">3s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Версія API для SubjectAccessReview в authorization.k8s.io, яка</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># Те саме, що і встановлення прапорця `--authorization-webhook-version`.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># Допустимі значення: v1beta1, v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">subjectAccessReviewVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># MatchConditionSubjectAccessReviewVersion визначає версію SubjectAccessReview</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># за якою оцінюються вирази CEL</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Допустимі значення: v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="nt">matchConditionSubjectAccessReviewVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># виконати або отримано некоректну відповідь або помилки під час оцінки</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># виразів matchConditions.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c">#   - NoOpinion: продовжувати до наступних авторизаторів, щоб перевірити, чи дозволяє один з них запит</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c">#   - Deny: відхиляти запит без консультації з наступними авторизаторами</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="nt">failurePolicy</span><span class="p">:</span><span class="w"> </span><span class="l">Deny</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">connectionInfo</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># Допустимі значення:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c"># - KubeConfigFile: використовуйте файл, вказаний у kubeConfigFile для пошуку сервера.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c"># - InClusterConfig: використовуйте конфігурацію внутрішнього кластера для виклику API SubjectAccessReview,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#   що розміщується kube-apiserver. Цей режим не дозволяється для kube-apiserver.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">KubeConfigFile</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c"># Шлях до файлу KubeConfigFile для інформації про підключення</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c"># Обовʼязково, якщо connectionInfo.Type є KubeConfigFile</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">kubeConfigFile</span><span class="p">:</span><span class="w"> </span><span class="l">/kube-system-authz-webhook.yaml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c"># matchConditions - це список умов, які повинні бути виконані для того, щоб запит було відправлено на цей</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c"># вебхук. Порожній список matchConditions підходить для всіх запитів.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c"># Є максимально допустимі 64 умови відповідності.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># Логіка точного порівняння така (в порядку):</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#   1. Якщо принаймні одна matchCondition оцінюється як FALSE, тоді вебхук пропускається.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#   2. Якщо ВСІ matchConditions оцінюються як TRUE, тоді вебхук викликається.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#   3. Якщо принаймні одна matchCondition оцінюється як помилка (але ні одна не є FALSE):</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#      - Якщо failurePolicy=Deny, тоді вебхук відхиляє запит.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#      - Якщо failurePolicy=NoOpinion, тоді помилка ігнорується, а вебхук пропускається.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">matchConditions</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># expression - це вираз CEL, який оцінюється для кожного запиту. Повертає булеве значення.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># CEL вираз має доступ до вмісту SubjectAccessReview у версії v1.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># Якщо версія у SubjectAccessReview в запиті змінної є v1beta1,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># вміст буде конвертовано у v1 перед оцінкою виразу CEL.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># Документація CEL: https://kubernetes.io/docs/reference/using-api/cel/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># лише надсилати запити ресурсів до вебхука</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">expression</span><span class="p">:</span><span class="w"> </span><span class="l">has(request.resourceAttributes)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># лише перехоплювати запити до kube-system</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">expression</span><span class="p">:</span><span class="w"> </span><span class="l">request.resourceAttributes.namespace == &#39;kube-system&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># не перехоплювати запити від службових облікових записів kube-system</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">expression</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;!(&#39;system:serviceaccounts:kube-system&#39; in request.groups)&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">Node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">RBAC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">rbac</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">Webhook</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">in-cluster-authorizer</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">webhook</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">authorizedTTL</span><span class="p">:</span><span class="w"> </span><span class="l">5m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">unauthorizedTTL</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">3s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">subjectAccessReviewVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">failurePolicy</span><span class="p">:</span><span class="w"> </span><span class="l">NoOpinion</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">connectionInfo</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">InClusterConfig</span></span></span></code></pre></div>

Під час налаштування ланцюжка авторизації за допомогою файлу конфігурації переконайтеся, що всі вузли панелі управління мають однаковий вміст файлу. Зверніть увагу на конфігурацію API сервера при оновленні / зниженні версії вашого кластера. Наприклад, якщо ви оновлюєтеся з Kubernetes 1.35 до Kubernetes 1.36, вам потрібно переконатися, що файл конфігурації має формат, який розуміє Kubernetes 1.36, перш ніж ви оновите кластер. Якщо ви знижуєте версію до 1.35, вам потрібно відповідно налаштувати конфігурацію.

#### Конфігурація авторизації та перезавантаження {#authorization-configuration-and-reloads}

Kubernetes перезавантажує файл конфігурації авторизації, коли API сервер виявляє зміну у файлі, а також за 60-секундним графіком, якщо події змін не спостерігаються.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4><p>Ви повинні забезпечити, щоб всі типи авторизаторів, крім вебхука, залишалися незмінними у файлі під час перезавантаження.</p>
<p>Перезавантаження <strong>не повинно</strong> додавати або видаляти авторизаторів вузла або RBAC (їх можна перевпорядкувати, але не можна додавати або видаляти).</p>
</div>


### Конфігурація режиму авторизації через командний рядок {#using-flags-for-your-authorization-module}

Ви можете використовувати наступні режими:

* `--authorization-mode=ABAC` (режим контролю доступу на основі атрибутів)
* `--authorization-mode=RBAC` (режим контролю доступу на основі ролей)
* `--authorization-mode=Node` (авторизатор вузлів)
* `--authorization-mode=Webhook` (режим авторизації вебхуком)
* `--authorization-mode=AlwaysAllow` (завжди дозволяє запити; несе [ризики безпеки](#warning-always-allow))
* `--authorization-mode=AlwaysDeny` (завжди відхиляє запити)

Ви можете вибрати більше одного режиму авторизації; наприклад: `--authorization-mode=Node,Webhook`

Kubernetes перевіряє модулі авторизації на основі порядку, який ви вказуєте в командному рядку API сервера, тому раніше зазначений модуль має вищий пріоритет для дозволу або відмови в запиті.

Ви не можете поєднувати аргумент командного рядка `--authorization-mode` з аргументом командного рядка `--authorization-config`, який використовується для [налаштування авторизації за допомогою локального файлу](#using-configuration-file-for-authorization).

Для отримання додаткової інформації про аргументи командного рядка для API сервера, читайте [довідник по `kube-apiserver`](/docs/reference/command-line-tools-reference/kube-apiserver/).

## Підвищення привілеїв через створення або редагування робочих навантажень {#privilege-escalation-via-pod-creation}

Користувачі, які можуть створювати/редагувати Podʼи в просторі імен, або безпосередньо, або через обʼєкт, що дозволяє опосередковане [управління робочими навантаженнями](/docs/concepts/architecture/controller/), можуть мати можливість підвищити свої привілеї в цьому просторі імен. Потенційні шляхи до підвищення привілеїв включають розширення [API Kubernetes](/docs/concepts/extend-kubernetes/#api-extensions) та повʼязані з ними <a class='glossary-tooltip' title='Контролер — цикл управління, що спостерігає за загальним станом кластера через apiserver і вносить зміни в намаганні наблизити поточний стан до бажаного.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/architecture/controller/' target='_blank' aria-label='контролери'>контролери</a>.

<div class="alert alert-caution" role="note"><h4 class="alert-heading">Увага:</h4>Як адміністратор кластера, будьте обережні, надаючи доступ до створення або редагування робочих навантажень. Деякі деталі того, як вони можуть бути використані не за призначенням, задокументовані в <a href="#escalation-paths">шляхах підвищення привілеїв</a>.</div>


### Шляхи підвищення привілеїв {#escalation-paths}

Існують різні способи, за якими зловмисник або ненадійний користувач може отримати додаткові привілеї в межах простору імен, якщо ви дозволяєте їм запускати довільні Podʼи в цьому просторі імен:

* Монтування довільних Secretʼів в цьому просторі імен
  * Може бути використано для доступу до конфіденційної інформації, призначеної для інших робочих навантажень
  * Може бути використано для отримання токена службового облікового запису більш привілейованого ServiceAccount
* Використання довільних службових облікових записів в цьому просторі імен
  * Може виконувати дії Kubernetes API як інше робоче навантаження (імперсонізація)
  * Може виконувати будь-які привілейовані дії, які має цей ServiceAccount
* Монтування або використання ConfigMaps, призначених для інших робочих навантажень в цьому просторі імен
  * Може бути використано для отримання інформації, призначеної для інших робочих навантажень, таких як імена хостів баз даних.
* Монтування томів, призначених для інших робочих навантажень в цьому просторі імен
  * Може бути використано для отримання інформації, призначеної для інших робочих навантажень, та її зміни.

<div class="alert alert-caution" role="note"><h4 class="alert-heading">Увага:</h4>Як системному адміністратору, вам слід бути обережними при впровадженні власних визначень ресурсів, що дозволяють користувачам вносити зміни у вищезазначених областях. Це може відкрити шляхи до підвищення привілеїв. Розгляньте наслідки цього виду змін при виборі контролю за авторизацією.</div>


## Перевірка доступу до API {#checking-api-access}

`kubectl` надає підкоманду `auth can-i` для швидкого запиту до рівня авторизації API. Команда використовує API `SelfSubjectAccessReview`, щоб визначити, чи може поточний користувач виконати
вказану дію, і працює незалежно від режиму авторизації, який використовується.

```bash
kubectl auth can-i create deployments --namespace dev
```

Вивід подібний до цього:

```none
yes
```

```shell
kubectl auth can-i create deployments --namespace prod
```

Вивід подібний до цього:

```none
no
```

Адміністратори можуть поєднувати це з [імперсонізацією користувача](/docs/reference/access-authn-authz/authentication/#user-impersonation), щоб визначити, які дії можуть виконувати інші користувачі.

```bash
kubectl auth can-i list secrets --namespace dev --as dave
```

Вивід подібний до цього:

```none
no
```

Так само, щоб перевірити, чи може ServiceAccount з іменем `dev-sa` в просторі імен `dev` отримати списки Podʼів в просторі імен `target`:

```bash
kubectl auth can-i list pods \
    --namespace target \
    --as system:serviceaccount:dev:dev-sa
```

Вивід подібний до цього:

```none
no
```

SelfSubjectAccessReview є частиною групи API `authorization.k8s.io`, яка викладає авторизацію сервера API для зовнішніх служб. Інші ресурси у цій групі включають:

SubjectAccessReview
: Перегляд доступу для будь-якого користувача, не лише поточного. Корисно для делегування рішень про авторизацію серверу API. Наприклад, `kubelet` та сервери API розширень використовують це для визначення доступу користувача до своїх власних API.

LocalSubjectAccessReview
: Подібно до SubjectAccessReview, але обмежено для конкретного простору імен.

SelfSubjectRulesReview
: Перегляд, який повертає набір дій, які користувач може виконати в межах простору імен. Корисно для користувачів для швидкого узагальнення їх власного доступу, або для інтерфейсів користувача для приховування/відображення дій.

Ці API можна опитати, створивши звичайні ресурси Kubernetes, де поле відповіді `status`
поверненого обʼєкта є результатом запиту. Наприклад:

```bash
kubectl create -f - -o yaml << EOF
apiVersion: authorization.k8s.io/v1
kind: SelfSubjectAccessReview
spec:
  resourceAttributes:
    group: apps
    resource: deployments
    verb: create
    namespace: dev
EOF
```

Створений SelfSubjectAccessReview схожий на:

<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">authorization.k8s.io/v1</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">SelfSubjectAccessReview</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">creationTimestamp</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">resourceAttributes</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="l">apps</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resource</span><span class="p">:</span><span class="w"> </span><span class="l">deployments</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">namespace</span><span class="p">:</span><span class="w"> </span><span class="l">dev</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">verb</span><span class="p">:</span><span class="w"> </span><span class="l">create</span><span class="w">
</span></span></span><span class="line hl"><span class="cl"><span class="nt">status</span><span class="p">:</span><span class="w">
</span></span></span><span class="line hl"><span class="cl"><span class="w">  </span><span class="nt">allowed</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line hl"><span class="cl"><span class="w">  </span><span class="nt">denied</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span></span></span></code></pre></div>

## Що далі

* Щоб дізнатися більше про автентифікацію, перегляньте [Автентифікацію](/docs/reference/access-authn-authz/authentication/).
* Для отримання огляду, перегляньте [Керування доступом до API Kubernetes](/docs/concepts/security/controlling-access/).
* Щоб дізнатися більше про контроль прийняття, перегляньте [Використання контролерів допуску](/docs/reference/access-authn-authz/admission-controllers/).
* Дізнайтесь про [Загальну мову запитів (CEL) в Kubernetes](/docs/reference/using-api/cel/).
