Power Platformのセキュリティロールについて

今回はセキュリティ管理で気になる、セキュリティロールについて書きます。

# そもそもセキュリティロールとは？
セキュリティロールとは、**役割(ロール)ベースのセキュリティ定義**です。
もしくは、ユーザーに付与する操作(CRUD)権限がグループ化されたものです。

セキュリティロールをユーザーに割り当てることで、ユーザーはセキュリティロールに付与されている権限に応じた操作を行うことができるようになります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a5145d51-6252-cad8-5ea6-59050859346e.png" width=60%>

- ユーザーは複数のセキュリティロールを所有することが可能（その場合、権利は和集合的に割り当たる）
- Azure Active Directory セキュリティグループとは別の仕組み
- Azure Active Directoryのグループと連携させることも可能

列ごとの権限設定については以下の記事に設定方法を書いています。

https://qiita.com/skuramoto/items/3a46d386d19478e220d7

# 環境ごとの制御レベル

環境内に Dataverse があるかないかで、セキュリティの制御レベルが変わります。
①環境、②リソース、③(Dataverse 有の場合)Dataverseに対して制御を設定することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/9f900378-d330-2335-562e-75ed8fd5bf8c.png)


環境内に Dataverse ができると、Dataverse セキュリティロールが環境内のセキュリティ制御を引き継ぎます。
つまり、**Dataverse有の環境の方がより細かな権限管理が可能**です。



# 定義済みのセキュリティロール
それぞれの環境に対して、規定でいくつかのセキュリティロールが定義されています。
既定ではそれぞれのセキュリティロールは以下の表のように権限を持ちますが、設定変更することが可能です。

:::note warn
システム管理者ロール, Basic Userロールは設定変更できません。
システム管理者ロールはすべてに対して権限を持つ一つのロールであり、特別です。
環境には必ず、一人以上にシステム管理者ロールを割り当てる必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/172250d9-b465-a0d8-5863-d2fa910c6b50.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a0eeff7e-8b25-2641-e92c-c277b8648e2c.png)

:::

おすすめは、すでにあるこれらのセキュリティロールをコピーして新しいロール（カスタムロール）を作成し、楽してロールを定義することです。
（[セキュリティロールの設定方法](https://qiita.com/skuramoto/items/fe305aac24273c7cccbf#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95)）

### リソース権限
各セキュリティロールが既定で作成できるリソースは以下のようになっています。
|リソース\ ロール | 環境作成者 | 環境管理者 | システムカスタマイザー | システム管理者 |
| :---: | :---: | :---: | :---: | :---: |
| キャンバスアプリ | 〇 | 〇 |〇 | 〇 |
| モデル駆動型アプリ | 〇 | - |〇 | 〇 |
| クラウドフロー | 〇(ソリューション非対応) | 〇 |〇(ソリューション対応) | 〇 |
| デスクトップフロー | - | - |〇 | 〇 |
| コネクタ | 〇 | 〇 |- | 〇 |
| データ ゲートウェイ | 〇 | 〇 |- | 〇 |
| データフロー | 〇 | 〇 |- | 〇 |
| Dataverse テーブル | - | - |〇 | 〇 |
| つながり（接続） | 〇 | 〇 |- | 〇 |
| ソリューションフレームワーク | 〇 | - |〇 | 〇 |
| AI Builder | - | - |〇 | 〇 |
| 環境の詳細設定 | - | - |〇 | 〇 |
| PPF管理センターの操作 | 自分の作成した環境のみ可能 | 自分の作成した環境のみ可能 |自分の作成した環境のみ可能 | 〇 |

https://learn.microsoft.com/ja-jp/power-platform/admin/database-security#summary-of-resources-available-for-predefined-security-roles

### Dataverseに対する操作
|操作\ ロール |Basic User | 環境作成者 |  システムカスタマイザー | システム管理者 |
| :---: | :---: | :---: | :---: | :---: |
| データ作成 | 一部テーブルのみ | - |〇 | 〇 |
| データ更新 | 自分のデータのみ | - |ほとんど〇(※1) | 〇 |
| データ参照 | 自分のデータのみ | - |ほとんど〇(※1) | 〇 |
| データ削除 | 自分のデータのみ | - |ほとんど〇(※1) | 〇 |
| テーブル作成・編集 | 自分のデータのみ | - |- | 〇 |

※1　標準テーブルでは自分の作成したデータに対して更新/参照/削除ができ、カスタムテーブルにはフルコントロールを持ちます。


環境自体にアクセスする(画面右上に環境を表示する)には、以下のいずれかが必要です。
- システム管理者
- システムカスタマイザー
- 環境作成者
- 対象の環境内のアプリの所有者であること　


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/8ff743f4-6255-4023-d165-4ae503babb96.png" width=40%>

より細かいことは以下をご参照ください。

https://learn.microsoft.com/ja-jp/power-platform/admin/database-security#summary-of-resources-available-for-predefined-security-roles

# セキュリティロールの設定概要
定義済みセキュリティロールはあくまでもモデル的なロールであって、
カスタムロールを設定することで、より細かい権限設定をしていくこともできます。

セキュリティロールで設定するときに抑えておくものは２つです。
①**特権**は、許可するアクション種類で、8種類存在します。
②**アクセスレベル**は4種類存在し、どの範囲のユーザーに許可するのかを制御します。

この２つは各テーブル単位で設定が可能です。これを組み合わせることによってかなり細かい設定をすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a9b5ef72-d60e-318a-5846-577239fb46b3.png)




