Dig into the Heroku AppLink (not a deep dive) - サービスメッシュについて
Heroku AppLinkを導入するにあたり、heroku-applink-service-mesh
をビルドパックとして追加するようドキュメントに明記されている。
https://devcenter.heroku.com/articles/getting-started-heroku-applink-agentforce#install-the-heroku-applink-buildpack
このサービスメッシュの役割について少し触れてみよう。
サービスメッシュは、Heroku RouterとHerokuアプリケーション(自前で作るアプリケーション)の間に入って、HerokuアプリケーションのAPIを守る役割を持っている。
大まかに言えば以下のような流れとなる。
- 外部からのリクエストが、Heroku Routerにやってくる
- Heroku Routerがweb dynoに向かってリクエストを転送する
- web dynoに組み込まれたサービスメッシュが、リクエスト内容をチェックする
- リクエスト内容がokであれば、Herokuアプリケーションにリクエストを転送する
- リクエスト内容がngであれば、Heroku Routerに401エラーを返して、Herokuアプリケーションには転送しない
サービスメッシュがリクエスト内容をチェックすることでHerokuアプリケーションのAPIをセキュアにするという仕組みである。
※さらに、リクエスト内容がokの場合、リクエストヘッダに値をセットしてくれるので、Herokuアプリケーション側でsdkを使うと、リクエストヘッダ内の値からアクセストークンが取得できるようになる。結果として、HerokuアプリケーションからもSalesforceへのクエリやデータ操作が可能となる。
Heroku AppLinkの世界では、「外部からのリクエスト」とはSalesforceからのリクエストを想定している。したがって、Salesforceからのリクエストであれば、サービスメッシュ内のプログラムがokと判定(サービスメッシュ内でどのように判定しているのか...その詳細な実装については不明)して、Herokuアプリケーション側の処理が実行される。
こうすることで、Herokuアプリケーション側ではリクエストに対するチェック機構を自前で用意することなく、APIの実装に注力することができる。
これまで、Salesforceの機能拡張としてHerokuアプリケーションを活用しようにも、Herokuアプリケーション側には認証機構が必要だった。
しかし、Heroku AppLinkの世界では、HerokuアプリケーションのAPIへのセキュリティはSalesforceとHerokuが担保してくれるので、自前で認証機構を用意する必要がなくなる、という大きなメリットがある。