世界を動かす技術を、日本語で。

AWSで20年、常に私の仕事ではない

概要

  • AWSアカウント 作成からTarsnap開発までの初期体験
  • Amazon S3やEC2 など初期AWSサービスとの関わり
  • セキュリティや技術的課題への 提案とフィードバック
  • FreeBSD対応 やAPI署名方式の議論
  • IAMやSigV4など AWS進化 の現場でのエピソード

AWSとの出会いと初期体験

  • 2006年4月10日22:31、 初めてのAWSアカウント 作成
  • Amazon S3発表 に興味を持ち、セキュアなバックアップ問題を意識
  • WebサービスとしてのS3に魅力を感じる
  • 1998年からWebサービス構築経験あり、HTTPでの世界記録計算協調経験
  • 当時は新サービスごとに 個別申請が必要
    • デフォルトで有効だったのはAmazon Simple Queue Service(SQS)とAmazon E-Commerce Service(ECS)
  • ECSは最初期のAWSサービスであり、現在はほぼ歴史から消去

セキュリティへの関心とAWSへの提案

  • 当時 FreeBSD Security Officer としてセキュリティ重視
  • AWSリクエストはAPIキーで署名されていたが、 レスポンス署名は未対応
  • HTTP通信が一般的で、 レスポンスタンパーの可能性 を指摘
  • AWS Developer Forumsで指摘するもAmazon側の反応は不明
  • TLS普及後は重要性低下も、 エンドツーエンド署名 の重要性を主張

EC2登場とFreeBSD対応への挑戦

  • Amazon EC2登場 後、FreeBSD対応を目指す
  • Jeff Barr経由でAmazon内部と連絡、2007年初に 初NDA締結
  • 当時のAmazonは ファックス利用、署名送付で手間が発生
  • 「Custom Kernels」機能が必要で、2007年11月にRed Hat対応と同時にリリース
  • FreeBSD用Amazon Kernel Images公開APIのアカウント許可
  • Xenのセキュリティ監査をAmazonに提案、Tavis Ormandyを推薦
  • TavisがXen脆弱性を報告(CVE-2007-1320/1321)

セキュリティとユーザー視点での機能要望

  • Second LifeでのAWSユーザーミートアップで
    • EC2インスタンスの リードオンリーrootディスク と再起動時のメモリ完全消去を要望
    • FreeBSDパッケージビルド用途、ローカルカーネルエクスプロイト対策
  • 初期のAmazon側は理解不足も、説明後に納得
  • 18年後の EC2 Instance Attestation 登場に興奮

一貫したフィードバックと設計論

  • 2007年末、「Eventual Consistency」問題を指摘し「Eventually Known Consistency」モデルを提案
  • S3は後に 高可用性と高整合性 を両立、DynamoDBは整合性選択可能
  • 理論的にはEventually Known Consistencyが理想と主張

FreeBSD/EC2の技術的課題

  • 2008年初、Kip MacyがFreeBSDのPAE対応を実現
  • AmazonからAMIツールの内部コードを受領し、FreeBSDへ移植
  • Rubyスクリプトでbashを生成する設計の非効率さを体感
  • FreeBSD AMI/AKI作成は成功も、 Xen 3.0のバグ でEC2上で起動不可
    • Xen 3.1で修正されるも、ABI非互換のためAmazonはXen 3.0を継続利用

新サービスへの早期フィードバック

  • 2008年3月、Matt Garmanから「Elastic Block Storage」アルファ招待
  • サービス設計段階でのフィードバックの重要性を強調

Tarsnap開発とAWS API署名問題

  • 2008年4月、Tarsnapのプライベートベータ開始、Amazon SimpleDBをバックエンドに採用
  • SimpleDB署名方式の カノニカリゼーション衝突 を発見し報告
  • Amazonは「signature version 2」設計で意見を求め、ドキュメント改善やテスト協力依頼
  • 2008年6月、SimpleDBのNextTokenが base64エンコードJavaオブジェクト であることを発見
    • 暗号化・署名の必要性を指摘し再三報告も、初期対応なし

