SlideShare a Scribd company logo
1 of 40
サービスの認証
マルチブランド認証とマイクロサービス
間認証
でのリソース設計
Profile
2020/8/22
システム構築のプロセス評価、改善、策定、
開発フレームワークの設計、実装管理、プリ
セールスやプロジェクトの立ち上げなど
ブログ
http://blog.processtune.com
プロフィール
Tetsuro Takao on Facebook, Twitter
or http://mvp.Microsoft.com
コミュニティ
.NETラボの運営スタッフ
https://dotnetlab.connpass.com
Microsoft MVP
Developer Technologies
[July 2010 – June 2021]
マイクロサービスの認証
マルチブランド認証とサービス間認証
2020/8/22
マイクロサービスとリソース
2020/8/22
同一ドメイン
ドメインの
セキュリティトークンサービス
Azure Active Directory
Endpointで認証
異なるドメイン・リソースを扱うマイ
クロサービス
2020/8/22
Open ID connect手順
2020/8/22
OAuth 2.0 debuggerでcode取得 Postmanでtoken取得
Open ID connect手順
2020/8/22
OAuth 2.0 debuggerでcode取得 Postmanでtoken取得
Azure Active Directoryアプリケー
ション
2020/8/22
Azureポータルでの
暗黙の付与の設定
ID TokenをJWT.ioで
デコードした結果
トークンのライフサイクル管理
2020/8/22
https://docs.microsoft.com/ja-jp/azure/active-directory/develop/active-directory-configurable-token-lifetimes
マルチブランド認証の仕組み
2020/8/22
トークン管理
サービス間認証の仕組み
2020/8/22
☑
☑
☑
☑
クラウドベンダーのチューニング
2020/8/22
Setting Up an Envoy Front Proxy on Amazon ECS Cloud Endpoints のアーキテクチャの概要
Service meshアーキテクチャ
分散システムであるマイクロサービスが必ず実装すべき機能とは?
2020/8/22
Sidecarでマイクロサービスから分離す
るもの
2020/8/22
永続化層
Micro
service
Micro
service
Micro
service
Micro
service
Side
car
Micro
service
Side
car
Side
car
Side
car
Side
car
抽象化
認証認可
構成
ロギング
プロキシ
Service mesh design pattern
2020/8/22
Service mesh control plane
Service mesh data plane
永続化層
クラウド
抽象化
認証認可
構成
ロギング
プロキシ
マイクロサービス・エンドポイント・
サービス
2020/8/22
Service mesh control plane
Service mesh data plane
永続化層
Web API
Micro
service
開発
Serverファーム
デプロイ
クラウド
Micro
service
Micro
service
Micro
service
Micro
service
インクリメンタル・ロールアウト
マイクロサービスエンドポイント
Sidecar(Service mesh data plane)
2020/8/22
Sidecar proxy(Service mesh data plane)の機能
【サービスディスカバリ】
マイクロサービスのエンドポイントを探す機能
【ヘルスチェック】
機能のエンドポイントの健全性(通信の確認やn回のリトライなど)を検証する機能。
【ルーティング】
要求されたコンテキストを実際のIPやカスタムドメインにパスする機能
【ロードバランシング】
的確なサービス・インスタンスを選択し、タイムアウトおよび切断、n回の生成リトライなどを行う
【認証と認可】
要求したアイデンティティの認証とアイデンティティがリソースを利用できることを検証する
【監視】
詳細な統計、ロギング、分散トレースデータを生成、テレメトリできる機能
サービスメッシュの実装
2020/8/22
https://www.envoyproxy.io/ https://istio.io/ https://linkerd.io/
Sidecar proxyの実装
サービス提供側で利用側のアイデンティティを検証する
2020/8/22
Microsoft Graph Toolkit
2020/8/22
https://docs.microsoft.com/ja-jp/graph/toolkit/overview
npm audit fix(脆弱性の監査)
2020/8/22
サンプル・ソリューション
2020/8/22
トークンの解析
2020/8/22
サンプル・ソリューション
2020/8/22
映画チケットの購入
会員登録 個人情報の登録 入力情報の確認 映画の選択へ
会員ログイン 映画の選択へ
映画の選択
時間・日付の選択
作品一覧から選択へ
作品の選択から時間・
日付の選択に来た場
合、座席の選択へ
作品の選択
時間・日付の選択へ
時間・日付の選択から
作品の選択に来た場
合は座席の選択へ
座席の選択 購入枚数と座席指定 会計
購入内容をメール送
信
サブドメイン
ログイン・ステート
予約日時・ステート
予約座席・ステート
予約購入・ステート
ステート管理
API Managementのサイドカー機能
2020/8/22
 同じドメインまたは静的IPアドレスの下にホストする
