こちらのMinimalismにしてみました。
あと、いいかげん記事も増えてきてるのでサイドメニューとか整理しました。
ツイートしてて自己完結してしまったので記録のために。
あーそういや今更だけど、stdoutとstderrはまとめてlogging driverに渡されちゃうのか。どちらなのかはdriverには渡っているのでfluentdに出せばラベル付いてるので、ログのことだけ考えれば仕組み的にはどちらに出しても扱うこと自体には問題が無さそう。
— Aki (@nekoruri) June 22, 2019
デーモンアプリケーションで想定外のエラーが出うるのであれば、構造化ログをstdoutという分離は全然ありうると思う。
— Aki (@nekoruri) June 22, 2019
でもそうしちゃうとエコシステムから外れちゃうので、やっぱり最大公約数としてはparseableなテキストでstdout/stderrかなあという気がしてきた。やはりDockerにfile descripterの概念が欲しい。チャンネル2個じゃ足りない。
— Aki (@nekoruri) June 22, 2019
理想論はさておき、現実的にはやはりコンソールアプリならstderr、デーモンアプリケーションならstdoutに構造化ログ(JSON)を出してlogging driverで振り分けてparse、stderrは想定外の非構造化エラーログに備える、が万能そう。
— Aki (@nekoruri) June 22, 2019
Dockerを使う最大のメリットは、その「踏み込んだ割り切り」という制約によるエコシステムなので、エコシステムから外れた時点で負けなんだよなあ……。Railsで車輪ガン無視しても別にアプリ書けるけどそれRailsじゃなくていいよねって話と同じ。
— Aki (@nekoruri) June 22, 2019
sourceでstdoutかstderrか取れる。
3年ぐらい同じ事を言い続けてるんだけど、そもそもサーバーレスという言葉の由来はソフトウェアアーキテクチャの話*1。
一つのタスクの実行期間を超えて、ファイルシステムやメモリ上の変数などサーバ固有のリソースに依存しないという、12 Factor Appから死ぬほど言われ続けている制約を満たすプログラミングモデルがサーバーレスの本質です。この制約に視点を置くとサーバーレスとしか言いようがない。
これを真面目にやろうとすると、キューやPub/Subによる非同期タスク(イベント駆動)が必要になってきます。これを整理したのがリアクティブシステム、わかりやすく関数という枠にはめたのがAWS LambdaをはじめとするFaaSです。
その一方で、これを満たしたソフトウェアは、AWSなりAzureなりGCPなりクラウド基盤側が勝手にサーバを増やしたり減らしたりできて、完全従量制にできたりメリットがたくさんでてきます。そういうゼロからスケールできるフルマネージドサービスの性質もサーバーレスと呼んでいます。
メリットが分かりやすいためクラウドベンダーが主張したいのはこちらの性質なんですが、でもこれって「所有せず利用する」というクラウドコンピューティング全体の流れの延長線上でしかないんですよね*2。
この設計と運用の二つの性質が混ざったのが現在の「サーバーレス」です。
というわけで、サーバーレスという単語に関しては、
× サーバが無い
○ プログラマがサーバを気にしない
◎ プログラマがサーバを(設計上)気にしてはいけない+(運用上)気にしない
と捉えるのが良いと思います。単純に「サーバが無い」というだけの解釈をしやすいのは事実なので、こういう理解をした方が楽しいよ、という話です。
日本語圏だとサーバと言えばサーバマシン(ハードウェア)を指すことがほとんどですが、英語Wikipedia見ると、サーバマシンよりも先にクライアント・サーバにおける提供側の"a computer program or a device"が先に来ますし、サーバの仮想化はVirtual ServerではなくVirtual Machineなんですよね。この英語と日本語でのニュアンスの違いが大きいのかなという気はします。
(追記 2023-12-17:正直名前として良くないとちょっぴり思ってはいます)
という話をまとめて書いてあるのでみんな買ってください😇
(2019-05-11 10:00)
あまり記事の意図が伝わってない感じなので、脚注に書いていたことを本文に組み入れました。
こんな読まれると思っていなかったのでポイントをあまり気にせず書いていたのですが、伝えたいのは以下の2点です。
(2023-12-17 18:00)
薄い本へのリンク、もう4版がでているのでそちらに切り替えました。
技術書典でふらふらしていたら、当日のじゃない方の非公式アフターで喋ることになりました。
パネルセッション前半の「技術書典6 非公式振り返り」で、ssmjp同人部からほかに2人もいるので、どちらかというと個人サークル「めもおきば」の人よりの立場で好き放題話させていただきました。
まあ詳しい内容は実況勢がたくさん居たのでTogetterを見ていただくとして。
話したこととその補足です。
もともと「普段考えていることを整理してアウトプットする機会」と位置付けていることもあり、技術書典の一般の「売れ筋」であるような解説書とかとはちょっと違う路線で、クラウドやセキュリティをテーマに、全体像や技術トレンドから勝手に分析した考え方のような「読んだ人に新しい視点を提供できる本」というエモい路線を中心にひた走っています。
そこを評価していただいている方がいて本当にありがたいかぎりです。
技術書展で @nekoruri さんが頒布する本を読ませていただいたけど、毎回自分のコンテキストを一段階掘り下げてくれる超良いポエム(賛辞)。どっかのお高いリサーチ会社から年間数百万契約して入手するレポートの5000兆倍役立つ本がた、た、たった500円とは。どんだけデフレだ。https://t.co/pbfTewpYSG
— 吉田真吾 Shingo Yoshida (@yoshidashingo) April 11, 2019
引き続き、エモいポエムコラム本というジャンルを確立すべく頑張っていきます。
d.nekoruri.jp
私の場合は、Workflowyにネタ帳の階層を作って放り込んでます。
まあぶっちゃけツールは何でも良いですが、スマホロック解除して10秒ぐらいで入力できる状況で敷居を下げておくとよいです。24時間常時ブレスト状態。とにかくキーワードを放り込んでおいて、あとで考えます。
人によってはボイスメモとかもありかもですね。最近だとScrapboxが人気なのかな。
あと、Twitterとかに書いちゃって満足してしまったネタをあとからきちんとまとめたいときは、Twilogでキーワード検索してその日の自分の前後ツイートを読み返したりします。外部記憶と検索重要。
頑張れば短い時間でも本は出ます。
とはいえ極道入稿は悪です。誰も幸せにしないので早めに頑張ろう。
湊川さんも言っていたとおり早割(今回のねこのしっぽ様だと最大20%割引)で出せばその分同じ予算で1.25倍刷れて完売リスクを減らせますし、告知などにも時間を割けます。
今回の締切ラッシュの中で、自分の中で1ページ1時間というペース配分がはっきり確立したのは良かったなと思っています。要するに100ページの本を書こうと思ったら100時間かかるので、毎日3時間掛けても一ヶ月かかるわけです。3日徹夜しても24ページにしかなりません。いいですねおれ。はやくフォルダとファイルとレポジトリを作るんだ。
今回もたくさんフルスタックしました。ありがてえ。
戦利品をフルスタックしたエンジニア 2019春 #技術書典 pic.twitter.com/6U8nPBsh6z
— Aki@めもおきば (@nekoruri) April 24, 2019
とはいえ途中で力尽きてしまい、お昼ぐらいまでに回れたのは1/3ぐらいで、残りはかなり遅めの時間でしかも最後の方まで人が多かったため流す感じになってしまったので、あとで他の方の戦利品写真をみて入手し損ねた本がかなりあったのが残念なところです。
それでもかんたん後払いシステムの電子書籍サービスが始まったこともあり、電子書籍での頒布を続けているサークル様がたくさん増えたという印象を受けました。じつにありがてえ。
今回は使えるサークル全てかんたん後払いシステムで決済しました。入手した本のリストも取れるしDLCもあるしほぼ良いことづくめなのですが、その結果として人類は頒布価格を見なくなり書典破産の危機が迫っています。ありがてえ。
まあ、そんな感じで「めもおきば」「ssmjp同人部」ともども引き続きよろしくお願いします。
本日頒布していた書籍について、
— Aki@めもおきば (@nekoruri) April 14, 2019
Gumroadでのオンライン頒布も開始しました!https://t.co/sCtFVs0aOt 総集編Vol.1https://t.co/wlxo4iNgWI 年末振り返り号https://t.co/YXnyBkeV6S 新刊(クラウド時代の設計特集)https://t.co/AOAvkKHqkf (サーバーレス本第3版)#技術書典 #めもおきば
この記事をきっかけに公開鍵暗号やPKIの在り方について議論が盛り上がってるので、ポイントになりそうな話をまとめてみます。
上の記事を読んでください、という感じなのですが、ざっくりまとめると以下の仕組みです。
・ICカードにアクセスするためのBasic Access Control:いわゆるPINとかに相当します。「パスポート番号 + 生年月日 + パスポートの有効期限」とのことなので、要するにパスポートの顔写真のページを見た人ならば分かる情報です。
・データの電子署名を確認するPassive Authentication:Basic Access Controlを通ると、券面のデータ及び、そのハッシュ値:SOD(Security Obeject Document)、SODに対する電子署名が取得できます。この電子署名は、最終的に各国が運用する独自ルートCAである「CSCA:Country Signing CA」が最上位となっています。
・カードが複製されないことを保証するActive Authentication:パスポート上のICカードが一枚ずつ持つ鍵対(秘密鍵・公開鍵)を利用した電子署名によって、物理的な耐タンパー性とあわせてそのカードが複製されていないことを保証します。
今回は、このCSCAの公開鍵証明書の入手が問題となっています。
技術的に判断できる前半については、散々言われているとおり、公開鍵証明書の秘匿性そのものにパスポートの安全性を依存するようでは論外なので、この不開示理由ははっきり間違っていると断言できます。
後半は「共通認識」があるとのことなので、外務省の回答者がそう思うんならそうなんでしょう、外務省の回答者の中では。
それでは一つ戻って「外務省はCSCAの公開鍵証明書を公開すべきかどうか」というポイントに戻ると、技術的にはいくつかの議論ポイントがあるように思います。あえて擁護側の立場を取ってみます。
なお本筋である「情報公開制度への対応として公開するべきかどうか」の話はこの記事ではスコープ外とし、あくまで暗号学的観点からの思考実験です。
公開鍵暗号アルゴリズムにおける公開鍵は、その利用相手にのみ公開鍵を届ければ良く、公開鍵という名前に反して「万人に公開される」必要はありません。これはPKIにおける公開鍵証明書に関しても同様で、ルートCAにより発行される下位の公開鍵証明書を検証する相手が入手できれば良いものです。
今回で言えば、外務省が手間を掛けて(後述)その公開鍵証明書を、想定された利用者(ここも後述)以外に公開する必要はありません。
公開鍵暗号を利用したPKIの信頼性は、その「トラストアンカー(信頼の起点)」となるルートCAの公開鍵証明書を、いかに安全に入手するかに依存しています。
安易にトラストアンカーを送ってしまうと、その途中で差し替えられてしまうなどの攻撃が考えられます。
CSCAの公開鍵証明書を入手しようと言うからにはそれを利用することが想定されるわけですが、情報開示請求という手続きの仕組みで、公開鍵証明書をセキュアに開示することが困難である、という判断はありえます。少なくとも「手間」は掛かるでしょう。
個人的には、国民からの請求に応じてトラストアンカーを開示するからには、それを正しく利用できるようにするために「請求した国民まで安全に届ける義務」が発生するのではないかと考えます。なので、もし情報公開制度により開示されるのであれば、そういった条件付けは必要かも知れません。
暗号アルゴリズムの安全性は、そのアルゴリズムがたくさんの研究者の目に晒されることによって維持されていることはご存知の通りです。パスポートのICカードの場合は、利用しているRSAは既知のアルゴリズムであり、公開鍵そのものを公開したからといって「よりセキュアになる」わけではないです。
むしろ、今後新しいRSAへの攻撃手法が見つかった際に、公開鍵を知っていることで秘密鍵を入手しやすくなる可能性は否定できません。その場合に、脆弱になった古い鍵対を捨て(revoke)、対策されたアルゴリズムでCSCA鍵対を作り直して公開鍵を再配布する必要がありますが、利用している相手が限られている方が良い、とは言えます。
発端の記事にもある通り、CSCA公開鍵証明書そのものがもともと公開情報であるため、外務省が秘匿したからと言って、言うまでもなく暗号学的に安全になることはありません。
ここからは、一般論として別の可能性に触れておきます。
たとえば、鍵対(公開鍵と秘密鍵)を生成するときに、脆弱性のある実装を用いると公開鍵から秘密鍵を入手できます*1
ほかにも、RSAには脆弱な運用パターンがいくつもあります。
とはいえ、さすがにそんな脆弱性のある実装でCSCAの鍵対を生成することはさすがに考えられない(うえに、さすがに他国から指摘されているだろう)と思われるので、この可能性は考えないことにしたいです。
いずれにせよ、現実的にCSCA公開鍵証明書は公開状態にあるため、直接は関係無い話です。おそらく暗号解読研究者の方々はとっくに入手できるルートから入手して攻撃を試みていることでしょう。
似たような話題として、同じブログの方によって話題となったマイナンバーカード上の公的個人認証に関する仕様公開がありました。
マイナンバーカード(の公的個人認証)とパスポートの最大の違いは、そもそもが利活用を目的として設計されているはずの公的個人認証の公開鍵証明書に対して、パスポートは相手国や航空会社での利用のみが想定されているという部分です。
そもそもカジュアルにパスポートのICカード上の情報が認証として一般的に利用されるようになると、そこにはパスポート上の記載事項が載っています。顔写真のデジタルデータが取得できるほか、指紋や虹彩情報などの生体情報を記録することも今後考えられます。
日本が導入したIC旅券に記録される生体情報は、ICAO(国際民間航空機関)が策定したIC旅券の国際標準において必須と規定されている顔画像・国籍・氏名・生年月日・旅券番号など旅券面の記載事項が記録されます。しかし、指紋は記録されません。なお、いくつかの国では、指紋を記録しており、また、虹彩情報を記録するための研究が進められています。
そういった前提がある以上、入出国や航空機搭乗のような場面でなく広く利活用されるべきものではないように思います。
……と思っていた時期もありましたが、以下の意見を見て考えを変えました。
いまだ民間に対して券面イメージしか開放しないことによって、パスポートや在留カードの偽造やダークウェブでの販売が横行している現実と、数年以内にRSA暗号が危殆化するリスクとを比較考量するセンスが問われますね
— 楠 正憲 (@masanork) April 24, 2019
この現状を鑑みると、暗号学的な多少のリスクよりも、民間がパスポートの暗号学的検証をできないことによる社会的なリスクの方が大きいように思います。
もともとGitHub SSH公開鍵などの過去を踏まえた上で、公開鍵だから必ずしも万人に公開することが良いわけでは無いというモチベーションからの記事でしたが、少なくともパスポートに関しては、政府としてCSCA公開鍵証明書を公開し活用を促進するべきでしょう。
個人の生体情報を含みうるデジタルデータが幅広く利活用されてしまうのには抵抗があるのですが、次世代のIC旅券とかでうまい落としどころがあると良いなと思います。とはいえ現状では犯罪対策の方が優先でしょうね。
公開鍵証明書を単に公開鍵と書いていたところを、公開鍵証明書と公開鍵にきちんと分けました。これにあわせ、PKIと公開鍵暗号の話を整理しました。
自分としては、公開鍵アルゴリズムとの関係が分かりやすいよう、ルートCAの自己署名証明書を公開鍵と簡略化したつもりだったのですが、かえって混乱を招いてしまったようです。申し訳ありません。
また最上位CAとルートCAなど表現がブレていた部分も直しました。
まとめると、あくまで技術的には「公開鍵は一般に公開されても公開されなくても良い」というように思います。その上で、パスポートのCSCA公開鍵証明書に関しては公開が望ましい、というのが結論です。
このように、いくつかの議論ポイントがある以上、公開鍵暗号だから「公開」されるべきだろう、という直感的な発想で思考停止してしまうのはちょっともったいないな、と感じたので思考実験気味にまとめてみました。
まあでもそれはそれとして、外務省の中の人そこまで考えてないと思います。
ちなみに、パスポートの規格を決めるICAO(国際民間航空機関)は以下のようにおっしゃっています。
https://www.icao.int/security/mrtd/Lists/FAQ/FAQ.aspx
Can CSCA Certificates be published on a state’s website, or would this be a breach of ICAO standards?
(公開して良い?ICAO違反にならない?)
Certificates are public information and as such can be published on a website. This is not a breach of ICAO standards.
(証明書は公開情報だから好きにして。違反じゃないよ)
技術書典6おつかれさまでした。
今回の新刊を含めて、Gumroadでのオンライン頒布を始めました。
サーバーレスや、Kubernetesを中心とするクラウドネイティブの動きが盛んですが、そういった中で、開発のしやすさ、スケーラビリティ、セキュリティ、様々な観点で「きれいで実用的な設計」について、流行りのキーワードを入口に掘り下げてみた、というのが今回のテーマです。自分のアプリケーションを設計するときに、少しでも取り入れられるエッセンスがあればな、と思います。
以下のようなキーワードを取り上げました。
コンピューティング/Function as a Service/関数型プログラミングと副作用とスケーラビリティ/分散処理による並列と複製/イベント駆動とCQRSとGraphQL/認証と認可とマイクロサービス/エッジとクラウドとオンプレミス/No-Codeとエンドユーザコンピューティング
上の記事にも書いたとおり、非同期のストリーミング処理の重要性が大いに増えています。そんな中、PubSub + FaaSだけではつらい場面が増えてきているため、いわゆるデータ解析の文脈からいくつも生まれているストリーミング処理エンジンがあります。
その中で、特に最近注目しているものについて、Getting Startedレベルですがさわってみたのでその紹介です。
Apache Spark Streaming/Kafka Streams/Apache Flink
「めもおきば」の中の人の発言に出てくる用語を解説します。Jargon file 的なやつ。一度やってみたかったんですよね、こういうの。
アウトプットしないのは知的な便秘/世の中のことはだいたいガチャで説明ができる/もったいない・ほんともったいない・超もったいない/○○したら負け/制約/抽象化戦争
サーバーレス本第3版です。
第2版の2018年8月からの8ヶ月で、Azure Functions 2.0、AWS Lambdaの大幅バージョンアップなどがあったため、細かく現状にあわせて追加された機能の紹介も入れています。また、昨年あたりからのGraphQLの急速な普及に伴って、CQRSまわりやストリーミング処理の解説も増やしました。
さらに、2018年のKnativeの公開に始まり、技術書典6直前のGoogle Cloud Next 2019で発表されたGoogle Cloud Runを中心に、Kubernetes/Dockerの世界観とFaaSの世界観の関係について、個別に節を設けて解説しました。
ボリューム的には、本文が96ページから105ページになりました。
特に説明も不要かなあと思うのですが、昨年までの総集編です。
・TechReport 2015.12(コミックマーケット89)
Hardening 10 ValueChain 体験記
クラウド四方山話「サーバーレスアーキテクチャ」
2015 年振り返りと2016 年予想
・TechReport 2016.12(コミックマーケット91)
2016 年振り返りと2017 年予想
・TechReport 2017.08(コミックマーケット92)
SORACOM 買収からわかるIoT の未来
私もセキュリティ・キャンプに参加したい!
Bluetooth mesh ってどうよ
・TechReport 2017.12(コミックマーケット93)
Hardening 2017 Fes レポート
2017 年振り返りと2018 年予想
・TechReport 2018.04(技術書典4)
なろう!フルスタックエンジニア
htc vive 買ってみた
Microsoft MVP Global Summit 行ってきた
・TechReport 2018.10(技術書典5)
サーバーレスで実現するストリーム処理徹底活用術
毎年冬コミでは、その年の振り返りと来年はやりそうな技術についてキーワードを紹介しています。2018年末は、以下のキーワードを取り上げました。
「2018 年予想」の振り返り/GraphQL によるAPI 設計手法の変化/非同期通信/ストリーム処理/ワイヤレスIoT/VR エコシステム/技術系同人誌/カラオケの原盤権/新しいプログラミング言語の普及