Щоразу, коли ви ділитеся Compose-файлом, існують два артефакти: той, який ви написали, і той, який інструмент відрендерить після підстановки змінних. Другий часто чутливіший за перший, і саме його люди вставляють у звіт про проблему, не читаючи. Якщо ви переглядаєте лише початковий файл, ви переглядаєте не той документ.

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

Відрендерена модель — це інший документ

Compose розв’язує змінні середовища, об’єднує файли перевизначення та створює чинну конфігурацію, яку читач уже не відрізнить від значень, написаних вручну. Посилання, наприклад ім’я змінної в джерелі, у виводі стає самим токеном облікового запису. Структура, яка робить файл корисним для діагностики, переживає це перетворення; переживає й усе те, чого в ньому ніколи не повинно було бути.

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

Секрети лежать не лише в полі ключа

Почніть з очевидного: закриті ключі, попередньо спільні ключі, токени, паролі та URL-адреси з’єднання з вбудованими обліковими даними. Потім подивіться на все, на що посилається файл, бо посилання — це не видалення. Файл середовища, змонтований у сервіс, файл конфігурації, прив’язаний з хоста, мітка з токеном і аргумент команди з паролем — усе це подорожує разом із розгортанням, навіть коли YAML виглядає чистим. Ключ, вставлений у змінну з заспокійливим ім’ям, залишається ключем.

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

Оголошення секрету — це не сам секрет

Об’єкти секретів Compose відокремлюють оголошення від матеріалу: сервіс отримує шлях або ціль, а вміст живе в іншому місці. Зберегти оголошення, замінивши матеріал, зазвичай правильний обмін, бо перевіряльник має бачити, що секрет існує і як він змонтований. Вижити не повинен сам вміст.

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

Збережіть форму, щоб файл і далі допомагав діагностиці

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

docker compose -f compose.yaml config > rendered.yaml
grep -nE 'PRIVATE_KEY|PASSWORD|TOKEN|PSK|PrivateKey|passphrase' rendered.yaml
wc -l rendered.yaml

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

Якщо матеріал було розкрито, замініть його

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

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

Схожі статті