⇒ 「サービスディスカバリ」 「ルーティング」
 API リクエストは、サブスクリプションキー、JWT トークン、クライアント証明書、またはカスタ
ムヘッダーを使用して認証する
⇒ 「認証と認可」
 認証方法、スロットリング、キャッシング、変換など、約 50 のポリシーが定義できる
⇒ 「ロードバランシング」「トラフィックの管理」
 APIのライフサイクル全体を管理することができる
⇒インクリメンタル・ロールアウト可能
 使用状況のメトリクスを確認、Azure Application Insights で API 呼び出しをログに記録
⇒ 「監視」、 「ヘルスチェック」
 開発者ポータルが付属、APIのリスティング、APIの使用方法参照、インタラクティブな試行、
OpenAPI仕様のダウンロード、APIキーの取得等のチーム開発支援機能を有する
チュートリアルとAzure portalでサイド
カー作成
2020/8/22
https://docs.microsoft.com/ja-jp/azure/api-management/import-and-publish
Azure API ManagementにAPI登録
会員登録サービスを登録する
2020/8/22
会員登録サービスAPIの構成
2020/8/22
会
員
登
録
サ
l
ビ
ス
会員登録状態
会員登録 会員サービス
永続化層
会員情報 会員サービス
永続化層
ログイン情報 ログインステート
流量制限の設定(Design)
2020/8/22
流量制限の設定(Policies)
2020/8/22
流量制限の設定(Test)
2020/8/22
Service Fabric Meshの役割
マイクロサービスは同じ問題解決領域ならリソース毎のスコープ制御
2020/8/22
API ManagementとService fabric mesh
2020/8/22
Service Fabric Mash
Azure可用性ゾーンやGEOロケーションに
またがるクラスタのコレクションを作成
Resource Managerのすべてのリソースを
利用可能
(Azure ロールベースのアクセス制御な
ど)
インクリメンタル・ロールアウト(ブルー/グ
リーンデプロイメント)
ソフトウェア定義ネットワーキング (SDN)
機能経由のサービスディスカバリー
API Management
(サービス定義のインポート、複雑なルー
ティングルールの定義、イベントの発生時
のロギング、レスポンスのキャッシュ)
Service Fabric Meshのチュートリアル
2020/8/22
https://docs.microsoft.com/ja-jp/azure/service-fabric-mesh/service-fabric-mesh-tutorial-upgrade
Microservice solutionの設計
マルチドメインで構成する場合APIの組み合わせが重要
2020/8/22
1.Language free
2020/8/22
• ベストなシリアライザーの選択(その言語のライブラリはAPIが扱うデータの形に適して
いますか?)
• ネットワーク・コスト、永続化層のIOコストとともに、言語間の型変換やデータストアの型
との変換におけるシ・リアライズ、デシリアライズのコストを意識する
• JSONは効率が良い構造化表現形式であることを意識する
>サービス間通信において、View用のModelのプロパティはすべて通信させる必要が無
ければシリアライズ対象外のプロパティとしてマークしたJsonIgnore属性を付けるべき
>空白文字列を持つプロパティはシリアライズされるが、null値を持つプロパティはシリ
アライズされない
サービスはシリアライズされた値を通信する
2.Cross origin resource sharing
2020/8/22
https://docs.microsoft.com/ja-jp/azure/api-management/api-
management-cross-domain-policies#cross-domain-policies
https://whatwg.org/
Conclusion
2020/8/22
 マイクロサービス・ソリューションの多くはマルチドメインであり、OAuthに対応している
アイデンティティ・プロバイダーならば、各アイデンティティ・プロバーダーのトークン
サービスの認証を利用してそのドメインのリソースにアクセスする必要がある
 OAuthは認証されたアイデンティティがリソースにアクセスするための安全な手順を仕様か
しているのであって、アイデンティティを認証するものではなく、Open ID Connect手順に
よってアイデンティティ認証を確認する
 分散コンピューティングが必要とし、マイクロサービスのビジネスロジックには関係のない
