[Immuta] グローバルサブスクリプションポリシーを設定して特定のユーザーには特定のデータしか使えないようにする

サブスク
2021.08.06

大阪オフィスの玉井です。

データガバナンスの観点において、「XXの人には、YYのデータしかアクセスさせない」というポリシーを定めなければいけない場面があると思います。ポリシーを適用しなければいけないデータが完全に固定であれば、まだなんとかなりそうですが、ポリシーによっては、今後追加されるであろう「未来のデータ」についても、色々とポリシーを適用し続けなければいけない場面もあるかと思います。

そういう場合、Immutaのグローバルサブスクリプションポリシーを使用すると、GUIでポチポチするだけで、上記のようなガバナンスを効かせることができるようになります。

Immutaって何?

下記を参照。

グローバルサブスクリプションポリシーとは

Immutaにおけるデータポリシー

そもそも、Immutaには、いくつかの種類のポリシーがあります。

  • グローバルポリシー
    • グローバルサブスクリプションポリシー
    • グローバルデータポリシー
  • ローカルポリシー
    • ローカルサブスクリプションポリシー
    • ローカルデータポリシー

グローバルポリシーは、指定した条件に該当する全てのデータソースを対象にするポリシーです。対して、ローカルポリシーは、特定のデータソースだけに適用するポリシーです。

グローバルポリシーの場合、条件に該当するのであれば、設定以降に追加されるデータソースにも動的に適用されます。全体ルールのような形で一度設定しておけば、新しいデータに対して毎回設定し直す必要はありません。

グローバルサブスクリプションポリシー

「グローバル」の意味は上記の通りですが、「サブスクリプションポリシー」とは何でしょうか。

サブスクリプションポリシーとは、「(あるユーザー・グループに対して)そのデータソース自体にアクセスさせるかどうか」を決めます。これに「グローバル」がつくとどうなるか。つまり、グローバルサブスクリプションポリシーとは、「(あるユーザー・グループに対して)指定した条件に該当するデータソースを見せる見せないを決めるルール」のようなもの、といえます。

ちなみに、データポリシーは、データソースの中の話になります。例えば「XというカラムはYというグループのユーザーにしか見せない」とか「Zというカラムは個人情報なのでハッシュ化してマスキングする」とか、データ単位のルールを決めます。

やってみた

やってみる内容の概要

「開発者ユーザーをImmutaに追加するが、そのユーザーは開発者なので、開発者用のデータソースしか使用できないようにする(本番データは使わせない)」ということをやってみます。

ユーザーの追加

まず、開発者(という体)のユーザーを追加します。AdminのメニューからNew Userを選択します。

登録するユーザーの情報を入力します。このユーザーは、管理者ではなく、いちユーザー扱いなので、RoleはOrganization Userを選びます。

登録されました。

グループを作成してユーザーを入れる

グループは必須ではありませんが、グループ単位でポリシーを設定しておけば、今後新しいユーザーを追加したとき、グループに追加するだけで(そのユーザーに)同じポリシーを適用できるので、グループを作っておくほうが楽です。

Adminメニューからグループ作成を選びます。

グループの情報を入れます。

グループを作ると、そのグループの詳細画面に移動します。そこからそのままユーザー追加ができます。

グループにAttributeを設定する

「このグループは開発者グループである」ということをImmuta上で定義するために、Attributeをつけます。Immutaのポリシーは、このAttributeを利用して色々と設定できるようになっています。

グループの詳細画面から「Add Attribute」を選びます。

 

今回はEnvironmentという名前のAttributeを作成します。そして、このグループのEnvironmentの値を「Dev」とします。

タグを作成してデータソースに付ける

次に、データソースに適用する「タグ」を作成します。

Governanceメニューからタグ作成画面に移動します。

Environmentというタグを用意し、DevとProdという2つの値を用意します(Prodは何となく用意しただけで、今回は使いません)。

作成したタグをデータソースにつけます。今回はあるデータソースを「開発者用データソース」という体で登録します。

適用したいデータソースの画面に移動し、Add Tagsを選択します。

検索画面から、先ほど作成したタグ(Dev)を見つけて、設定します。

グローバルサブスクリプションポリシーを作成する

事前準備が一通り終わったところで、いよいよグローバルサブスクリプションポリシーを作成します。

Policyメニューからサブスクリプションポリシー作成画面に移動します。

サブスクリプションポリシーの作成画面です。まず、「誰にアクセスを許可するか?」という設定を行います。今回はDevというAttributeがついたグループ(先程作成したグループ)に許可したいので、「Allow users with specific groups/attributes」を選びます。

次は、具体的に「どのAttributeが何の値だったら許可する?」を設定します。先程設定したEnvironmentというAttributeを選びます。値はもちろんDevです。

最後に、「今までの条件を満たしたユーザーにアクセスさせるデータソースは何?」を設定します。今回は「Devというタグがついたデータソース」を指定します。この設定により、今後追加されるデータソースに対しても、Devというタグさえつければ、このサブスクリプションポリシーが効くようになります。

ポリシーの効果を確認する

それでは、実際に開発者用ユーザーでログインして、データソースがどう見えるのか確認します。

まず「My Data Sources」を確認します。Devというタグがついたデータソースしかありません。問題ないですね。

次に「All Data Sources」を確認します。色々なデータソースが表示されますが、右にGet Accessというメニューが表示されています。

これを選択すると、「あなたは許可されてないからアクセスできないよ」というダイアログが表示されます。Devタグが付いてないデータソースは全てこのようになっていました。

クエリ発行画面も見てみます。Devタグがついたデータソースしか表示されません。

ちなみに、管理者(制限なし)だと、全データソースがクエリ可能です。

おわりに

今回のような内容以外にも、もっと細かいルールを設定できますので、きめ細やかなデータガバナンスを行いたい場合でもImmutaで解決できると思います。