Amazonとの採用面接とIAM構想

  • 2008年、Jeff Barrの勧めでAmazon入社検討
  • Al Vermeulenとの電話面接で例外処理の是非を議論しすぎて失敗
  • 2008年11月、AWSスタートアップイベントで初めてAmazon社員と対面
  • アクセスキーの権限分離、 IAMやSigV4 の必要性を議論
    • 2010年IAMプライベートベータ、2012年SigV4登場

FreeBSD/EC2の進展とネットワーク課題

  • 2009年、Xen 3.1ホストでFreeBSD起動に成功も本番環境は依然Xen 3.0で停滞
  • EC2のデフォルトファイアウォールが ICMPブロック のためPath MTU Discoveryが機能せず
  • 2009年12月、解決策がEC2マネージャに受け入れられるも、実装状況は不明

この流れで、AWS初期からの 技術的挑戦・フィードバック・セキュリティ意識 と、ユーザー視点でのサービス進化への貢献が語られている。

Hackerたちの意見

著者は「ヒーローはただの無給のアマゾン社員だ」と言ってジョークにしていますが、現実が面白いからってジョークになるわけじゃないですよね。ここでの非対称性は驚くべきものです。私は、すでに効率的な価値抽出マシンに無料でR&Dを提供したくないから、プライベートな研究を控えています。著者は少なくとも依存関係に基づいて貢献していましたが、その依存関係がない場合、こんな一方的な関係では「オープンに貢献する」ことを正当化するのは難しいです。特にアマゾンは、かつて許容されていたオープンソースの経済的前提に大きなダメージを与えました。「ビジネスソースライセンス」を採用するプロジェクトが増えてきたのも、オープンな作業がハイパースケーラーのマネタイズのための無料のインプットにならないようにするためです。これらの開発者たちはアマゾンが強欲だと知っていて、彼らのコミュニティの貢献が最終的に向かうのは、元のプロジェクトからサポートやコミュニティの関与を奪い、同じソフトウェアの管理されたバージョンにユーザーを誘導する無給の労働だと気づいています。

私は「運が良い」ことに、これについて考えるほど賢くも重要でもありません。とはいえ、私は全面的に同意します。今のところ、私が個人的に公開できるものは、完全にオープンソースか、完全にプライベートのどちらかです。オープンソースを選ぶのは、誰かのアホが大金を稼ぐことにならないと確信できる場合だけです。

「ビジネスソースライセンス」を採用するプロジェクトが増えてきたのも、オープンな作業がハイパースケーラーのマネタイズのための無料のインプットにならないようにするためです。彼らはAGPLやGPL3を使うことができるけど、通常はハイパースケーラーでは禁止されています。実際、BSLを選ぶような会社はオープンソースを本当にやりたかったわけではなく、実際には開発者の間での好意を買うために、見せかけでやっているだけです。

誰かがAmazonが自分の書いたソフトウェアを使うのが嫌なら、著作権ライセンスでAmazonの使用を明示的に禁止すればいいんだ。こう言うのは全く合法だよ:「Amazon(とその他の誰か)を除いて、誰でもこの目的で使っていいよ、ただし…」Amazonはそのソフトウェアを意図的に使うことはないだろうね。潜在的な法的責任を考えると、それは価値がないから。でも、必要だと思ったら自分たちのバージョンを書くことはあるかもしれないけどね。

私はFreeBSDをたくさん使っていて、メーリングリストにも登録していたので、これらの出来事をよく覚えています。なんでこんなモンスター企業に無料で労働力を提供するのか理解できません。ボランティアは楽しいこともあるけど、ハイパー資本主義の会社に自分の時間とスキルを寄付するのは短絡的だと思います。適切な報酬があったことを願っていますが、「早期アクセス」は含めません。