機能を分離した部分をSidecarで実装する
 サイドカー共通の分散コンピューティングが必要とする機能をまとめて処理することとマイ
クロサービス自身が実装するのに困難なサービス間の調整(ロードバランシング、サービス
ディスカバリ等)をまかなうのを目的にService Mesh design patternを利用できる
 マイクロサービス・ソリューションはシリアライズ/デシリアライズが大量に発生する
 マイクロサービスがソリューションの一部として構成されないのであれば、マルチドメイン
であることを意識し、言語やCORSについてのプロジェクト憲章みたいなものをチーム内で定
Reference
2020/8/22
The OAuth 2.0 Authorization Framework
https://tools.ietf.org/html/rfc6749
The OAuth 2.0 Authorization Framework(OpenIDファウンデーション・ジャパンによる訳)
https://openid-foundation-japan.github.io/rfc6749.ja.html
JWT Debugger
https://jwt.io/
The Movie Database API documentation
https://developers.themoviedb.org/3/getting-started/introduction
Utf8Json(Microsoft MVP Yoshifumi Kawaiさん作のシリアライズ/デシリアライズ・ライブラリ)
https://github.com/neuecc/Utf8Json
日本の国民の祝日オープンデータカレンダー
https://fukuno.jig.jp/app/csv/publicholiday-japan.html
Frequently Asked Questions (FAQ)
https://golang.org/doc/faq
SQL Server データ型のマッピング
https://docs.microsoft.com/ja-jp/dotnet/framework/data/adonet/sql-server-data-type-mappings
Reference
2020/8/22
.NET 内で JSON のシリアル化と逆シリアル化 (マーシャリングとマーシャリングの解除) を行う方法
→シリアル化からプロパティを除外する
https://docs.microsoft.com/ja-jp/dotnet/standard/serialization/system-text-json-how-to#exclude-properties-from-serialization

More Related Content

More from Takao Tetsuro

More from Takao Tetsuro (20)

gRPCurlDotNet.pptx
gRPCurlDotNet.pptxgRPCurlDotNet.pptx
gRPCurlDotNet.pptx
 
Layout isfirstprocessofatomicdesign
Layout isfirstprocessofatomicdesignLayout isfirstprocessofatomicdesign
Layout isfirstprocessofatomicdesign
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
 
Team development
Team developmentTeam development
Team development
 
Interoperability of webassembly with javascript
Interoperability of webassembly with javascriptInteroperability of webassembly with javascript
Interoperability of webassembly with javascript
 
Interactive connection2
Interactive connection2Interactive connection2
Interactive connection2
 
Relationship betweenddd and mvc
Relationship betweenddd and mvcRelationship betweenddd and mvc
Relationship betweenddd and mvc
 
M365VM_PowerFX_takao-matsumoto_matsui_kojima
M365VM_PowerFX_takao-matsumoto_matsui_kojimaM365VM_PowerFX_takao-matsumoto_matsui_kojima
M365VM_PowerFX_takao-matsumoto_matsui_kojima
 
OpenStreetMap and Mapbox
OpenStreetMap and MapboxOpenStreetMap and Mapbox
OpenStreetMap and Mapbox
 
Excel on OneDrive is not a file
Excel on OneDrive is not a fileExcel on OneDrive is not a file
Excel on OneDrive is not a file
 
Development toolsforteamdevelopment
Development toolsforteamdevelopmentDevelopment toolsforteamdevelopment
Development toolsforteamdevelopment
 
React Helmet navigates SPA
React Helmet navigates SPAReact Helmet navigates SPA
React Helmet navigates SPA
 
Reacthelmetcontrolesspa
ReacthelmetcontrolesspaReacthelmetcontrolesspa
Reacthelmetcontrolesspa
 
One drivesettings
One drivesettingsOne drivesettings
One drivesettings
 
Galapagosization environment
Galapagosization environmentGalapagosization environment
Galapagosization environment
 
Design mvc apps with spotify web api object model
Design mvc apps with spotify web api object modelDesign mvc apps with spotify web api object model
Design mvc apps with spotify web api object model
 
TEAMSに投稿する時にMicrosoft Graphでやらかした先生
TEAMSに投稿する時にMicrosoft Graphでやらかした先生TEAMSに投稿する時にMicrosoft Graphでやらかした先生
TEAMSに投稿する時にMicrosoft Graphでやらかした先生
 
