API KEYなどはAzure Key Vault で管理することができますが、顧客とのやり取りなどで発生する重要なデータ、例えば個人情報やパスワードは全て又は一部をマスクしてユーザーに表示して、スクリーンショットやExcel 一括出力での漏洩を防ぎたいたいことがあるかと思います。
そのための機能としてマスキングルールがプレビューしています。この機能を使えば、Excel で一括出力しても、Dataverse コネクターからアクセスしても、アプリからアクセスしてもデータはマスキングされで出力されます。
また、そのマスクのルールを設定することができます。
今回はその機能の利用方法や注意点についてご紹介します。
マスキング ルールの作成と管理 (プレビュー) – Power Platform | Microsoft Learn
目次
既知の制限
まずは制限事項についてご紹介します。
プレビュー中の制限と予定
現時点、プレビューとして以下の機能制限があり、マスクしていると権限があっても直接アプリから生の値を読み取ることはできませんが、監査ログやパラメーターを渡したAPI 経由では生の値を確認できます。
機能 | プレビュー中の制限 | 今後の予定 |
---|---|---|
フォーム上のマスク されていない値 を読み取る | マスクされた値は詳細/メイン フォームに表示されます。 現時点、権限が割り当てられても アプリから読み取ることは出来ません。 | 今後のリリースでは、マスクされていない 値を読み取る権限を持つユーザーが、 マスクされていない値を読むことができるように するためのボタンが追加される予定です。 |
監査ログ | マスクされていない値が 監査ログに表示されます。 | 今後のリリースでは、マスクされていない 値を読み取る権限を持つユーザーが、 マスクされていない値を読むことができるようにするための ボタンが追加される予定です。 |
プレビュー時点でマスクした値を読み取る方法
Power Automate 経由であれば、Dataverse API に対して「HTTP 要求を送信する」 HTTP with Entra ID (事前承認済み) アクションなどを利用して、パラメーター UnMaskedData=true を渡す必要があります。
この方法は後続のテストのセクションで紹介します。
ステップ
以下のステップでマスキングルールをデータに設定することができます。
もし適切なソリューションがなければ作成します。
もしマスキングしたい列を持つテーブルがなければ作成します。
既存で適切なチームがない、または、ユーザーに対してルールを設定しない場合はマスキングルールの権限ごとにチームを作成します。
マスキングルールを作成します。マスキングルールはマスクしたい条件ことに作成します。複数の列に同じルールを設定することができるため、列ごとに作成する必要はありません。
列のセキュリティプロファイルを設定し、そのプロファイルが対象となるユーザーまたはチームを設定します。
マスキングしたい列にマスキングルールを割り当てることでルールを有効化することができます。
設定手順
マスキングルール
今回は既存のソリューションで既存のテーブルから一つの列に対してマスキングルールを設定します。
ソリューションではセキュアマスキングルールという名前になっています。これを作成します。
マスキングルールは、正規表現で条件を作成することができます。
以下はマイクロソフトから提供されている正規表現で、記載方法の参考になります。必要に応じて確認してください。
今回はこれを利用せずに簡単なルールを紹介します。
Regular expression | Original values | Masked values |
---|---|---|
\d(?=\d{2}-\d{2}-\d{4}\|\d-\d{2}-\d{4}\|-\d{2}-\d{4}\|\d-\d{4}\|-\d{4}) | SSN 123-45-6789 | SSN ###-##-6789 |
[STFGM]\d{4} | AccountNbr A1234567z | AccountNbr #567z |
(?:4[0-9]{12}(?:[0-9]{3})?\|[25][1-7][0-9]{14}\|6(?:011\|5[0-9][0-9])[0-9]{12}\|3[47][0-9]{13}\|3(?:0[0-5]\|[68][0-9])[0-9]{11}\|(?:2131\|1800\|35\d{3})\d{11}) | MasterCard 5678912345678912 | MasterCard # |
(?:4[0-9]{12}(?:[0-9]{3})?\|[25][1-7][0-9]{14}\|6(?:011\|5[0-9][0-9])[0-9]{12}\|3[47][0-9]{13}\|3(?:0[0-5]\|[68][0-9])[0-9]{11}\|(?:2131\|1800\|35\d{3})\d{11}) | Visa 4567891234567891 | Visa # |
\S+@\S+\.\S+ | Email name@sample.com | Email # |
Create and manage masking rules (preview) – Power Platform | Microsoft Learn
今回はこちらのテーブルを特に使わず、シンプルな正規表現でマスクしてみます。
項目 | データ |
---|---|
Name | geek_SSN |
Display Name | SSN |
Description | SSN |
Regular Expression | . |
Masked Character | ● |
このように設定することでパスワードの保護っぽくなります。
桁数は数えればわかるようなイメージです。記号含むあらゆる文字が指定した文字に置き換えられます。
列のセキュリティプロファイル
列のセキュリティプロファイルを作成します。
列レベルでのセキュリティの有効化または無効化 – Power Platform | Microsoft Learn
こちらからユーザーを追加しておきます。
実際の運用としてはチームで権限を追加したほうがいいでしょう。
さらに権限を設定します。
後続のテストにて、動作を紹介します
列のセキュリティ プロファイルにチームまたはユーザーを追加してアクセスを制御する – Power Platform | Microsoft Learn
列へのルールの設定
列セキュリティを有効にし、マスキングルールを割り当てます。
これで設定は完了です。
テスト
列のセキュリティプロファイルでの権限の割り当て
列のセキュリティプロファイルにて許可無しで試してみます。
プレビューでは、許可があってもなくても読み取ることは出来ません。今後ボタンが追加されて切り替えができるようになる予定です。
Dataverse API から生の値の取得
Dataverse API から特定のパラメーターを渡すことで値を読み取ることができます。その実行ユーザーには列のセキュリティプロファイルで読み取り権限が必要です。ということで許可してみます。
実行ユーザーの権限は以下のようになっています。
アクションに設定するエンドポイントに必要な情報は以下のとおりです。<url>
、<table collection name>
、<recordid>
を独自の値に置き換えてください。
- レコード内のすべての列の値を取得する場合のURI:
https://<url>/api/data/v9.2/<table collection name>(<recordid>)?UnMaskedData=true
- マスクされた列の値のみ取得する場合のURI:
<column_name>
はマスクしている列名に置き換えてください。https://<url>/api/data/v9.1/<table collection name>(<recordid>)?$select=<column_name>&UnMaskedData=true
この UnMaskedData=true の部分があるとないとでマスキングされるかされないかが決まります。
例としてはこのようになります。
https://xxx.crm7.dynamics.com/api/data/v9.2/geek_tables(xxxx-xxxx-xxxx-xxxx)?UnMaskedData=true
このURIに対して、HTTP with Entra ID (事前承認済み) の「HTTP 要求を呼び出します」アクションを利用して実行すると生のデータを取得することが出来ます。
この際、権限がないとマスクした値が見えます。例: ●●●●●●
また、パラメーターを渡すことができないため、Dataverse のコネクタを利用してもマスクした値が取得されます。
以上、ご参考になれば幸いです。