# Google Tool Proxy
## 概要
Googleが開発した、[[セーフプロキシ]]パターンの具体的な実装。汎用のRPCメソッドを公開し、内部でfork/execによって指定されたコマンドラインを実行するバイナリである。すべての呼び出しはポリシーで制御され、監査のためにログ記録され、機密性の高い操作には多者承認(MPA)を要求できる。Googlerの多くの管理操作はCLIツール経由で行われるが、一部のツールはサーバー停止などの危険な操作を許してしまうため、個々のCLIツールごとに集中ログや保護策を実装するのではなく、Tool Proxyという単一の仲介点に集約する設計が取られた。(Source: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 3 Case Study - Safe Proxies]] §Google Tool Proxy)
ポリシーはロール単位で設定され、たとえば `group:admin` に `borg` CLIの任意のコマンドの実行を許可しつつ、`group:admin-leads` からの承認をMPAとして要求する、といった構成を取れる。典型的な利用フローは、エンジニアが `tool-proxy-cli --proxy_address admin-proxy borg kill ...` のようにコマンドを実行すると、(1) プロキシが全RPCと検査結果をログ記録し、(2) 呼び出し元のロールをポリシーで確認し、(3) 機密コマンドであればMPAを発動して承認を待機し、(4) 承認後にコマンドを実行して結果(戻り値・stdout・stderr)をRPC応答に添付する、という4段階を経る。Tool Proxyインスタンスは通常 [[Borg]] ジョブとしてデプロイされる。導入にはエンジニアが手元のコマンドの前に `tool-proxy-cli --proxy_address` を付ける必要があり、対象サーバー側も `admin-proxy` からの管理操作のみを許可し、breakglass状況を除いて直接接続を拒否するよう変更される。(Source: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 3 Case Study - Safe Proxies]] §Google Tool Proxy)
Tool Proxyの導入は [[Zero Touch Prod]] の目標の1つ(人間が本番に直接アクセスしない)を実現する具体策として位置づけられている。(Source: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 3 Case Study - Safe Proxies]] §Google Tool Proxy)
## 関連
- 実体: [[Zero Touch Prod]] / [[Borg]]
- ソース: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 3 Case Study - Safe Proxies]]
- 概念: [[セーフプロキシ]]
## 出典
- Heather Adkins et al. (eds.), *Building Secure and Reliable Systems*, O'Reilly Media, 2020, Chapter 3.