2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
リンクをコピー
記事をブックマーク
佐伯学哉氏(以下、佐伯):そういう特徴があると、かなりうれしいことがわかったんですが、具体的に何に使われているのか特にWASI(WebAssembly System Interface)とProxy-Wasm(Web Assembly for Proxies)について話したいと思います。
WASIはWebAssembly System Interfaceの略で、OSの上でWasm executableを動かすためのPortableなAPI、またはABIです。API/ABIという書き方をしているんですが、WebAssemblyでは関数呼び出しとかのABIが最初から決まっているので、APIを決めたらABIも決まってしまいます。なので、API/ABIと書いています。だいたいPOSIXと同じか、少し下くらいのレイヤーです。
WASIはWebAssemblyがSafeであって、Portableであることを利用しているフォーマットです。パソコンの上で直接WebAssemblyを動かすインターフェイスになるのでかなり直感的で、名前を聞いたことがある方も多いんじゃないかと思っています。
これはBytecode Allianceというコミュニティによって仕様がメンテナンスされていて、Bytecode AllianceにはMozillaとか、LucetのFastlyとか、Intelとか、Redhatとかが入っています。
WASI APIの例です。例をドドーンと出しても仕方がないので、本当にちょっとだけ紹介します。ファイルシステムやプロセスなど、およそOSの上でなにかを動かすために必要そうなものはWASIで決まっています。
左の図に書いてあるのは、いわゆるライブラリのオープン関数をどうやってWASIで実装するかという話です。中身はwasi_path_openというAPIとして決まっているという話ですね。GitHubに全関数がドドーンとあるので見ることができます。
WASIのセキュリティについてですが、WASIはWasmに加えて独自のセキュリティ機構をもつ、もしくはもつ予定です。WASIは策定中なので、いろいろと未熟だったりstableじゃなかったりします。
先ほどWasmはSafeでIsolatedでうれしいみたいな話をしたんですが、本当か? という話なんですね。これは実は語弊があって、Wasmが全部のLinuxのシステムコールを呼べれば、自由に変なことができたり、いろいろな副作用があったりするので、ぜんぜん安全ではありません。
Wasmの安全性は、ホストが提供するAPIの安全性に依存します。なので、本当にセキュアなランタイムインターフェイスを定義しようと思ったら、そこをケアする必要があります。
具体的にWASIがどうしようとしているかという話になるのですが、策定中の仕様ではCapability Baseのセキュリティ機構を導入することが決まっています。例えばファイルシステムのアクセスは、ディレクトリごとにcapabilityを取得する必要があって、POSIXとかよりもかなり粒度が細かいです。このcapcabilityの話は、microkernelとかを想起する機構、最近だとFuchsiaがそうらしいです。
いずれスマホアプリのような、セキュリティモデルがネイティブデスクトップで実現できるようになるかもというイメージです。ネイティブバイナリみたいに、Seccompでガチガチに固めなくていいのでうれしいですね。
Proxy-Wasmというのがもう1個の例なんですが、これはPortable、Safe、Openさを利用して、プロキシにやってきたL4/L7のリクエストやレスポンスを、WebAssemblyのロジックでこねくり回すためのインターフェイスです。Envoy周りの人たちがコミュニティ主導でメンテナンスしています。
どういうことかというと、パケットやHTTP通信が来た時に呼ばれる関数をWasm側からexportして、Envoyなどのプロキシは通信が発生した際にその関数を呼びます。呼ばれた側のWasmは、さらにプロキシ側が定義したAPIを呼び出して、ログを書くなり、レスポンスを返すなりします。
これはWasmのオブジェクトファイルで決まっている双方向のImport/Exportができることで実現されている機能です。
そんなことをして何がうれしいのかという話ですが、Envoyは以前は同じ仕組みを前からC++で書いたstatic libraryを差し込むことで実現していました。
それと比較した時のWasmの利点は、まずSafeであることです。Untrustedなコードを実行できます。C++はただのプログラムなので、なんでも悪いことができてしまうんですよね。しかも、Portableです。
また、Language-independentなのでC++だけではなくて、RustやGoでもEnvoyのプロキシを実現できるようになります。これはかなり便利な一般化ができるという話で、現在だとLuaくらいしかやっていないフィールドです。
Proxy-Wasmのモチベーションを一般化するといろいろなことがわかって、双方向のAPIが欲しくて、SafeでPortable、Fastに動いてほしい場所があるならば、実はそこはWasmの適任の場所であるという話があります。
In-kernel executableとかEthereumとか、一般のプラグイン機構とかもうまくWasmを利用できるかもという話があるんですね。みなさんも「これをWasmでもっとうまくやれるんじゃない?」というケースがあったら考えてみましょう。特定の言語を使っているとか、APIが言語決め打ちとか、Vimとか、Vimのエディタプラグイン機構とか、ETLとか、いろいろなものがユースケースとしてあり得ると思っています。
Proxy-WasmはFastlyのCDNなどかなり似た事例が存在します。
これはちょっと余談なのですが、実はProxy-WasmをメンテナンスしているTetrateに最近転職しました。Proxy-Wasmの開発にかかわっています。Enterprise Service Meshをやっている会社で、サンフランシスコにリモート勤務しているので最近はドル円の動きに一喜一憂しています。
WASI的なモチベーションも同じように一般化できて、SafeでPortableな場所が欲しいところにはWasmが使えるという話です。
エコシステムは羅列をするだけなので、サラッと流していきたいと思います。ランタイムはWasmtime、Wasmer、Lucet、WAVM、Wasm3、V8などいっぱいあります。しかもこれで全部ではないので、興味があればみなさんも自分だけのランタイムを探してみてください。
Toolchainは、最初に言ったように言語ネイティブのToolchainがバックエンドとしてサポートすることが多いので、かなり多くの言語がWasmをサポートしています。
一方で、Wasmはまだまだ未熟なので整備中ものがたくさんあります。例えばDynamic linkや、デバッグのDwarf/Debugger仕様や、Inter-Language Type Procedureなどが今策定し直されていて、今の時代に低レイヤーの仕様が開発されるのを見るのは楽しいなと思います。
まとめです。Wasmは複合的なアツさをもっています。Javaが目指したもの、CLIが目指したもの、NaClが目指したもの、あとLuaがやっていることなど、いろいろなことをカバーしていて、アツいよという話が伝わっていればうれしいです。
特にOpenさが多様な応用先を生む源泉になっています。これからもいろいろな分野で応用されていくはずなので、「みなさんも君だけのWasm Embedding Interfaceを考えよう」というまとめをさせてもらいたいなと思います。以上です。
司会者:ありがとうございました。質問が来ています。「Proxy-Wasmという存在と、EnvoyのプラグインをWasmで書くというのはどう違うのでしょうか? それとも同じでしょうか?」
佐伯:絶妙な質問ですね。僕も同じと言い切っていいのかちょっと自信がないんですが、ほぼ同じです。Proxy-Wasmはプロキシがプラグインを書きたかったらどういうAPIをImportして、どういうAPIをExportすればいいかという仕様が決まっていて、Envoyはそれに準拠したProxy-Wasmの実装をもっています。
しかも現状Envoyは、一切Proxy-Wasmを拡張していないので、今は同じだと言っていいと思います。Proxy-Wasmが仕様で、Envoyはそれを実装しているという話になりますね。
司会者:ありがとうございました。
関連タグ:
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
職場であえて「不機嫌」を出したほうがいいタイプ NOと言えない人のための人間関係をラクにするヒント
2024.12.12
今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
PR | 2024.11.22
「闇雲なAI導入」から脱却せよ Zoom・パーソル・THE GUILD幹部が語る、従業員と顧客体験を高めるAI戦略の要諦
2024.12.11
大企業への転職前に感じた、「なんか違うかも」の違和感の正体 「親が喜ぶ」「モテそう」ではない、自分の判断基準を持つカギ