サービスアカウントのVPNアクセス:証明書か共有ログインか
無人運用のVPNアクセスでマシン証明書と保存パスワードを比較し、実際の権限の境界はログイン後に実行されるポリシーに置く。
無人運用のVPN設定はほぼ二つの設計で覆えます。スクリプトに保持する共有の人間ログインか、ホストに結び付けたマシン証明書かです。両者は壊れる場所が異なり、それは設定の速さより重要です。保存パスワードは所有者が変更したり退職したりすると壊れ、証明書は期限切れや、鍵なしでのホスト再構築で壊れます。どちらのコストを負えるかは三つの条件で決まり、認可ポリシーがそうするまでどちらの設計も何も制限しません。
アカウントではなくタスクから始める
タスクが境界を定義します。どの宛先、どのサービス、どの時間帯、セッションをどれだけ動かせるか。トンネルの経路はその境界の半分にすぎません。ゲートウェイはセッションを許可するかを決め、その背後のリソースはセッションが何をできるかを決めます。まず一覧を書き、所有者を明記してください。どちらの ID 設計もそれに従う必要があります。
書きながら認証と認可を分けておきます。認証は誰が接続するかに答え、認可はその後にセッションが何に届けるかに答えます。RADIUS は後者を Filter-Id、Framed-IP-Address、Session-Timeout、Class などの属性として運び、ログインが成功するとゲートウェイがそれらを付与します。ログインを差し替えて認可をそのままにする設計は何も制限していません。
共有の人間ログイン:パスワードが境界になる
人間のアカウントを再利用するのは最速の道であり、最も早く傷む道です。資格情報はパスワードなので、スクリプト、環境ファイル、スケジューラ設定に残り、どのコピーにもローテーションが必要です。所有者が金曜日に変更すると、次回の実行でジョブは失敗し、誰も見ていません。
MFA がこの設計の通常の崩壊点です。スクリプトはプッシュ要求に答えられないため、アカウントはポリシーから除外され、それは攻撃者が選ぶまさにそのアカウントです。除外、信頼された場所のバイパス、アカウント単位の免除が増え、テナント設定を次に読む人にはどれも見えません。
帰属ももう一つのコストです。ゲートウェイログの各セッションは同じユーザー名を持つため、夜間の同期を書いた本人の作業と区別できず、 ジョブを取り消すことはその人を取り消すことになります。
マシン証明書:ホストに結び付いた ID
証明書は問いを「アカウントが何を知っているか」から「ホストが何であるか」に変えます。EAP-TLS ではクライアントが証明書を提示し、対応する秘密鍵の所持を証明します。ポリシーサーバーはサブジェクトまたはコンピューターアカウントをグループにマップし、そのグループのポリシーを適用します。プロンプトもなく、テキストファイルに置かれた共有秘密もありません。
それが作る境界は人々の予想より狭いものです。証明書はタスクではなくホストを認証し、root やローカル管理者権限を持つ誰でもそのホストでその鍵を使えます。鍵はプラットフォームが守る場所に置いてください。Windows 証明書ストアでエクスポート不可、プロファイルが許すなら TPM 支援、Linux なら root 所有の 0600 ファイルです。ホストの侵害は資格情報の侵害です。
期限切れが繰り返す障害です。日曜に切れる証明書は日曜にジョブを止め、ゲートウェイは通常、日付を示さずに一般的な認証失敗を報告します。ランブックの一部としてジョブホストから日付を確認してください。
openssl x509 -in client.pem -noout -subject -issuer -dates
ipsec listcerts
失効にはゲートウェイが確認する経路が必要です。 OpenVPN は crl-verify オプションで CRL を読み、strongSwan は接続プロファイルの作り方に応じて CRL か OCSP に依存します。どちらも接続されていなければ、ホストの削除は証明書の期限切れを待つことを意味します。
両者を分ける三つの条件
基準設計ではなく、手元のプラットフォームと比較してください。
第一の条件は、ゲートウェイがマシン ID を認可できるかです。RADIUS ユーザー名をディレクトリユーザーにマップするだけなら、証明書はホストを認証した後、認可で止まります。第二の条件は、ジョブがユーザーアカウントだけが持つリソースアクセスを必要とするかです。マップされた共有や座席単位のライセンスなどです。それならマシン ID では代替できず、正直な答えは範囲を絞ったポリシーを持つ専用ユーザーアカウントです。第三の条件は、ループに人を置かずに資格情報をローテーションできるのは誰かです。自動登録は証明書の維持を安くしますが、一人しか知らないパスワードはそうではありません。
| Constraint | Machine certificate | Dedicated user account with stored secret |
|---|---|---|
| Unattended login | Private key proof, no prompt | Only if the account is exempted from MFA |
| Resource expects a user identity | Works only when the resource accepts computer accounts | Matches the access a person would have |
| Rotation | Re-enrollment, often automated | Secret change plus redeploy of every copy |
| Revocation speed | Tied to CRL or OCSP refresh | Disable the account, immediate |
表はランキングではなくコストの一覧として読んでください。保存秘密の列は失効の速さと、ユーザーアカウントしか理解しないリソースとの互換性で勝ちます。証明書の列はローテーションと、スクリプトを動かすために MFA を弱めない点で勝ちます。
境界は認証後のポリシーに置く
どの ID を選んでも、権限の境界は認証後に実行されるポリシーに属します。NPS ではネットワークポリシーが順に評価され、すべての条件に一致する最初のポリシーが設定を適用するため、狭いポリシーの上に置かれた広いポリシーが、クライアントが何を提示しても結果を決めます。Microsoft は条件と設定のモデルを次の文書で説明しています。 NPS ポリシーの概要。
ジョブに独自のグループまたはポリシー条件を与え、マシン ID が持つ何かに基づけます。証明書テンプレート、発信元ステーション識別子、専用プールのアドレスなどです。次に属性でセッションを制限します。ゲートウェイがマップする役割の Filter-Id、停滞したジョブが何日もセッションを保持せず再認証する短い Session-Timeout、反対側でファイアウォールを適用するプールの Framed-IP-Address です。アプリケーションの認可は別です。データベースサーバーへのトンネルは、その中のテーブルを読む許可ではありません。
拒否を検証し、その後で削除を計画する
機能するアクセスは最小権限について何も証明しません。代わりに拒否を試します。ジョブ ID で接続して一覧外の宛先に到達しようとし、ゲートウェイが一つだけ許可する設計なら二つ目の同時セッションを開き、資格情報を失効させた後にログインを繰り返します。
次に同じセッションを二か所で確認します。ゲートウェイログは認証された ID を示し、ポリシーサーバーのログは一致したポリシーと返した属性を示します。OpenVPN ではサーバーが証明書のコモンネームを記録し、strongSwan の ipsec statusall は使用中の ID とともに確立したトンネルを出力します。二つのログが ID について一致しないなら、ポリシーは想定とは違うものに一致しています。
削除は設計の一部であり、片付けのスプリントではありません。消すべきもの(証明書かアカウント、グループ所属、ネットワークポリシー、プールの項目、対象側のファイアウォール規則)をすべて書き出し、ジョブを簡単に再構築できるうちに一度実行してください。
今日始めるなら、この順序で進めてください。リソース一覧を書き、三つの条件で ID を選び、境界をポリシーに置き、ジョブを本番に出す前に拒否を一つ試してください。