【海外イベント紹介】 Jamstack Conf 2021 Security is the “s” in Jamstack by Maricris Bonzo

今回は、「Jamstackカンファレンス 2021」で行われたプレゼンテーションから、「Security is the “s” in Jamstack」の内容をご紹介します:loudspeaker:

10年以上の歴史を持つ「Jamstackカンファレンス」は、Jamstackの生みの親であるクラウドコンピューティング企業「Netlify」が主催。世界中の開発者が集い、Jamstackをコンセプトとした最新のWebサイトの設計、開発などについて話し合います。プレゼンテーションの言語は英語ですが、本ブログでは日本語でご紹介します。

>目次
>セキュリティにまつわる問題
>認証方法の種類
>1. Centralized Authentication
>2. Decentralized Authentication
>４つのアプローチ
>アプローチ1 集権型認証を自作する
>アプローチ2 分散型認証を自作する
>アプローチ3 集権型認証をアウトソースする
>アプローチ4 分散型認証をアウトソースする
>アプローチの比較
>まとめ

今回の講演者はMagicという企業に所属するエンジニアMaricris Bonzo氏。

分散型認証サービスを提供しています。

Jamstackにおいてセキュリティをどのように担保することができるのでしょうか。

個人認証の方法として4つのアプローチを紹介してくれました。

## セキュリティにまつわる問題

ユーザーがログインをして個人情報を登録するというのは、システムを使用する際の一般的な方法です。

しかし、同時に以下のようにリスクを抱えることになります。

>【サービスを提供する側】
>規模が拡大するにつれてデータを適切に管理する必要性やプレッシャーが大きくなる。

>【ユーザー側】
>個人情報の管理方法、データの漏洩が心配。（自分のデータはどのよう管理されるのだろう・・・）

Jamstackを使用する際、この問題にどのように取り組むことができるでしょうか。

## 認証方法の種類

大前提として、認証方法には大きく以下の2種類があります。

### 1. Centralized Authentication
従来の認証方法。ユーザーの個人情報のデータを集約して管理します。

集中型認証、集約型認証、集権型認証、中央集権型認証などの日本語が当てられるようですが、決まった表現が定まっているわけではありません。

本レポートでは「集権型認証」と表記します。

### 2. Decentralized Authentication

新しい認証方法。ユーザーおのおのが自己情報のデータを管理します。

「分散型認証」という表現が多く使われます。

## ４つのアプローチ
ここからが本題です。

### アプローチ1 集権型認証を自作する
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1242415/b62c296f-7d7b-e97a-d385-46c93f0f41a7.png)

IDやパスワードを使用したり、トークンを発行したりする方法があります。

システムがデータを管理するため、作りやすく、用途に合わせてカスタマイズしやすいというメリットがあります。

一方で、データを管理するという観点からはリスクがあることを見過ごせません。ライブラリを使用するとしても、信頼できるオープンソースを見つけるのは至難の業です。

### アプローチ2 分散型認証を自作する
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1242415/2b8d847d-4131-8acf-e969-d64a7df0c152.png)

自前でデータを管理するリスクを軽減するために、分散型認証という考え方が現れました。システムがデータを一元管理するのではなく、ユーザーおのおのが自分のデータを管理するというものです。

自分の携帯電話などに鍵や証明書を保持し、それをブロックチェーンで分散しつつ、必要に応じて必要なだけのデータを提示します。

ただ、自作するには難易度が高く、信頼性を担保するのも難しいでしょう。

### アプローチ3 集権型認証をアウトソースする
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1242415/22049338-cb13-8a80-f938-59c07643cddc.png)

APIを使用して認証を他のサービスに依存するという、現在多く行われている方法です。

多要素認証（MFA）やシングルサインオン（SSO）などが該当します。

Jamstackのサイトでも作りやすい方法です。

親和性が高いのはAuth0やFirebaseが提供するサービス。これらプロバイダーのAPIの使用方法を学ぶだけですぐに組み込めるのは大きな魅力です。

しかし、どの集権型認証のサービスを使用するにしても、やはりデータが一元管理されていること自体にリスクがあるでしょう。そのサービスがダウンすると使えなくなってしまいます。また、自己管理できないことに抵抗を感じる人は今後ますます増えていくに違いありません。

### アプローチ4 分散型認証をアウトソースする

分散型認証サービスでは、ユーザーIDとパスワードの代わりに、ブロックチェーンによって管理される秘密鍵と公開鍵を提供します。

講演者の務める企業Magicは、その専門のサービス・プロバイダーです。

それら秘密鍵と公開鍵は、言わば“従来のユーザーIDとパスワードを物理的に強固にしたようなもの”です。

楕円曲線暗号によって生成されるこれらの鍵には、個人を識別する情報が含まれません。

そのため、他のサービスに移行して使用することも可能です。

使用方法はサービス・プロバイダーによって異なります。Magicではプラグ・アンド・プレイで使用できるAPIを提供している（実装は非常に簡単！）とのことでした。

ユーザーの情報とデータはユーザーのもの。今後のトレンドとなる考え方に合致していると言えるでしょう。

ただし、新しい分野で成長過程にあるというのが利点でもあり欠点でもあります。

まだ確立された規格がなく、プロバイダーによって玉石混交です。

また、認証をアウトソースすることになるので、できることにやや制限があると感じるかもしれません。

## アプローチの比較

ここまででご紹介した4つのアプローチを比較してみました。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1242415/ddbd02a9-7449-19fe-1f78-bae08ef1ca9c.png)

3番目か4番目のアウトソースするアプローチが優位であるという結果に。

そのうえで、考慮すべきポイントが以下のように紹介されていました。

1. 開発者の取り組みやすさ 

2. ユーザーエクスペリエンス

3. 提供される機能

4. サポートの充実度

5. 現在と将来の費用

6. プライバシーとセキュリティの厳格さ

7. ユーザーがデータの主権を持てるか

## まとめ

分散型認証という考え方は、実は少しずつ浸透しているようです。

>マイクロソフト
>（https://www.microsoft.com/ja-jp/security/business/solutions/decentralized-identity）
>
>NTTデータ
>（https://www.nttdata.com/jp/ja/data-insight/2020/122302/）

最近は、個人情報を管理する方法に極端な厳格化の流れが来ています。

EU一般データ保護規則（GDPR）などの規制が非常に厳しくなり、Yahoo Japanがヨーロッパからは閲覧できなくなる、Facebookすら使えなくなりそう、など・・・。

このことから、個人情報のデータを集約する管理方法から、分散して管理し、他人は一切関与しないという方法にメリットが生まれています。

また、APIで認証をもらうというのはJamstackの設計思想と一致しており、余計な責任を負うことの無い点でも良いアプローチだと言えます。

ただ、実際に実装した経験者が少なく、人材を見出すのが難しいというのが現実です。

だからこそ、早いうちにこのような方法について触れておくことが、今後の大きなアドバンテージになるかもしれません！

最後まで読んでくださり、ありがとうございました:bow_tone1:

株式会社ヒューマンサイエンスは、他社にはない、「ドキュメント制作のノウハウ」×「最新のWeb開発技術（Jamstack）」を用いて、Webコンテンツとプラットフォームのソリューションをご提供します。

関心がある方は、ぜひこちらまでお問い合わせください！
**株式会社ヒューマンサイエンス
https://www.science.co.jp/document/jamstack.html**

本文書の出典元：https://www.youtube.com/watch?v=FFQctR6w11M