# Розшифровування конфіденційних даних, які вже зашифровані у спокої

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

---

<!-- overview -->

Усі API в Kubernetes, що дозволяють записувати постійні дані ресурсів, підтримують шифрування у спокої. Наприклад, ви можете увімкнути шифрування у спокої для <a class='glossary-tooltip' title='Зберігає конфіденційну інформацію, таку як паролі, токени OAuth та ключі SSH.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/configuration/secret/' target='_blank' aria-label='Secret'>Secret</a>. Це шифрування у спокої додається до будь-якого шифрування системного рівня для кластера etcd або файлових систем на вузлах, де запущений kube-apiserver.

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


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4><p>Це завдання охоплює шифрування даних ресурсів, збережених за допомогою <a class='glossary-tooltip' title='Застосунок, який обслуговує функціонал Kubernetes через RESTful інтерфейс та зберігає стан кластера.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/overview/kubernetes-api/' target='_blank' aria-label='Kubernetes API'>Kubernetes API</a>. Наприклад, ви можете шифрувати обʼєкти Secret, включно з даними ключ-значення, які вони містять.</p>
<p>Якщо вам потрібно керувати шифруванням даних у файлових системах, які монтувалися у контейнери, вам потрібно використовувати або:</p>
<ul>
<li>інтеграцію зберігання, яка надає зашифровані <a class='glossary-tooltip' title='Тека, що містить дані та доступна для контейнерів у Podʼі.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/storage/volumes/' target='_blank' aria-label='томи'>томи</a></li>
<li>шифрувати дані у вашому власному застосунку</li>
</ul>
</div>


## Перш ніж ви розпочнете

- <p>Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою <a href="https://minikube.sigs.k8s.io/docs/tutorials/multi_node/">minikube</a> або використовувати одну з цих пісочниць:</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>


- Це завдання передбачає, що Kubernetes API server працює як <a class='glossary-tooltip' title='Pod, яким управляє безпосередньо демон kubelet на певному вузлі.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/tasks/configure-pod-container/static-pod/' target='_blank' aria-label='статичний Pod'>статичний Pod</a> на кожному вузлі панелі управління.

- Панель управління вашого кластера **має** використовувати etcd v3.x (основна версія 3, будь-яка мінорна версія).

- Щоб зашифрувати власний ресурс, ваш кластер повинен працювати на Kubernetes v1.26 або новіше.

- У вас повинні бути деякі дані API, які вже зашифровані.


 <p>Для перевірки версії введіть  <code>kubectl version</code>.</p>


<!-- steps -->

## Визначте, чи вже увімкнене шифрування у спокої {#determine-whether-encryption-at-rest-is-already-enabled}

Стандартно API server використовує провайдера `identity`, який зберігає представлення ресурсів у текстовому вигляді. **Стандартний провайдер `identity` не надає жодного захисту конфіденційності.**

Процес `kube-apiserver` приймає аргумент `--encryption-provider-config`, який вказує шлях до файлу конфігурації. Вміст цього файлу, якщо ви вказали його, керує тим, як дані API Kubernetes шифруються в etcd. Якщо він не вказаний, у вас не увімкнене шифрування у спокої.

Форматом цього файлу конфігурації є YAML, який представляє конфігурацію API-ресурсу під назвою [`EncryptionConfiguration`](/docs/reference/config-api/apiserver-config.v1/). Приклад конфігурації ви можете побачити в [Шифрування конфіденційних даних у спокої](/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration).

Якщо встановлено `--encryption-provider-config`, перевірте, які ресурси (наприклад, `secrets`) налаштовані для шифрування, і який провайдер використовується. Переконайтеся, що вподобаний провайдер для цього типу ресурсу **не** є `identity`; ви встановлюєте лише `identity` (_без шифрування_) як типовий, коли хочете вимкнути шифрування у спокої. Перевірте, чи перший провайдер, зазначений для ресурсу, щось **інше**, ніж `identity`, що означає, що будь-яка нова інформація, записана до ресурсів цього типу, буде зашифрована, як налаштовано. Якщо ви бачите, що `identity` — перший провайдер для якого-небудь ресурсу, це означає, що ці ресурси записуються в etcd без шифрування.

### Розшифруйте всі дані {#decrypting-all-data}

Цей приклад показує, як зупинити шифрування API Secret у спокої. Якщо ви шифруєте інші види API, адаптуйте кроки відповідно.

### Визначте файл конфігурації шифрування {#locate-the-encryption-configuration-file}

Спочатку знайдіть файли конфігурації API server. На кожному вузлі панелі управління маніфест статичного Pod для kube-apiserver вказує аргумент командного рядка `--encryption-provider-config`. Ймовірно, цей файл монтується у статичний Pod за допомогою тому[`hostPath`](/docs/concepts/storage/volumes/#hostpath). Після того, як ви знайдете том, ви можете знайти файл у файловій системі вузла і перевірити його.

### Налаштуйте API server для розшифрування обʼєктів {#configure-the-api-server-to-decrypt-objects}

Щоб вимкнути шифрування у спокої, розмістіть провайдера `identity` як перший запис у вашому файлі конфігурації шифрування.

Наприклад, якщо ваш наявний файл EncryptionConfiguration виглядає так:

```yaml
---
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
    providers:
      - aescbc:
          keys:
            # Не використовуйте цей (недійсний) приклад ключа для шифрування
            - name: example
              secret: 2KfZgdiq2K0g2YrYpyDYs9mF2LPZhQ==
```

то змініть його на:

```yaml
---
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
    providers:
      - identity: {} # додайте цей рядок
      - aescbc:
          keys:
            - name: example
              secret: 2KfZgdiq2K0g2YrYpyDYs9mF2LPZhQ==
```

і перезапустіть kube-apiserver Pod на цьому вузлі.

### Переконфігуруйте інші вузли панелі управління {#api-server-config-update-more-1}

Якщо у вашому кластері є кілька серверів API, ви повинні по черзі впроваджувати зміни на кожен з серверів API.

Переконайтеся, що ви використовуєте однакову конфігурацію шифрування на кожному вузлі панелі управління.

### Примусове розшифрування {#force-decryption}

Потім виконайте таку команду, щоб примусити розшифрування всіх Secrets:

```shell
# Якщо ви розшифровуєте інший тип обʼєкта, змініть "secrets" відповідно.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
```

Після того, як ви замінили **всі** наявні зашифровані ресурси резервними даними, які не використовують шифрування, ви можете видалити налаштування шифрування з `kube-apiserver`.

Параметри командного рядка, які потрібно видалити:

- `--encryption-provider-config`
- `--encryption-provider-config-automatic-reload`

Знову перезапустіть kube-apiserver Pod, щоб застосувати нову конфігурацію.

### Переконфігуруйте інші вузли панелі управління {#api-server-config-update-more-2}

Якщо у вашому кластері є кілька серверів API, ви знову повинні по черзі впроваджувати зміни на кожен з серверів API.

Переконайтеся, що ви використовуєте однакову конфігурацію шифрування на кожному вузлі панелі управління.

## Що далі

- Дізнайтеся більше про [API конфігурацію EncryptionConfiguration (v1)](/docs/reference/config-api/apiserver-config.v1/).