EC2のIAMロールについての意見には強く反対です。>「特にCapital Oneの侵害後の緊急性を考えると、有用な改善だ」と言われていますが、私の見解では特定の脆弱性の緩和に過ぎず、根本的な問題、つまり不適切なインターフェースを通じて資格情報が露出していることには対処していません。著者は安全に資格情報を交換するためにどのような代替インターフェースを提案していますか?私が考えられる他のアプローチは、猿の手が秘密の材料に直接触れることを許可するものです。OutlookやSlack、TeamsがIMDSv2よりも安全であるはずがありません。PFXファイルのようなものを手動で回している時点で、すでに負けていると思います。IAMロールの全体の目的は、すべてを手続きではなくポリシーの問題にすることです。この違いは、すべてのエッジを通してプレイすると狂っています。IAMポリシー管理は、他の経路よりもはるかに簡単にロックダウンできます。私は、特定のベンダーのために使用している署名キーをチームのメンバーが見ることが数学的に不可能であることを、監査人に5分で証明できます。作成時に不適切なポリシーを適用したため、ルートアカウントで削除できないKMS署名キーもあります。これらのものは、うまく使えば非常に強力です。Azureにも、mssqlサーバーへのアクセスをはるかにスムーズにする似たようなアイデアがあります。

Scalewayの同等のものは、ポートが1024未満の接続しか許可してないんだ。これって可愛いし、CAP_NET_BIND_SERVICEを持つプロセスだけがトークンを取得できるってことだね。vsock(7)ソケットでも似たようなことができるよ。これの利点は、アプリケーションを騙してvsockソケットに接続させるのが難しいってこと。どちらも、プロセスにCAP_NET_BIND_SERVICEを与えて「特権」ソケットでリッスンさせるのが全く珍しくないっていう弱点があるけど、それがないものには対抗できるんだ。さらに良いのは、ブートストラップの認証情報をDMIデータなどに入れておくことだね。そうすれば(Linux上では)rootだけが読めるsysfsディレクトリの中に入ることになる。

著者は、資格情報を安全に交換するためにどんな代替インターフェースを提案してるの?リンク先の記事を読めば、当時はXenStoreを使ってOSカーネルに資格情報を渡すことを提案してたのがわかるよ。Nitroの場合は別のアプローチが必要だけど、今の方がやりやすいはず。カーネルがそれを持っていれば、合成ファイルシステムを通じてアプリケーションに公開できるんだ。しかも、そのファイルシステムには所有権や権限を設定できるからね。EC2のIAMロールに反対してるわけじゃないよ。むしろ、役割の資格情報を送信するために最悪のインターフェースを選んだって主張してるんだ。

2024年4月、私はアマゾンの人に「今、FreeBSD/EC2をうまく運営できていない」と打ち明け、私の仕事をサポートするための資金を見つけられないか尋ねました。ある時点で時間とお金は交換可能だという理論からです。>私はGitHub Sponsorsを通じてアマゾンから週10時間のスポンサーシップを1年間受けました。何の理由かは分かりませんが、あなたが時給300ドルしか請求していなかったことに驚いたのを覚えています。これは、ただのL6のグーグルエンジニアがもらう給料と同じです。今はもっともらっていることを願っています。[1] https://news.ycombinator.com/item?id=30188512

アメリカのIT業界の時給は本当にクレイジーです。アメリカ人を雇うことの価値が本当にあるのか疑問です。ドイツ語圏のEUでは、120€/hで本当にトップクラスのエンジニアを雇えます。さらに東に行けば、もっと安くなります。

素晴らしい伝説ですね。旅の過程を読むのは魅力的です。でも、ここに出てくる名前(例えば、Tavis OrmandyはProject Zeroで有名です)を聞くと、トップエンジニアでも面接で失敗することがあるんだなと思います。特に付け加えることはありませんが、実際にいろいろなことをやった人のブログ投稿が好きです。過去の良いまとめですね。

