unhurried

コンピュータ関連ネタがほとんど、ときどき趣味も…

記事一覧

ダブルス対戦表作成プログラム

仲間内でテニスの大会を行うことになり、対戦表を作ることとなった。トーナメントや総当たり形式であれば簡単であるが、今回は次のような複雑な条件で組む必要があった。

  • ダブルスのペアを固定せずに一定数のゲームを実施する。
  • プレイヤー全員が同じ回数だけゲームに参加できるようにする。
  • 同じプレイヤーの組み合わせのゲームや同じペアとなることをできる限り防ぐ。
  • 同じプレイヤーができる限り連続してゲームにならないようにする。

これらの条件を満たす対戦表を人力で作るのは困難であったため、簡単なプログラムをPythonで実装した。難しいアルゴリズムを使っている訳ではなく、乱数ベースで条件を満たす組み合わせをひたすら探す単純なものではあるが、実装内容を紹介する。

OpenID Summit Tokyo 2020まとめ

OpenID Summit Tokyo 2020が2020年1月24日に開催された。私は残念ながら参加できなかったが、公開された資料の中から興味のあるものを読み込んで、簡単に要点を整理した。

The Future of Identity

  • パスワード認証(エンタープライズ環境)
    • エンタープライズSSOが主流となり、Password Vault(パスワード管理システム)はPrivileged Account Managerを除いて不要となるだろう。
  • パスワード認証(コンシューマ環境)
    • パスワードマネージャーにはユーザビリティの課題があり、Social Sign-Onにはプライバシーの課題があるため、OSが提供するSoftware Tokenを利用したWeb Authnが主流となるだろう。
  • ID連携プロトコル
    • SAMLはレガシーなシステムで使われ続けるであろうが、OpenID ConnectとSCIMが標準となり、インフラの一部となるだろう。
  • アクティブクライアント
    • モバイルOSがログイン・決済の管理やパーソナルアシスタントとしてユーザーに代行して動くアクティブクライアントになるだろう。将来的にはユーザー間の繋がりの提案やユーザー行動の監視による異常検知、ユーザー行動の助言も行うようになるかもしれない。
  • その他
    • 量子コンピュータの登場によりPKIでは新しい鍵交換メカニズムが必要となる。
    • インターネットのバルカニゼーションによりIDが分断され、デジタル国家の境界となる。

Personal Digital Transformation and Holistic Digital Identity

  • Identityの専門家はPersonal Digital Transformation (PDT) による新しい要求を認識できていなかった。
    • デジタルサービスの種類やユーザーのサービス利用時間の増加、様々なデバイスの登場
    • プライバシー保護に関する要求高まり
    • バイスやサービスプロバイダの変更、年齢を重ねることによる記憶力の低下、デジタル資産の相続といった、長期間の利用によって生じる問題
  • これらの変化はゆっくりと進んだために、変化を感じ取ることができなかった。
  • PDTにより物理世界でできているIdentityの扱いがデジタル世界でも求められるようになる。
    • ユーザーが記憶したパスワードを入力して行うアクセス制御は最も原始的な方法である。
  • IdentityはSelfness(自己の同一性、独立性)とWhoness(他と区別する特徴)に分解できる。
  • 従来のIDベースのサービスは基本的なWhonessの提供であり、それぞれには以下の技術が対応する。
    • Whoness:OIDC Aggregated and Distributed Claims、DIDs、OpenID SIOP
    • Selfness:認証器・ウォレットアプリ、IDF Hub、Hyperledger Ariesエージェント

Enabling Large-Scale Multi-Party Federations with OpenID Connect

  • 研究・教育分野では多くの大規模なIDフェデレーションが行われているが、ほとんどはShibbolethで構築したSAML2で行われている。
  • OpenID Research and Education Working Groupでは研究・教育分野での利用を検討していて、Shibbolethプラグインも一部の機関で登場してきている。
  • SAMLの反省点を踏まえ、スケーラブルなフェデレーションを実現するため、OpenID Connect Federationの策定が進んでいる。
    • SAMLではフェデレーション運用者が全ての参加組織のメタデータを管理する必要があるが、OIDCFでは階層的なTrust Chain構築によりこれを不要としている。

