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