GraphQL マルチテナントシステム時に便利な使い方(書き方③)

GraphQLとCognito(認証サービス)を利用して、マルチテナントのシステム開発時に便利な機能について紹介します。
マルチテナントのシステムでは、データ管理が重要になります。顧客Aから顧客Bの情報が見れてしまうなんてことは、最悪の事態となります。

GraphQLでは、レコードにCognitoのユーザーグループごとの権限を付与することが可能です。
(GraphQLに関する解説は詳細は、こちらを参照してください)

①顧客ごとにCognitoのユーザーグループ(GroupA)を作成します
②顧客ごとのアカウント(複数可)を①で設定したグループ(GroupA)に登録します
③GraphQLで定義するテーブルを以下の様に定義する(例示です)

type Post @model @auth(rules: [{ allow: groups, groupsField: "group" }]) {
  id: ID!
  title: String
  group: String
}

④上記テーブルのレコード生成時に「group」に”GroupA”を設定します。

概ね上記のような利用をすると、他の顧客(たとえばGroupBの顧客)は、④で生成したテーブルにアクセスする権限がありませんの。ですので、GroupBで行うqueryの読み出しでも検索結果からは除外されます(正確には、GroupBのデータしか見ることができない)。

このような機能を了することで、マルチテナントのシステムでは情報漏洩リスクを軽減することができる様になります。

※注意
サーバーレスで利用する際は、レコードの生成(Create)時にはこういった仕組みを利用している点などは、秘匿性を持たせた形にすることをおすすめします。

本記事にたいする質問やお問合せ・IT改善のご相談はこちら