次世代 IDaaS のポイントは本人確認

  • Identity is the new perimeter
    • サイバー攻撃やデータの不正利用・窃盗リスクの影響が大きくなっている。一方で クラウドサービスやBYODなどIT環境の激しい変化もある。
    • これに対応するにはゼロトラストモデルに従い、従来のネットワーク型セキュリティをアイデンティティ型セキュリティに変えていく必要がある。
  • Idenrity Management for Enterprise
    • 社員の入社・異動・退職に対して迅速なID・アクセス権管理が求められる。
    • IDaaS選定にあたっては、SaaS連携機能(プロビジョニング・フェデレーション)、ID管理機能(オンプレ連携)、セキュリティ監視サービスがポイントとなる。
  • 新たな要件の発生
    • 米国国防省は取引先企業に下請け企業含めたサプライチェーン全体においてNIST SP800-171(IDにかかわる要件が33件含まれる)への準拠を求めた。
    • 各組織で身元保証してフェデレーション連携するにも、管理・身元保証する組織がないみなしごIDが発生するため、これらを管理する機能が必要となる。
      • 例えば、中小企業ではフェデレーションに対応した認証基盤を持っていないことがある。
    • Proofing(本人確認)、Provisioning、Federation、FIDOが次世代IDaaSの要素技術となる。

OIDC活⽤で⽬指す⼈やサービスがつながる世界の社会実装

  • bitkey社のプラットフォームのアーキテクチャについて解説されている。
  • 各社のサービスや製品をつなげるために3層構造のシステムアーキテクチャとしている。
  • 4つのKey Technology
    • ID Access Controller:アクションごとに必要な認証強度の管理
    • ID Converter:IDaaSとして各サービスのID連携を行う
    • Personal Data Protector:個人情報保護とユーザーへの同意確認
    • Rights Deal & Key Gen:ID間での権利の認可と鍵生成

OpenID Connectとネイティブアプリを取り巻く仕様と動向

  • Yahoo! JAPANのネイティブアプリでのシングルサインオン(SSO)
    • ネイティブアプリのログインをシステムブラウザを利用してOpenID Connectで行う場合、ユーザーが普段プライベートモードや別のブラウザアプリを使っていると、ブラウザのログインセッションを活用したSSOができない。
    • これを解決するため、Yahoo! JAPANでは同一ベンダーのアプリのみからアクセスできる共有ストレージを利用して、アプリ間でログインセッションを共有する仕組みを実装している。
      • この仕組みは1タップログイン(2013年~、月間431万回)もしくは0タップログイン(2014年~、月間909万回)として提供している。
  • Open ID Connect Native SSO for Mobile Apps
    • Open ID Connect Native SSO for Mobile Apps(2019年7月にdraft 03公開)の策定が進められている。
    • 仕組みはYahoo! JAPANの1タップ・0タップログインと基本的には同じ。
      • 同一ベンダーのアプリのみアクセス可能な共有ストレージにIDトークンとデバイスに対して発行されたクレデンシャルであるdevice_secretを保存して、アプリ間で共有する。
    • SSOの概フローは以下の通り。
      • アプリ1はAuthorization Endpointへのリクエストで、scopeパラメータにdevice_ssoを指定する。
      • アプリ1へのToken Endpoitのレスポンスで、IDトークンと一緒にdevice_token (device_secret) が返却される。
        • IDトークンのds_hashクレームにdevice_secretの紐づけ情報(ハッシュ値など)が格納される。
        • IDトークンのsidクレームにSSOセッションIDが格納される。
      • アプリ2は共有ストレージから取得したIDトークンとdevice_secretをToken Exchange RequestとしてToken Endpointに渡す。
      • アプリ2へのToken Endpointのレスポンスで、アクセストークン、リフレッシュトークン、IDトークンが返却される。
        • リフレッシュトークンはSSOセッションが無効になったタイミングで無効になる。

B2C企業向けクラウドID基盤「 SELMID 」のご紹介

  • パスワード利用の限界や顧客属性の保証(本人確認による情報の正確性担保など)ニーズの高まりを受けて、IDaaS製品であるSELMIDの提供と導入支援をしている。

    • SELMIDはMicrosoft Azure AD B2Cを基盤として追加機能を自社開発しているとのこと。
  • 主な提供機能

    • SNSログイン(LINEなどの国内SNSにも対応)
    • 既存の組織ID基盤との連携
    • キャリアAPIや公的証明書での本人確認
    • Capy(リスクベース認証サービス)と連携したリスク判定
    • LINE、FacebookなどのSNSへのプッシュ通知
    • メールシステムとの連携
    • チャットボットとの連携(LINE経由での問い合わせへの自動応答)

