そこにない鍵
ここ数週間、AIエージェントがPayloのバックエンドに手を入れています。サンドボックスではなく本物です。本番データベースを読み、金額の足りなかった返金を追跡し、修正を書き、リリースする。これまで一緒に働いた中で最も有能な手であり、たいていの日は、私が最初のコーヒーを飲み終える前に、その日の働き分を稼いでくれています。
ところがある晩、ほとんど話のついでのように、本番のシークレットをリセットしましょうかと申し出てきました。やろうと思えばできたのです。止めるものは何もありませんでした。そして、深夜にだけ訪れるあの独特の明晰さとともに理解しました。バックエンド全体と、たった一つの悪い指示とのあいだに立っているのは、エージェントの行儀の良さだけなのだと。
私のセキュリティモデルは、気分だったのです。
誰もが手を伸ばすスライダー
これに気づいたとき、本能的に手が伸びるのはダイヤルです。片端に利便性、もう片端にセキュリティ、そのあいだにスライダーがある。多くをロックすれば安全に近づきますが、摩擦という代償を払います。緩めればスピードに近づきますが、露出という代償を払います。アクセス申請を出したことのある人、権限の付与を三日待ったことのある人なら、そのスライダーがいつもどこに落ち着くか、そしてどちらの側もそれをどれほど楽しんでいないかを、正確に知っているはずです。
私も危うく同じことをするところでした。確認を追加する。危険な操作の前には必ず尋ねさせる。もっと注意深く見張る。どれも結局は同じことです。危険な力をまったく同じ場所に置いたまま、その上に監督を重ねるだけ。バックエンド全体を書き換える力は相変わらず私のマシンに居座り、巧妙な指示ひとつ、あるいは乗っ取られたプロセスひとつで使われてしまう距離にあります。私はただ、もっと注意深く見張ると約束するだけです。
もっと注意深く見張ることの問題は、見張っていない瞬間が来るまでしか機能しないことです。
本当に間違っていたこと
本当の問題は、一つのクレデンシャルが何でもできたことでした。
マシンのキーチェーンに収まった一つのトークンが、データベースを読み、コードをデプロイし、シークレットをローテーションし、自分のサーバーになりすますための鍵まで読めました。「ストアの注文数をエージェントに確認させる」ことと「エージェントにバックエンドを黙って置き換えさせる」ことは、仕組みの上ではまったく同じレベルのアクセスだったのです。最小のタスクの射程が、最大の惨事の射程でした。
そう見えてしまえば、スライダーは意味をなさなくなります。問うべきは、ありふれた読み取りと全面的な侵害が、なぜ同じ杯から飲んでいるのか、ということでした。
一つのダイヤルではなく、二つのドア
そこで、スライドするのをやめて、切り分けることにしました。
データには専用のドアを与えました。行の読み書きができて、それ以外は何もできない、狭いデータベースロールです。データベースの形を変えることはできず、シークレットを読むこともできず、認証の内部に触れることもできず、何の管理者でもありません。データと直接話すだけで、システムの残りが存在することすら知りません。
危険な半分であるインフラには、まったく別のドアを与え、そのドアは敷地の外へ移しました。強力なトークンは、もう私のマシンには一切存在しません。ログアウトしました。デプロイはいまや継続的インテグレーションのランナーの中で行われ、鍵はエージェントが読めない保管庫に収まっています。エージェントはいまでもコードを出荷できます。変更を書き、コミットし、ランナーにデプロイを指示するレバーを引く。鍵を握るのはランナーです。エージェントが握るのは、ただのレバーです。
遅くなったものは何もありません。エージェントは以前と変わらぬ呼吸でデータベースを読みます。いまも一晩に何度もデプロイします。私の席から見れば、利便性は手つかずのままです。変わったのはその下にあるもので、必要になるまでは感じ取ることすらできません。
試されるのは、まずいことが起きたとき
実際に私を眠らせてくれるのは、ここです。
最悪を想像してみてください。エージェントが読むデータのどこかに隠された指示が潜んでいて、エージェントが敵に回る。あるいはマシンそのものが乗っ取られる。以前なら、手の届くところに置かれていた賞品はマスターキーでした。バックドアをデプロイし、サーバーのアイデンティティを盗み、シークレットをローテーションし、後始末を生き延びられるほど深く潜り込む。悪い夜が一度あれば、全損です。
いま、そのマシンから届く最も強力なものは、データに触れることしかできないデータベースロールのパスワードです。それが無害だとは言いません。しかし生き延びられますし、もっと重要なのは、一行で回復できるということです。コマンド一つでパスワードがローテーションされ、侵入者は締め出されます。何かをデプロイすることも、鍵を盗むことも、戻り道を残すこともできないままに。盗まれたマスターキーは、回復に一週間かかるインシデントです。盗まれたスコープ付きパスワードは、一度打ち込むだけの一文です。
セキュリティはいま、危険な鍵が建物の中にないことの上に成り立っています。
妥協というものを、正しく理解する
利便性とセキュリティを対立するものとして語るのは、ダイヤルとして捉える限り、実際に対立するからです。一方へ一目盛り進めば、もう一方から一目盛り遠ざかる。だから会話全体が、どれだけの痛みを受け入れるかという交渉になってしまいます。
しかし、ダイヤルは間違った道具です。二つのトレードオフに感じられるものの大半は、実のところ、一つのクレデンシャルに、些細なことから壊滅的なことまでの全域をまたがせていることの代償です。危険が実際にある線に沿ってそのクレデンシャルを分割すれば、緊張はおおかた解消します。便利なことは便利なままです。それらはもともと危険なことではなかったからです。危険なことは、ありふれたタスクでは決して届かない場所へ移されます。
安全は、最悪の場合に手が届くものは何かを前もって決め、それが生き延びられるものであることを確かめるという規律で買うものです。力はタスクの範囲に絞る。マスターキーはマシンに置かない。過ちの爆発半径が、建て直さなければならない会社ではなく、ローテーションすればいいパスワードになるように設計するのです。