コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

Power AppsでDLP Policyを取得し表示させる


スポンサードリンク

はじめに

益盛さんがこちらで紹介しているように、環境の払い出しにあたり申請を効率化したい。ということは管理者の方がよく考えることです。

qiita.com

そんなとき使われるのがPower Platformの管理コネクタやPowerShellなどなのですが、今回はその前段階となる申請フォームで欲しくなるDLP Policyの内容をPower Appsで表示する方法についてまとめたいと思います。

DLP Policyとは?という方はこちらの公式ドキュメントをご確認ください。

learn.microsoft.com

簡単に説明すると、ユーザーが意図せず組織のデータを外部に公開してしまうリスクを低減するために利用可能なコネクタを制限する設定のことです。

参考

DLP Policyをキャンバスアプリで管理するアプリは以前CoE Starter Kitにて公開されていました。

github.com

Versionは4.11のときにはまだキャンバスアプリで公開されていました。
アプリの名前は"DLP Editor V2"です。

github.com

こんな感じのアプリです。

これをベースにして記載します。(元の式はあまり変えずに記載します。)

アプリの解析

DLP Policy一覧を表示する

"管理者向けPowerPlatform"コネクタを追加します。

DLP Policyを一覧表示するにはギャラリーの Item に以下を設定します。

管理者向けPowerPlatform.ListPoliciesV2().value

DLP Policyの名前を表示するためには、ラベルなどに ThisItem.displayName を設定します。
ThisItem.name ですと、表示名ではなく内部Idが取得されますのでご注意ください。

コネクタの割り当てを表示する

まずは選択されたポリシーの情報を一度変数にいれます。

PolicyGal.OnSelect

Set( varSelectedPolicy, PolicyGal.Selected );

ClearCollect(
    col_connectorGroups,
    PolicyGal.Selected.connectorGroups
);

次にコネクターの情報を取得します。

PolicyGal.OnSelect

Clear( col_connGroups );

ForAll( col_connectorGroups,
    Collect( col_connGroups, {
        classification: col_connectorGroups[@classification],
        connectors: Filter( col_connectorGroups[@connectors], Not("Microsoft.ProcessSimple" in id) && name <> "Content Conversion"),
        sortOrder: Switch(col_connectorGroups[@classification], "Confidential", 1, "General", 2, "Blocked", 3)
    });
    Collect( col_nonDefaultConnectors, col_connectorGroups[@connectors] );
);

Clear(col_connectors);

Concurrent(
    ClearCollect( col_standardConnectors, 作成者向けPowerApps.GetConnectors({'$filter':"environment eq '~Default'", '$top':1000 }).value );
    ,
    ClearCollect( col_virtualConnectors, RenameColumns(管理者向けPowerPlatform.ListVirtualConnectors(), metadata, properties) );
    ,
    ClearCollect( col_unblockableConnectors, 管理者向けPowerPlatform.ListUnblockableConnectors() );
    //,ClearCollect( col_desktopFlowConnectors, PowerAppsforMakers.GetConnectors({'$filter':"connectorType%20eq%20%27DesktopFlow%27", '$top':1000 }).value );
);

Collect( col_connectors, Filter( col_standardConnectors, properties.isCustomApi = false) );

もとの式だとこのようになっており、既定グループが除外されるようになっていますので今回は除外しました。

ForAll( col_connectorGroups, 
    If( col_connectorGroups[@classification] <> varSelectedPolicy.defaultConnectorsClassification,
        Collect( col_connGroups, {
            classification: col_connectorGroups[@classification],
            connectors: Filter( col_connectorGroups[@connectors], Not("Microsoft.ProcessSimple" in id) && name <> "Content Conversion"),
            sortOrder: Switch(col_connectorGroups[@classification], "Confidential", 1, "General", 2, "Blocked", 3)
        });
        Collect( col_nonDefaultConnectors, col_connectorGroups[@connectors] );
    );
);

この情報をもとにまずは、"Business"、"Non-Business"、"Blocked"のグループを表示させます。

ギャラリーを用意して以下のように設定します。

ConnectorGroupGal.Items

SortByColumns(col_connGroups, "sortOrder")

ギャラリーの中にラベルを追加して対象のグループにいくつのコネクタが存在しているのかを表します。

こんな感じです。

Label.Text

Switch(
    ThisItem.classification,
    "Confidential", "Business",
    "General", "Non-Business",
    "Blocked", "Blocked"
) & 
" (" & 
CountRows(ThisItem.connectors) & 
")" & 
If(
    ThisItem.classification = varSelectedPolicy.defaultConnectorsClassification,
    " | Default"
)

続いてギャラリーを追加して対象のポリシーにあるコネクタを表示させます。

SortByColumns( Filter( col_connectors, id in ConnectorGroupGal.Selected.connectors.id, txtSearch.Text in properties.displayName), "name")

恐らく以下情報を表示させたいと思うので、それぞれどのように表示させるか記載しておきます。

プロパティ
アイコン ThisItem.properties.iconUri
名前 ThisItem.properties.displayName
クラス LookUp(col_connectors, id=ThisItem.id).properties.tier
公開元 LookUp(col_connectors, id=ThisItem.id).properties.publisher

おわりに

あくまでもここで紹介したのは最小限(?)の構成ですので、ちゃんと利用したい場合は実際のアプリを見てもらった方が良いと思います。


スポンサードリンク