OpenID Connectを活用したgBizID(法人共通認証基盤)の現状と今後の展望

  • 経済産業省では行政手続きのデジタル化とデータ活用のためのプラットフォーム構築を進めている。
    • 法人版マイナンバーである法人番号を活用し、1つのIDで複数の行政サービスにアクセスするための認証基盤「GビズID(法人認証基盤)」を2019年2月にリリースした。(個人事業主も利用可能)
  • GビスIDは「NIST SP 800-63-3」や「行政手続におけるオンラインによる本人確認の手法に関するガイドライン」との整合をとり、以下の2系統で提供される。
    • gBizIDエントリー:オンラインで発行可能。ID・パスワードによる単要素認証。
    • gBizIDプライム:発行には印鑑証明証などの法人確認手続きが必要。所有物による二要素認証。従業員用のgBizメンバーIDを発行可能。
  • GビズIDの認証機能
    • OpenID Connect Authorization Code Flowに準拠する。
    • パスワードポリシーは8文字以上(NGワードあり)とシンプルで、複数文字種や定期的な変更は求めない。
    • パスワードロック、Cookieベースの端末管理によるログインアラートにも対応
    • 所有物認証にはスマホアプリ(ボタン押下・指紋認証・顔認証)もしくはSMSで送信するワンタイムパスワード入力のいずれかを利用する。

Developer Summit 2019 Summerまとめ

Developer Summit 2019 Summerで参加したセッション(一部)の概要をまとめた。

大規模レガシー環境に立ち向かう有機的な開発フォーメーション

https://www.slideshare.net/i2key/devsumi-152929762

リソース効率性(稼働率を重視)とフロー効率性(リリースの早さを重視)のいいとこ取りをしたい。

タウンワークでの事例

責務ごとにチームを分け、各チームごとに予算枠を決める。 → 現場裁量で業務を進めることができる。(マイクロサービスからアーキテクチャを除いたイメージ)

  • 商品開発チーム(求人情報機能開発)
  • グロースハックチーム(CVR向上、UI/UX改善)
    • フロー効率(開発サイクルの速さ)重視、アジャイル開発
  • 安定稼働チーム(障害対応/SRE)
    • 組織的ゆとりとして、普段は安定稼働のためのアーキテクチャを含めた改善を行う。
    • 障害発生時は全力で解決に当たる。

ヤフーのアプリにおける会社全体での業務効率化について

Yahoo! JAPANのネイティブアプリは50以上あり、サービスごとに開発チーム(エンジニア、デザイナ)が分かれている。チームの大きさや開発手法もそれぞれ異なるため、サイロ化が課題となっている。

この解決のために、CTO室アプリ統括部という全社横断チームを作った。

  • メンバーはサービス開発と兼務。
  • 黒帯(特定領域の第一任者)も参加し、相談しやすい環境を作る。
  • 開発はペアプロエリアで週4時間(2時間 x 2回)。
横断チームでの取り組み事例
  • 既存のアプリから機能を抜き出して共通ライブラリ化(ログイン処理や、アップデート機能など)
  • 新技術(OSの音声機能対応、機械学習など)の調査・サービスへの取り込み
  • 社内SDKOSS化(サービスの目標に直結しない活動にも取り組みやすい)

実践 Engineering Manager ~理想のエンジニアチームを目指して~

https://speakerdeck.com/_atsushisakai/practice-engineering-manager

家族アルバムサービス「みてね」のマネージャとしての思想と実践について

マネージャがストレスを抱えないようにしていること
  • 目標に対してひとつずつやっていく。
  • できない・わからないことはオープンにする。
  • せっかくなので充実したキャリアになるように意識を持つ。
  • …など
理想のチームとは
  • エンジニアがプロダクトに責任を持ち、ボトムアップで意見・提案を上げられる。
  • 様々な視点で振り返りを行い、失敗や意見の対立を受け入れて学習していける。
エンジニアリングマネージャの役割

エンジニアが働きにくい状況の防止・検知・除去。そのために以下を行っている。

  • 意見が対立したときの対処方法など、最低限のチーム運営ルールを作る。
  • アクション可能なチーム・個人の目標をディスカッションして作る。
  • 定期的な振り返りで成功・失敗を賞賛し、失敗は影響を最小化して改善につなげる。
チーム独自の学習・ボトムアップ文化
  • ユーザーストーリーマッピングを企画とエンジニアが一緒に実施し、要求や課題の理解を深める。
  • バックログの準備会議を行い、エンジニア目線での機能提案を行う。
  • リリース管理(QA進行管理や関連部門との調整など)を輪番制にして、開発工程の影響範囲を認識する。
  • エンジニアがリーダーになり、小さな改善・課題をプロジェクトとして解決する。

