製品ページにAPIがあると書かれていても、統合の会議は二つ目の質問で止まります。どの操作を、どの対象に対して、誰が呼び、何をもって成功とするのか。製品を比較する前にこの四つへ答えると、候補の半分はたいてい消えます。残った比較も、テストで決着をつけられるものになります。

APIがあるという主張を一つの操作に置き換える

APIは輸送手段であり、能力ではありません。RESTのエンドポイント、ローカルのソケット、コマンドラインのラッパーはどれもAPIと呼ばれますが、同じ操作を提供するわけではありません。

ドキュメントを開く前に、操作を一文で書き出してください。

ローカル接続の開始は、ユーザーが目の前にいるクライアント側の行為です。端末プロファイルの発行は、台帳を背後に持つ払い出しの行為です。ユーザーのアクセス停止は、監査記録を伴う管理行為です。この三つは通常、別のコンポーネントにあり、別のチームが所有し、別の権限を持ちます。

契約を検証可能にする四つの欄

操作ごとに四つの欄を埋めます。対象、操作、呼び出し元、成功条件です。欄が欠けた契約は願望にすぎません。

表がワークシートの全体です。

FieldQuestionExample
ObjectWhat is being acted on?One enrolled device
ActionObserve, create, change, start, stop, or revoke?Revoke
CallerWhich identity calls it?Deployment service
SuccessWhat 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自体が落ちている場合の復旧経路を書き留めます。対象とそのライフサイクルを所有するインターフェースを選んでください。製品ページの自動化の主張は代わりになりません。

関連記事