大きな企業に時間を割かないという意見があるのは理解できるけど、ちょっとした話をして、もっと大きなポイントを伝えたいな。2006年か2007年に、あるプロジェクトのアイデアを思いついて、すごくワクワクしてメーリングリストを作ったんだけど、結局そのプロジェクトは進めなかったんだ。すごくユニークな名前だったんだよね。2012年に、別の開発者が同じ名前のプロジェクトを立ち上げたんだけど、その時メーリングリストが使われているのを見て、引き継げるかどうか聞いてきたんだ。僕は喜んでOKしたよ。だって、彼も暗号学とオープンソースに取り組んでいる人だったから、当時(今もだけど)僕の好きなことだったんだ。プロジェクトは「scrypt」で、開発者はコリンだった! :) 当時の僕はコリンやtarsnapについて何も知らなかったと思う。時には、期待せずにコミュニティを感じる人たちに対してできる親切をすることが大事だよね。カルマは積み重なっていくし、その恩恵は大きいけど、いつも言葉にするのは難しいんだよね。

Netflixは大きなFreeBSDユーザーで、AWSもたくさん使ってるけど、AWS上でFreeBSDを動かしてるのかな?彼らはボランティアのインフラに大きく依存してるから、明らかにスポンサーになりそうだよね。

彼らはやってないと思うよ。Netflixは特にカスタムビルドのCDN/ストリーミングサーバーにFreeBSDを使っていて、直接ISPにホスティングしてるんだ…AWSではないよ。ただ、ユーザー向けのカタログアプリはAWS上のUbuntuサーバーで動いてるけどね。少なくとも、HNで読んだ限りではそうだったと思う。

実際、Jeff BarrのAWSユーザーのミートアップの一つで、Second Lifeでのことなんだ。 このフレーズには、笑顔にさせる要素がたくさんあるね。Second LifeがAWSの初期ユーザーの一つだったことを忘れがちだけど、最初はS3だったんだ。ジェフ・ベゾスは2005年のラウンドに個人的に投資してくれて(そのラウンドでLinden Labはユニコーンになったんだ)、Jeff BarrとAWSの仕事を紹介してくれた。お返しに、Jeff BarrはSecond LifeでAWSのミートアップを開催し始めたんだ。この時期は、Jonathan Coultonからロイターまで、たくさんのグループがSecond Lifeの拠点を設立していた頃だよ。

初めてSecond Lifeを見た時のことは忘れられないな。たしかフラッグスタッフでのカンファレンスだったと思う。君たちはみんながやってたように、1つの折りたたみテーブルのブースを持っていて、Second Lifeを動かしているコンピュータがあったんだ。うちのチームはそれをすごくクールだと思って、後でオフィスで結構話題にしたんだよ。2002年か2003年のことだったと思う。Evolution Roboticsと一緒にいて、ER1という新しいホビー用ロボットを披露してたんだ。いい思い出だね!

このスレッドでの「Amazonのための無料労働」という枠組みは、ここでの核心的なダイナミクスを見逃してるね。コリンは慈善活動をしていたわけじゃなくて、Tarsnapが文字通りそれに依存しているから、FreeBSDをEC2で動かしていたんだ。それがオープンソースへの貢献の最も健全なモデルだと思う。自分のプロダクトが依存しているインフラを修正することで、下流の皆も恩恵を受ける。逆に、Amazonが自分のニッチなプラットフォームに興味を持つのを待つのは、永遠に待つことになるかもしれない。それは、例えばインディー開発者がAWSが管理するサービスにラップされるライブラリを書くのとは違う計算だね。

AWSは何年も明確なリーダーだったけど、今は道を見失った感じがする。市場のリーダーとして、ビッグローンチで先行する方法を知ってたのにね。今は、どんどん遅れを取っている世界をうまく乗り越えられずにいる。GenAIでの大きな初期のミスが、その流れを加速させたみたい。過去の勢いでなんとか動いてるけど、その戦略は長続きしないよ。