ソフトウェアアーキテクチャ組織力

https://speakerdeck.com/hirokidaichi/power-theory-of-software-architecture

アーキテクチャとは何かをしにくくする代わりに、何かをしやすくする構造

例)Web開発フレームワークは、Web開発以外をしにくくする代わりに、Web開発をしやすくする。

→ 社会をとりまく目に見えない力を生み出す構造 = アーキテクチャ

アーキテクチャを構成する様々なパースペクティブ
  • プロジェクト(マネジメント)
    • プロジェクトとプロダクトの依存関係は相似する。
    • ウォーターフォールでは設計フェーズで全てのシステム依存関係を定義するが、アジャイルでは漸進的に改善していく。
  • 組織構造
    • 組織とシステムは同じ構造に変化しやすい。(悪い組織構造 ⇔ 悪いシステム構造)
    • 技術的負債は組織がシステム構造を必要な速度で変える能力を失うこと。
  • ビジネス構造(モデル)
    • ミッション → 戦略 → アクションという目的・手段構造に合わせたシステム構造が望ましい。
    • ビジネスの変動に対してロバストになる。(アクションが変わったときは対応するシステム要素のみ変更すればよい。)

アリババW11を支えるインフラの技術

天猫(B2B向けのECサイト)が11月11日(W11)に開催する巨大セール 2018年の実績:取り扱い高 3.5兆円/日、商品発送 10億件

このセールに対応するために毎年インフラの改善を積み重ねてきた。

  • CDNキャパシティの予測精度向上
  • リソーススケジューラの開発(リソース管理の手順書が2000を超えてきていた)
  • 複数リージョンに跨ったリクエストの分散
  • オンライン処理とバッチ処理のリソース管理統合(リソース融通)
  • ストレージへのアクセスをTCPからRDMAに変更
  • …など

SI × Webの総合力で切り拓く新しいエンジニアのキャリアパス

(株式会社メドレー:オンライン診療アプリCLINICSなどを展開する)

従来はアプローチが異なっていたSI系とWeb系のエンジニアだが、X-Techの登場で両者のスキルの組み合わせが求められるようになってきている。

  • X-Techでは法規制・ガイドラインへの対応や関係省庁との調整が必要となる。
  • このため、Web系のテクニカルスキル(開発スピード、モダン技術)に加えて、SI系のビジネススキル(業務設計、調整)が求められる。
医療系システムでの大変なところ
  • 日本国内法の適用が及ぶ場所に設置する必要がある。
  • 医療機関に対して必須となるクライアント認証
  • レガシーな医療システム(病院内システム)との連携

クラウドネイティブ時代のマルチテナントアーキテクチャとデータ設計

(株式会社エイトレッドクラウドアプリ基盤ALTLED Work Platformを開発)

アーキテクチャ:AngularJS + Java (JAX-RS) + MongoDB / Elasticsearch / Redis

アーキテクチャ詳細(バックエンド)とマルチテナント対応方法
  • APサーバ:ECS(on EC2)
  • MongoDB
    • EC2上に構成(プライマリ1台、レプリカ2台)
    • テーブル名でテナント分離 → 今後はサーバー分離を入れていく
  • Elasticsearch
    • インデックス(RDBでのテーブル)でテナント分離
  • (参考)リクエストのテナント識別
    • セッションにテナントIDを入れている(できればドメインで識別できると楽)
パフォーマンス改善への取り組み
  • Cloud Watch Logs Insightsで現状把握して優先度付けを行う。
  • 処理が重いAPIのみ別のリソースに振り分けて、他の処理に影響を与えないようにする。
  • 予防としてユーザーごとの資源割り当てを決めておくことが大事。(後で変えにくい。)

システム設計の先導者 ITアーキテクトの教科書[改訂版]

https://www.nikkeibp.co.jp/atclpubmkt/book/18/267970/

本書では、システム開発の各ライフサイクルでITアーキテクトのすべきこと(成果物)が、筆者の経験を基に解説されている。要件定義から運用・保守、システム再構築に渡って必要な成果物の作り方が例を交えて説明されているので、網羅的かつ具体的な内容となっている。

