Дефинирайте 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 е недостъпен. Изберете интерфейса, който притежава обекта и неговия жизнен цикъл; твърденията за автоматизация на продуктова страница не са заместител.