Decentralized layer2 network ION
Decentralized layer2 network IONDecentralized layer2 network ION
Decentralized layer2 network ION
 
kiosk mode and customizing lockdown
kiosk mode and customizing lockdownkiosk mode and customizing lockdown
kiosk mode and customizing lockdown
 

Authentication betweenservices

Editor's Notes

  1. 本日は、トークンの解析、検証を行う方法やマイクロサービスのサービス間認証の設計のお話をします。 サービスの流量制限やサービスのエンドポイントの定義をAzure API Managementで行う方法やサービスディスカバリーの仕組みをService Fabric Meshで定義する意味などをお話しします。マイクロサービスのサイドカーを作成できれば、マイクロサービスソリューション全体の設計の敷居が低くなりますので、KubernetesでのEnvoy proxyの利用やGoogle Cloud Endpointsで使用するExtensible Service Proxyでの実装も理解できるようになります。
  2. 【読む】Friday fiveにも照会されたので自慢しておきますwww
  3. マイクロサービスの認証の設計として、まずマルチブランド認証とサービス間認証の違い説明します。
  4. マイクロサービスは分散システムなので、永続化層はそれぞれのサービス固有のものになります。マイクロサービスが扱うリソースがすべて同一ドメインのリソースの場合は、マイクロサービスの永続化層は同一ドメイン内で管理されています。【クリック】 ドメインのリソースへのアクセスを承認する際の認証は、同一ドメインの場合、一か所で行うことができます。【クリック】 Microsoft 365をリソースとする場合は、Azure Active Directoryで認証が行えるので、Azure Active Directoryのエンドポイントを経由してセキュリティ・トークン・サービスから得られる認証結果であるトークンを使って、Microsoft Graph API経由で同一ドメインのリソースにアクセスすることになります。 この場合、認証はAzure Active Directoryの認証エンドポイントが行い、リソースへのアクセス承認(認可)はMicrosoft Graph APIが行っています。
  5. 異なるドメイン・リソースを扱うマイクロサービスの場合、認証は一か所では行えませんから、それぞれのドメインのアカウントが必要となります。【クリック】たとえば、フェイスブックの投稿内容を使ってTwitterにも投稿するとか、Instagramの企業アカウントの投稿をオフィシャルWebサイトに連携させるといったケースです。今回は映画の座席予約なので、本来はその映画館で上映されている映画とスクリーン、および座席をマッチングさせるのですが、オープンなAPIを使ってサンプルを作ります。 この際に、マルチブランド認証ではOAuthなどを使ってそれぞれのアイデンティティプロバイダーに認証を要求します。アクセストークンが返ってくれば、それを使ってリソースにアクセスします。 ここで重要なことは、マルチブランド認証とは認証と認可のドメインが同一で、かつ複数あるということです。これは、多くのブランドがOAuth手順にOpen ID connect手順を包含してアイデンティティ・プロバイダーとしてのサービスをしているから可能な方法です。
  6. OAuthは、認証が正しい場所で行われたかどうかを検証するものではありません。OAuthは認証済みのアイデンティにリソースを公開するための手順を勧告しているものです。サービスが利用者に対してリソースが使えるかどうかを検証するには、アイデンティを確認できた場所がリソースのオーナーからその使用を許可されている場所である必要があります(OAuthではコンフィデンシャル・クライアントといいます)。 各ブランドは、OAuthのフローにOpen ID connect手順を拡張することで、リソースアクセスを要求された場所がコンフィデンシャル・クライアントであることを確認しています。各ブランドはサービス固有のアイデンティティ(AADアプリケーションのClient IDやGCPのサービス・アカウントなど)を使ってID Tokenを一緒に返却する方法を用意しています。 Azure Active Directoryのアカウントの場合は「Microsoft identity platform」にて「OpenID Connect sign-in and token acquisition flow」が用意されています。【クリック】使い方は簡単で、OAuthフローを行う際にScopeに「openid」を入れるだけです。【クリック】
  7. ちなみにID Tokenは認証を確認するものですから、認証コード取得時のscopeにはopenidは入っていませんが、リソースへのアクセスを設定する場合は、コード取得時のscopeとtoken取得時のリクエストのscopeを合わせる必要があります。
  8. Azure Active Directoryアプリケーションの設定では、「認証」タブの「暗黙の付与」セクションでアクセストークンとIDトークンをチェックしておく必要があります。APIの仕様としてリソースを要求されたら、リソースをサービスする前にID Tokenを検証することをお勧めします。 他ドメインのリソースを利用するサービスを呼び出すアプリケーション側では、各ブランドのクライアントIDや各種Token(アクセス、リソース、ID)を管理することになります。エンドユーザーのアカウントとパスワードについては保管する必要はありませんから、セキュリティの面でもアプリケーションの構築コスト、運用コストを低減させます。
  9. マルチブランド認証の場合は各ブランドのトークンなどを保存して管理することができますが、サービスの利用側がトークンのライフサイクルを管理しなくてはいけません。 ライフサイクルは、アプリケーションが使用するリソースと同じドメインで管理しているセキュリティ・トークン・サービスが発行したトークンであれば長いライフサイクル(IBM cloud, Microsoft AAD, Facebookなど多くは90日)をリフレッシュトークンによって確保できます(それでも90日ごとに再取得し管理する必要があります)。アプリケーションが使うリソースがアプリケーションのドメインに無い場合、リフレッシュトークンによるトークンの更新が90日間保証されるわけではありません。たとえばサービス提供側の都合によりサービスに必要となるスコープが拡張されることもありますし、監査などのプロセスにおいてリフレッシュトークンを取り消す場合もあります。この場合、再度OAuth認証フローを通してアクセストークン/リフレッシュトークンのペアを再取得する必要があります。 このページに既定の有効期間などの情報がありますので参照してください。
  10. アプリケーションがセンターとして、各種サービスを取りまとめる場合はトークンのライフサイクルを管理することができます。【クリック】
  11. 一方サービス間認証は、サービスがサービスを利用するような非センター型のステートフルミドルウェアです。 サービス間認証で設計すると、スケーラビリティやコンシステンシー(一貫性)をより一層な強固なものにできます。 つまり、サービスを提供する側でID Tokenを検証できればいいわけです。
  12. ただし、複数のドメインをまたぐマイクロサービスはネットワークコストやレイテンシについて各クラウドベンダーがクラウド・チューニングしている部分を完全に享受できるわけではありません。 そのため、各ベンダーはマイクロサービスを実装する際に、エンドポイントを設置してルーティング、流量制限と認証を一か所にまとめサイドカーとする方法を推奨しています。 それは、マイクロサービスのサイドカーをサービスメッシュとして提供しているからです。サービスメッシュとサイドカーのお話を掘り下げていきます。
  13. サイドカー・プロキシはもともとKubernetesやOpenShift、Docker Swarmのようなコンテナ・オーケストレーションにおいて、サービスの基盤であるインフラストラクチャの側面を制御するロジックとサービスのビジネス・プロセスを分離するように考えられました。そのため、サイドカー・プロキシはDevOps的な視点で語られることが多いのですが、その視点で語られるのはService mesh アーキテクチャの一例にすぎません。
  14. マイクロサービスはスケーラビリティやソリューションの拡張性などを要件とするシステム構築に最適の解として多くのソリューションで実装されています。 マイクロサービスは分散コンピューティングのうちのひとつのインプリメンテーション・パターンに過ぎませんので、分散コンピューティングが抱える「必ず実装すべき機能」がそのまま必要となります。 分散コンピューティングが抱える「必ず実装すべき機能」とは、マイクロサービスの利用シーンでは認証認可であったり、ロギング、プラットフォームの抽象化や構成管理、プロキシなどの機能です。これらは、サービスディスカバリ、ヘルスチェック、トラフィック管理とルーティング、ロードバランシング、認証と認可、監視可能性などの機能として実装することが可能で、マイクロサービスのビジネスロジックに関係なくすべてのマイクロサービス共通に必要であり、Sidecarプロキシとして分離実装することでマイクロサービスの運用、保守コストを軽減する方法が考えられました。
  15. このサードカープロキシを稼働させる基盤としてサービスメッシュを構成することで、マイクロサービス単体では困難だったサービスディスカバリ、負荷分散、サーキットブレーカ、メトリクス、遠隔測定などのサービス間通信全体の管理ができるように設計することがService meshデザインパターンです。 Service meshデザインパターンでは、Service mesh control planeがService mesh data planeの指示に従ってサービス基盤を動かします。 この部分の設定をブラウザのGUIで簡単に設定出来たり、インクリメンタル・ロールアウトなどのCD/CIをサポートするなど、各クラウドベンダーがマイクロサービス向けのエンドポイントサービスとしてチューニングしてサービスしています。
  16. データセンターなどのサーバーファームでWeb APIを公開していた時代とクラウドネイティブなマイクロサービスの最も異なる点は、Service meshアーキテクチャとかService meshデザインパターンといった設計が行われる部分です。 サーバーファームでWeb APIやWeb Appを構築する場合、APIの呼び出し頻度やレイテンシなどを制約事項として要件定義などを行います。クラウドネイティブなアプリケーションに求められるスケーラビリティやソリューションの拡張性などが求められていないシステムを無理やりクラウド・リフト&シフトすることはあまり意味がありません。誰かがキャッチーなバズワードで営業するのを目にしたら開発者はそれを諫める方が良いかと思います。 Service meshデザインパターンは、スケーラビリティやソリューションの拡張性などが求められているソリューションを考慮した設計概念です。
  17. Service meshデザインパターンでは、Sidecar proxyをService mesh data planeと言います。 マイクロサービスを設計する場合、これらの機能の実装方法を考慮する必要があります。
  18. クラウドベンダーのサービスを利用しない場合はオープンソースなどで実装します。
  19. まず、Azure Active Directoryの認証に関するプログラムを作成する場合、Microsoft Graph Toolkitを使うと簡単にプログラムを作成することができるのでご紹介します。 本日のサンプルはもっと面倒な作業が必要になるのでこれを使ってません。GitHubからダウンロードしておいてもらう方がいいです。 Microsoft Graph Toolkitは、すでにAzure Active Directoryでアプリケーションを登録している方なら、Visual StudioでASP.NET Web Appのテンプレートでプロジェクトを作成して3行書いてF5を押下すると認証プログラムを動かせる代物だという話がYoutubeで公開されてます。 ASP.NET Core Web Appを作成する場合は「npm install @Microsoft/mgt」でMicrosoft Graph Toolkitのnodeモジュールをプロジェクトのルートにダウンロードします。
  20. 以前からnodeを使っている方は、新しいnodeで脆弱性のチェックを行いますので、「npm audit fix」で検証結果を修正します。
  21. 今回は、前回のReact Helmetのお話しで作成したサンプルを使っています。GitHubで公開していますのでソースをダウンロードしてみてください。 マルチブランド認証に対応するように変更してあります。右の例はFacebookとMicrosoftでログインしている状態です。 この状態はWebアプリケーションが各サービスを呼び出す形ですが、現在SampleAppプロジェクトで一緒に実装しています。 サービス間認証はサービスからサービスを呼出し、呼び出されたサービスが呼び出したサービスの認証状態を検証するという形に変更する必要があります。
  22. サービスの提供側はID Tokenを出して利用側がそのID Tokenを送信してきます。 このID Token送信時に送信先のhostを確認して、受信時にaud(オーディエンス)の値と一致していれば「横取りされていないトークン」であることを確認できます。 ここでは、JWT形式であることを確認してから「iss」がWindows.netドメインのセキュリティトークンサービス発行のものであるかどうかを確認しています。 これはサービス利用側のコードなので、ID Token発行時の発行先hostを確認するコードではありませんが、ポイントはhostとaudを確認するのでサービス提供側も利用側もそれを意識しておくことが重要です。
  23. 前回のサンプルでは、各サービスはサブドメインごとに設計するというお話しをしました。ここでは会員登録のサービスを作ってサンプルソリューションから問い合わせるようにします。 会員登録サービスのSidecar proxyは「サービスディスカバリ」「ヘルスチェック」「ルーティング」「ロードバランシング」「認証と認可」「監視」を機能として持つ必要があります。 Service mesh control planeを含めて、Sidecar proxyの多くは各クラウドベンダーがサービスを提供しています。ここではAzure API Managementの例をご紹介します。 ただし、Service mesh control planeの解説は目的ではないので、Kubernetesを使ったCD/CIについてはまた後日解説を設けます。
  24. Azure API Managementがカバーするサイドカー機能が実装できます。
  25. Azure portalのAPI Managementの設定画面では、Enable Application Insightsをチェックしておくことでインサイトを使ってサービスのロギング を行うことができます。
  26. Azure Resource Managerリソースのすべての機能を活用します。これらの機能の例としては、監査証跡やAzureロールベースのアクセス制御(Azure RBAC)などがあります。Azure の Service Fabric Mesh サービスにデプロイするすべてのリソースは、Azure Resource Manager リソースです。これらのリソースには、アプリケーション、サービス、シークレットなどが含まれます。 サーキットブレーカーは、再試行に値しない要求を打ち切ること、リトライは最終的に成功することを期待して何回か試行すること。 Mesh サーキットブレーカー、リトライ、SSL ターミネーション、ブルー/グリーンデプロイメント、管理されたサービスアイデンティティによる簡素化されたセキュリティのような他の SDN 機能を有効 API Management サービス定義のインポート、複雑なルーティングルールの定義、イベントの発生時のロギング、レスポンスのキャッシュなどSidecarに近い
  27. チュートリアルを使ってServiceの発見の設定とその仕組みを学習してください。AWSでEnvoyプロキシを作成する際やGCP Cloud Endpointでistioを使ったマイクロサービスEndpointを作成する際に役に立ちます。
  28. シングルドメインで構成するマイクロサービス・ソリューションよりも、マルチドメインで完結するマイクロサービス・ソリューションが圧倒的に多く、映画の座席予約のサイトであったり、ExcelやWordを扱うビジネス・アプリケーション、GPS情報や地図情報を扱うWebサイトなど、多くがマルチドメインで構成されるソリューションです。 たとえば、予約や販売などのサイトは総務省の日本の休日を参照しますが、このようなオープンデータは利用の都度APIを呼び出すより、バッチ的に自ドメインにインポートして自ドメインのマイクロサービスとした方が良いでしょう。そのようなときに注意すべき2点について解説したいと思います。
  29. まず、マイクロサービス・エンドポイントは言語フリーです。クラウドベンダーが提供するサービスはそのようにチューニングされていますし、自ドメインでEnvoy proxyを作成する場合も、マイクロ・サービス設計の拡張柔軟性を維持するのであれば、そのように構成すべきです。 しかしながら、マイクロサービスはサービス間通信でシリアライズされた値を受送信することを意識してください。マイクロサービス・ソリューションは大量のシリアライズ・デシリアライズが発生します。 おそらく、ネットゲームの業界の開発者の方なら、昔からこの「大量のシリアライズ・デシリアライズの発生」には非常に痛い思いをされてきているかと思います。 階層が深いデータなのか?階層は比較的浅い大量のレコードのリストなのか?たとえばGo言語は階層表現はできるものの基本は構造体でありメソッドは構造体に縛られない言語ですから、階層が深いエンティティを扱うのであれば別の言語を選択した方が良いかと思います(巻末のリンクを参照してください)。その場合、複数の言語で構成されるソリューションになりますから言語間の型変換が発生します。Excelのセルに保存された日付型はOADate型です。私はC#以外でこれをユニバーサルDate型として扱おうとは思いません。また、型のレンジにも注意を払ってください。SQL DBなどのデータベース・プログラマーは.NETでのデータレンジの扱いを知っています(巻末参照)。 また、C#ではモデルのの設計時にシリアライズ対象外プロパティを設定できます(巻末参照)。 Polyglot programming(巻末参照)
  30. The Web Hypertext Application Technology Working Group (WHATWG) はApple Inc., Google LLC, Microsoft Corporation, Mozilla Corporationでステアリンググループを構成する標準化とテストを通じてWebを進化させることに関心を持つ人によるコミュニティ・グループで、WHATWGがCross origin resource sharingをHTML Living Standardとして勧告しました。 HTML Living Standardの2.6 Fetching resourcesの2.6.4 CORS settings attributesとして仕様策定され、Apple、Google、Microsoft、Mozillaのブラウザに実装されています。 Protocolとport、Hostが同じであることがCross origin resource sharingの条件で、マルチドメインで完結するマイクロサービス・ソリューションは、ブラウザでCORSがどのように扱われるかを理解する必要があります。マイクロサービス・エンドポイントを設置しないマイクロサービスのサイドカーはこれに対応する必要があります。
  31. Protocolとport、Hostが同じであること。