本書の元となった日経SYSTEMSの記事が2013年のものであることと、対象がエンタープライズシステムであることから、最近のWebシステムには必ずしも当てはまらないもの(ウォーターフォール開発や、RDBMS前提のデータモデルなど)もあるが、このようなシステムでは本書の成果物の一部のみ作成すれば十分な場合が多いため、十分参考にできる。

オープンソースカンファレンス 2019 Tokyo/Spring まとめ

数年ぶりに参加したので、聴講したセッションの内容をまとめた。

https://www.ospn.jp/osc2019-spring/

(1) OpenSDS,始めてみませんか(BOF

OpenSDSとは

各社のストレージ製品を統一管理するためのソフトウェア(管理のみでデータ送受信は既存のプロトコルを使う。)

Kubernetes CSI (Container Storage Interface) 用のDriverも開発されている。

現在のステータス

開発コミュニティはLinux Foundationがホストしている。EMCやHuaweiに加えて、NTTコミュニケーションズYahoo! Japanといった日本メーカーも参加して開発を進めているが、現在はまだデモができるレベルの完成度となっている。

参考

(2) Ansible・Serverspecベースの自動化のフレームワークSHIFT wareの紹介

SHIFT wareとは

TIS株式会社が開発するインフラ管理自動化のためのオープンソースソフトウェア

https://shift-ware.github.io/ja/

Ansibleの設定ファイルとServerspecのテストコードをExcelから自動出力できる。インフラ管理者が使い慣れているExcelを使うことで、導入時の学習コストを下げられる。

  • Ansible:サーバー構成管理ツール(yamlで設定ファイルを書いていく)
  • Serverspec:サーバーテストツール(Rubyでテストコードを書いていく)

(3) Elastic Stackでマイクロサービス運用を楽にするには?

Elastic Stackとは

Elasticが開発するデータの収集・検索・分析・可視化のためのOSSの組み合わせ

  • Beats
    • 軽量データシッパー
    • パケット、ファイル、各種メトリクスなどを送信する。
  • LogStash
    • データのパースや変換を行う。
  • Elasticsearch
  • Kiabara
    • データを可視化・ダッシュボード機能を提供する。

SaaS版(Elastic Cloud)やオンプレミス版(Elastic Cloud Enterprise)も提供されている。

マイクロサービス運用での活用

Beatsファミリーでマイクロサービスの様々なデータを収集できる。

APM (Application Performance Monitoring) にも対応している。

  • 各アプリケーションフレームワーク用のエージェントを組み込むことで分散トレーシングができる。

その他に、通常時のログから機械学習でモデルを作成し、異常検知を行う機能(有償)もある。

参考

(4) スケールアウト型データベース GridDB

GridDBの概要
データモデル
  • NoSQLで一般的なキーバリュー型とは異なり、行指向に近いキーコンテナ型というデータモデルを採用している。
  • キーバリュー型では各行をキーとバリューの組み合わせで表現するが、キーコンテナ型ではキーに対応するコンテナに行を格納する。
  • 時系列データを扱いやすく、コンテナ内では行単位のACIDトランザクションもサポートされる。
クラスタ構成
  • ノード間でマスターノードを自動的に決定するため、管理ノードが不要で単一障害点がない。
  • ノード間でのデータの偏りが生じないように、データの再配置を自律的に行う。
性能比較
  • 主としてメモリにデータを格納することで高速なアクセスを実現する。
  • Yahoo! Cloud Service BenchamarkではCassandraを上回る性能が出ている。
参考

自動車登録の住所変更手続き

転居したときには自動車登録の変更が必要となるが、警察署と運輸局の両方に出向く必要があり、手続きが複雑になっている。 備忘録として、自分の経験をもとに自動車登録の氏名・住所変更手続きの流れをまとめた。

(1) 自動車保管場所証明を取得する

都道府県の警察署で自動車保管場所証明(車庫証明)を取得する。(申請と証明書受け取りで警察署に2度出向く必要がある。)

準備するもの

  • 自動車保管場所証明申請書
  • 保管場所の所在図・配置図
  • 自動車保管場所使用承諾証明書(もしくは駐車場契約書の写しなど)

※ 申請書は各県警のWebサイトから入手できる。(長野県の場合:長野県警Webサイト

(2) 自動車登録を変更する

運輸局支局で自動車登録内容の変更を申請する。

準備するもの

  • 申請書(第一号様式)
  • 車検証
  • 自動車保管場所証明(発行から1ヵ月以内のもの)
  • 戸籍謄本(発行から3ヵ月以内のもの)

※ 申請書は運輸局のWebサイトからダウンロードできる。