# セーフプロキシ
## 定義
セーフプロキシとは、本番環境の状態を変更しうる操作(物理サーバー・仮想マシン・特定アプリケーションへのアクセスや変更)を、クライアントが対象システムへ直接行うのではなく単一の仲介点であるプロキシを経由させることで、アクセス制御・監査ログ・多者承認(MPA)・レート制限といった制御を後付けで一元的に適用するアーキテクチャパターンである。対象システムはプロキシからの呼び出しのみを受け付けるよう設定で制限され、既存システムに大きな変更を加えずに新しい信頼性・セキュリティ要件を満たせる点が特徴である。Googleでは[[Zero Touch Prod]](本番変更を自動化・事前検証・監査済みbreakglassのいずれかに限定するプロジェクト)を実現する手段の1つとして位置づけられ、[[Google Tool Proxy]]という危険なCLIコマンドの実行を仲介するツールが具体例として挙げられる。(Source: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 3 Case Study - Safe Proxies]] §Safe Proxies in Production Environments)
セーフプロキシは対象システムと同じ外部APIを公開して透過的に振る舞い、検証・ログという前処理・後処理だけを追加することでユーザー体験に影響を与えない設計を取る。一方で、保守・運用コストの増加、対象システムや依存先の障害がそのままプロキシの単一障害点になること、アクセス制御のポリシー設定自体が誤りの温床になること、中央機がフォワードされたクライアントIDのもとで動くとはいえ攻撃対象になりうること、直接接続を望むユーザーからの変更への抵抗、というトレードオフを伴う。(Source: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 3 Case Study - Safe Proxies]] §Safe Proxies in Production Environments)
## 横断的知見
- (現時点では本概念の情報源は本書第3章のみであり、複数ソースを突き合わせた横断的知見はまだ蓄積されていない。関連する一般的なプロキシ概念との対比は [[プロキシとエージェント]] 側の横断的知見を参照。)
## 未解決の問い
- セーフプロキシは最小権限・監査ログ・多者承認に触れるが、本書第5章(Design for Least Privilege)はこれらをより深く扱う。第5章がingestされた際に、本ページの記述と最小権限の一般原則との関係を整理する必要がある。
- 本章はアクセス制御のポリシー設定自体が誤りの温床になりうる点を指摘するが、その緩和策(テンプレート化・セキュアなデフォルト自動生成)の効果を実測したデータは示されていない。他ソース(SRE Book、Security Engineering等)にポリシー設定ミスや設定ミス脆弱性に関する知見があれば、突き合わせて横断的知見に昇格させる。
- セーフプロキシは「単一の仲介点」という点で一般的なプロキシパターンと共通するが、ネットワーク層のセッション中継(NAT・ロードバランサ等)とは異なり、運用セキュリティ(人間の操作をどう安全に制限するか)を主目的とする。この2つの系譜(ネットワーク中心 vs 運用セキュリティ中心)がどこまで同一の抽象で語れるかは未検討。
## 関連
- 概念: [[プロキシとエージェント]](ネットワーク層の一般的なプロキシ定義。本概念はその運用セキュリティ文脈での特殊化)
- source: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 3 Case Study - Safe Proxies]]
- 実体: [[Google Tool Proxy]] / [[Zero Touch Prod]] / [[Borg]]
## 出典
- Heather Adkins et al. (eds.), *Building Secure and Reliable Systems*, O'Reilly Media, 2020, Chapter 3.