プロトタイプを VPN の内側に置くと非公開になったように感じるので、残る疑問は誰にプロファイルを渡すかだけに見えます。その前提は、トンネルが制御するのは誰がホストに到達できるかであり到達後にホストが何を公開するかではない、という形で崩れます。プレビューは今も実行環境を動かし、データを保持し、実際のメールを送ったり実際のデータベースに書き込んだりできる連携を呼び出します。VPN を玄関とみなし、その奥の部屋を設計してください。

経路は相手先ではない

テスターを VPN に登録すると答えるのは「この端末はそのアドレスに到達できるか」というちょうど一つの問いだけです。その端末がどのページ、API、コンソールを使えるかについては何も語りません。これらは別々の権限であり、アドレスだけを知るゲートウェイには強制できません。

プレビューの契約を、ホスト名、リスナー、許可する操作、各役割を誰が持つかという短い一覧として書きます。そのうえで、一覧が実際に公開されている内容と一致するか確認します。

プロトタイプを開けるテスターに、デプロイ用コンソールやデータベースの管理画面、開発者のホームディレクトリは必要ありません。ゲートウェイがサブネット経路を与えると、それらはすべて既定で到達可能になります。宛先ごとの経路を選ぶか、追加のサービスを独自の認証の内側に置いてください。どちらを選んでも、盗まれたプロファイルでできることは狭まります。

共有する実行環境は契約の一部

デバッガーと自動リロードを備えた開発サーバーは一人が一台のマシンで使う道具であり、フレームワークの文書はこの点で明確です。Flask のデプロイガイドは、その開発サーバーとデバッガーは本番向けではないと述べ、私有または単一ユーザーのサービスも本番とみなしています。同じ理屈は、リローダーと対話的なエラーページを持つあらゆるフレームワークに当てはまります。便利な機能は、ファイルを保存してから変更が見えるまでのループを短くするために設計されており、あなたが制御しないテスターに直面するためではありません。

対話的なトレースバックは情報の漏えいであり、一部のデバッガーではコード実行の面にもなります。プレビューから外すか、有効化できないビルドにプレビューを限定してください。テスターに診断が必要なら、コンソールではなくログを渡してください。

ワイルドカードのリスナーはこの誤りのもう半分です。すべてのインターフェースにバインドすると、意図しないネットワーク、たとえば喫茶店の Wi-Fi でもサービスが公開されます。

使い捨てのアカウントと実際の副作用のないデータを使う

テスト用に作ったアカウントと、誰も困らせないデータを使ってください。危険なのはデータベースの行ではなく、ボタンの奥の連携であることがほとんどです。メール、決済、SMS、Webhook、ファイル出力はすべてプレビューの外に届きます。

プロトタイプが起こせる外向きの効果をすべて列挙し、それぞれをサンドボックスに向けるか無効にしてください。私有の経路があっても、稼働中の決済エンドポイントが無害になるわけではありません。

本番の資格情報も形が違うだけで同じ問題です。設定の時間を節約するために本番の API キーを引き継ぐプレビューは、デバッグ用 UI を備えた本番システムです。最小限の有用な権限で範囲を絞った資格情報を作ってください。有効なキーを持つ失効済みのプレビューは依然として生きているので、プレビューが終わったらローテーションしてください。

ページ、アセット、ソケットを確認する

描画されるページは、機能するプレビューではありません。アセットのホスト、API、WebSocket がテスターの到達できない URL を指したまま、HTML だけが読み込まれることがあります。これらのそれぞれが契約の別項目です。

承認済みの端末から、ページと最大のアセットを別々に要求します:

curl -sS -o /dev/null -w "%{http_code}" https://preview.staging.example/
curl -sS -o /dev/null -w "%{http_code}" https://preview.staging.example/assets/app.js

そのうえで、実際の操作中にブラウザーのコンソールを観察し、ライブリロードのソケットが接続することを確認してください。接続しない場合の修正は、ページが完全に見えるまで広げる規則ではなく、そのエンドポイントへの意図的な経路です。

プレビューは記憶ではなく日付で終わらせる

プレビューを作った時点で、所有者と終了日を決めてください。その日が来たら、項目、テスターの ID、一時的な資格情報を、それらを所有する設定から削除します。忘れられたプレビューが、私有のプロトタイプを恒久的な公開物に変える道です。

ホスト名が解決しなくなるか未承認のクライアントへの応答をやめるはずなので、終了は外から確認してください。

ソースと復旧のメモは残しますが、代替経路は残しません。よいプレビュー境界の試験は退屈であり、承認された端末は必要な操作ができ、承認されていない主体はできません。トンネルを切った後も同じでなければなりません。その結果は、開発機能をすべて有効にしたまま動くプロトタイプの横にある VPN アイコンより価値があります。

関連記事