Визначте операцію VPN, перш ніж порівнювати API
Керування з'єднанням, підготовка профілів, адміністрування користувачів і спостереження — це різні API. Спочатку назвіть об'єкт, дію та умову успіху.
Сторінка продукту каже, що він має API, а нарада щодо інтеграції застрягає на другому питанні. Яка операція, над яким об'єктом, ким викликається і що вважається успіхом? Відповідь на ці чотири питання до порівняння продуктів зазвичай відсіює половину кандидатів. Це також перетворює решту порівняння на те, що може вирішити тест.
Замініть «має API» однією операцією
API — це транспорт, а не можливість. Кінцева точка REST, локальний сокет і обгортка командного рядка всі можуть називатися API, і вони не пропонують рівноцінних операцій.
Запишіть операцію як речення, перш ніж дивитися документацію.
Запуск локального з'єднання — це дія на боці клієнта з користувачем перед нею. Видача профілю пристрою — це дія з підготовки з інвентарем за нею. Вимкнення доступу користувача — це адміністративна дія зі слідом аудиту. Ці три зазвичай живуть у різних компонентах, належать різним командам і мають різні повноваження.
Чотири поля, які роблять контракт перевірюваним
Заповніть чотири поля для кожної операції: об'єкт, дію, того, хто викликає, і умову успіху. Контракт із пропущеним полем — це побажання.
Таблиця — це весь робочий аркуш:
| Field | Question | Example |
|---|---|---|
| Object | What is being acted on? | One enrolled device |
| Action | Observe, create, change, start, stop, or revoke? | Revoke |
| Caller | Which identity calls it? | Deployment service |
| Success | What observable state proves it? | Future sign-in denied |
Умова успіху — те поле, яке люди пропускають, і саме воно вирішує, чи працює інтеграція. Збережене налаштування — не активний тунель, а вимкнений обліковий запис — не завершена сесія.
Якщо двом операціям потрібні різні викликачі, це дві інтеграції. Об'єднання їх в один службовий обліковий запис зазвичай означає надання більших повноважень, ніж потрібно кожній із них.
Узгодьте інтерфейс із шаром, якому він справді належить
Спільнотний інтерфейс керування OpenVPN спілкується з демоном через TCP або сокет Unix. Його команди включають спостереження за станом і сигнали демону.
Це робить його каналом керування демоном, а не розміщеним API підписки чи службою реєстрації користувачів. Уважне читання його документації рятує вас від побудови на шарі, який не володіє об'єктом.
Ця документація також каже, що протокол не має власного шифрування. Хто може дістатися до сокета, той може керувати демоном, тому ставтеся до нього як до чутливого керування, а не потоку метрик. Прив'яжіть його до loopback або сокета Unix і поставте за обмежену схему, якщо віддаленому викликачеві це потрібно. Виставлення його в інтернет заради зручності перетворює канал керування на інцидент.
Опишіть поведінку після виклику
Прийняття — не те саме, що завершення. Демон може відповісти до того, як тунель підніметься, тому чекайте на задокументовану подію завершення або збою і прив'язуйте її до надісланого запиту.
Вирішіть, що робить викликач, якщо відповідь загубилася. Сліпе повторення створення чи перепідключення — не те саме, що перевірка, чи перший запит уже подіяв.
Видалення доступу — це щонайменше три різні дії: заблокувати майбутній вхід, завершити активну сесію та відкликати облікові дані. Просіть ті, яких справді вимагає політика, і вкажіть у контракті, що є що. Не називайте одне успішне оновлення облікового запису повним відкликанням без доказів. Ця різниця важлива під час інциденту, коли годинник іде.
Перевірте контракт пілотом
Малий схвалений пілот має охоплювати успіх, відмову, переривання та повтор, а потім операцію застосунку, яку слід дозволити або відхилити.
Для інтерфейсу рівня демона дві команди вправляють спостереження та сигнал:
echo state | nc -w 2 127.0.0.1 7505
echo signal SIGTERM | nc -w 2 127.0.0.1 7505Надавайте лише ті повноваження, яких вимагає операція. Тримайте секрети поза рутинними журналами і записуйте достатньо приватних деталей, щоб сказати, яку ціль було зачеплено і чим усе закінчилося.
Запишіть шлях відновлення на випадок, коли сам API керування недоступний. Обирайте інтерфейс, який володіє об'єктом і його життєвим циклом; заяви про автоматизацію на сторінці продукту не є заміною.