## アクセスレベル詳細
アクセスレベルについては、わかりづらいので図と一緒に一つずつ説明します。

重要なのはそのレコードの所有者に対するアクセス者の所属位置です。
以下のように、緑を「所有者」として、紫を権限を許可される「アクセス可能者」として定義して図で確認してみましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/f27d4ea1-7be8-8b2e-264d-b461865b4531.png" width=70%>

### 組織全体
組織全体に許可するので、全レコードが全ユーザーに権限許可されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/8fc3c3e6-74dd-eec3-05a8-60bbce5f2ecb.png)

### 部署配下
同じ部署配下の人にのみ許可します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/de381eff-c90c-d63a-73ce-5f953f5911cd.png)


### 部署
同じ部署の人にのみ許可します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7183bc95-c7bc-2298-1f06-c218a64c25b7.png)

### ユーザー
自分自身のレコードのみ許可します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/9100da5d-ec30-3b60-b503-38f085f2dde1.png" width=40%>

### なし
いかなるレコードも権限を与えません。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/0887ea94-4da4-6448-6237-2009e2ab854f.png" width=40%>

# セキュリティロールの設定方法
Power Platform管理センターから行います。
(「aka.ms/ppac」をアドレスバーに入力、もしくは、開発ページの[⚙]>[管理センター]からアクセス)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/2fe311da-c6fb-9aad-3684-0757609e9f47.png" width=50%>

今回、設定したい環境を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/8fe34e56-1fa4-704f-7f02-908a23f3b763.png)

環境の詳細画面で[アクセス]>[セキュリティロール すべて表示]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/236efdbb-84d3-e871-1488-77b6c127d293.png)

セキュリティロールの一覧が表示されます。
セキュリティロールを設定するには、以下の3通りがあります。
①全く新しくセキュリティロールを作る
②定義済みのセキュリティロールを編集する
③定義済みのセキュリティロールをコピーしてカスタマイズする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a3149f3b-0b5a-1e47-d3f0-f4e60fe05d3d.png)

基本的に、**「Basic Userユーザー」をコピーし、カスタムロールとしてアクセスレベルや特権の設定を行っていく**のが良いとされています。

Basic Userユーザー：環境内でアプリを実行して、自分が作成したテーブルに対する作成、読み取り、書き込み、削除を実行できる

今回は「コピー」で作っていきます。
「Basic Userユーザー」の三点リーダー[...]>[コピー]をクリックします。
セキュリティロールの名前を付け、[コピー]ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/5b612f68-97b7-2d9b-c8a3-980944d509d8.png)


作成されたロールをクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/cf685cb9-fdbc-a2af-a53d-3f74a942c248.png" width=50%>

こちらで具体的にテーブルや権利を設定していきます。
右上で該当のテーブル名で検索をし、それぞれの特権に対してアクセスレベルを設定していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/64600926-0fe2-6ba5-cbd0-32cc9ef296b1.png)

基本的な操作は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7db7a8d3-55b2-1641-365f-27295c6c951c.png)

実際にどのように作っていくかについては、アプリ実装者と話して、決めていきましょう。


# 補足：部署の考え方

- Power Platformでは、Azure Active Directory とは別にユーザー情報を管理
- ユーザー情報は「ユーザー」テーブルに格納
- ユーザーは必ず一つの部署に所属（ユーザーが複数の部署に所属することはできない）
- 部署はルート部署(組織)を基点に階層構造
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/854496a1-79ce-c839-7596-c19c3fa73e7a.png" width=50%>


# まとめ
今回はセキュリティ管理で気になる、セキュリティロールについて書きました。
Dataverse環境だと特に細かく設定できますので、ぜひアプリやフローなどを組織で利用する際、参考にしてください。