API를 비교하기 전에 VPN 작업을 정의하라
연결 제어, 프로필 프로비저닝, 사용자 관리, 관측은 서로 다른 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 자체가 내려간 경우의 복구 경로를 적어 두십시오. 대상과 그 수명 주기를 소유한 인터페이스를 선택하십시오. 제품 페이지의 자동화 주장은 대체물이 아닙니다.