# ランブックの権限

{% embed url="<https://www.youtube.com/watch?v=bLi_k_Yzhyw>" %}

## 範囲

これは、Azure テナント内の特定の runbook へのアクセスを許可/拒否する方法について説明します。runbook として特定のアクションを実行するために必要な MS Graph API の権限について知りたい場合は、こちらの [要件](https://docs.realmjoin.com/ja/zi-dong-hua/connecting-azure-automation/azure-ad-roles-and-permissions).

## 概要

「Runbook Permissions」は、特定のユーザーに対する runbook の可視性を定義します。特定の runbook は、全体でブロック/非表示にすることもできます。

「 [Runbook Customizations](https://docs.realmjoin.com/ja/zi-dong-hua/runbooks/runbook-customization)」と同様に、これらの権限の定義は、RealmJoin の Web ポータルの <https://portal.realmjoin.com/settings/runbooks-permissions> .

### このガイドについて

まず構文を簡単に説明し、その後で完全な例を少しずつ作成していきます。完全なサンプルへ直接移動して、そこから始めてもかまいません。 [そこから](#targetentitygroups).

## 構成構文

### runbook 名

runbook は、Azure Automation Account に表示される名前で参照されます。たとえば、 `rjgit-group_general_remove-group`.

ワイルドカード（'\*'）を使って複数の runbook に一致させることができます。同じ文字列内で複数のワイルドカードを使うこともできます。たとえば、 `rjgit-*_security_*`。これは以下のすべてに一致します。

* `rjgit-org_security_list-inactive-users`
* `rjgit-device_security_enable-or-disable-device`

接頭辞 `rjgit-` は、公開 GitHub リポジトリからインポートされた runbook を示します。顧客固有の runbook には接頭辞がありません。たとえば、 `user_userinfo_custom-runbook`

### Entra ID Groups

Entra ID グループは、次のように Object ID を使って参照されます。 `91688d11-9a34-42cd-8d1e-ce617d6c1234`。現在は、セキュリティ グループのみ使用できます。

## JSON 構造と例

完全な構成例を少しずつ作成していきます。

JSON 構成は複数のセクションで構成されますが、すべてのセクションは任意であり、省略できます。

コメントは "//" プレフィックスを使って追加できます。

### EnabledRunbookPatterns

このセクションには、使用を許可する runbook の一覧が含まれます。このセクションを省略すると、既定ですべての runbook が有効/許可されます。

このセクションを定義すると、このセクションに記載された runbook のみが、あらゆるロール / support および admin で使用可能になります。

#### 例

* 完全名を指定して、特定の個別 runbook のみを許可する

  `rjgit-group_general_remove-group`
* 共有リポジトリのデバイス関連 runbook をすべて許可する

  `rjgit-device_*`
* 共有の user runbook をすべて許可する

  `rjgit-user_*`
* 顧客固有（ローカル）の user 関連 runbook をすべて許可する

  `user_*`

これにより、group ベースおよび org ベースの runbook の多くが暗黙的に除外されます。注意してください。

```
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ]
}
```

### DisabledRunbookPatterns

全体で無効 / 禁止する runbook の一覧です。このセクションを省略するか空にすると、（ [EnabledRunbookPatterns](#enabledrunbookpatterns)で与えられた）すべての有効な runbook を使用できます。

このセクションのエントリは [EnabledRunbookPatterns ](#enabledrunbookpatterns)内のエントリより優先されます。- その runbook は、このテナント内の誰にとっても非表示/使用不可になります。

#### 例

前の `EnabledRunbookPatterns` セクションを再利用します。

* 共有（`rjgit-`）runbook をすべて無効化する `security` カテゴリで。

```
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ]
}
```

### Roles

このセクションでは、runbook の一覧を Entra ID グループに割り当てることができます。これにより、テナント内で複数の support / operator ロールを定義できます。

このセクションを省略すると、RealmJoin の support および administrators は、前のセクションで指定されたすべての runbook にアクセスできます。

{% hint style="warning" %}
有効にすると、どのロールにも属さないユーザーは runbook を見ることができません。
{% endhint %}

#### 例

これまでの内容を踏まえ、device-support ロールを作成してみましょう `DeviceAdmin` そして user support ロール `UserAdmin`.

これらのロールを複数の Entra ID グループに適用し、各ロールに許可された runbook の一覧を与えます。注意してください - これにより user support ロールはごく少数の runbook のみに制限されます。

Entra ID グループ名を示して読み手を助けるため、グループの object id の横にコメント（"//"）を追加しましょう。

```json
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ],
  "Roles": {
    "DeviceAdmin": {
      "Groups": [
        "9cbfc0af-c217-41e9-b790-3043788f1234", // 1st Device Support AAD Group
        "5555c0af-c217-41e9-b790-3043788f1234"  // 2nd Device Support AAD Group - other team
      ],
      "AllowedRunbookPatterns": [
        "rjgit-device_*"
      ]
    },
    "UserAdmin": {
      "Groups": [
        "1234c0af-c217-41e9-b790-3043788f1234" // User Support AAD Group
      ],
      "AllowedRunbookPatterns": [
        "rjgit-user_general_assign-or-unassign-license",
        "rjgit-user_mail_*",
        "user_*"
      ]
    }
  }
}
```

これで `UserAdmin` ロールは次のことができます。

* テナント内のすべてのユーザーにライセンスを割り当てる
* テナント内のすべてのユーザーのメールアドレスを変更する

その `DeviceAdmin` ロールは

* テナント内の任意のデバイスを wipe できます

### TargetEntityGroups

重要な VIP ユーザーがいるかもしれません。任意の support staff が VIP のデバイスを消去したり、VIP のメールアドレスを変更したりできるべきではありません。targeting を使うことで、重要なユーザーに対するロールを専任チームに制限できます。

「Devices」は Entra ID のデバイス オブジェクトではなく、主ユーザー/割り当てユーザーによって対象化されます。これにより、純粋にユーザーベースのグループ モデルを維持できます。

重要な VIP ユーザーを含む Entra ID グループが存在すると仮定します。このセクションを使うことで、これらの特定の Entra ID グループ（targets）に対する、より重要なロールと runbook を慎重にスコープ設定できます。

当然ながら、このセクションを省略すると、テナント内のすべてのユーザー/グループ/デバイスは同等に扱われます。

TargetEntityGroups を定義しても、このセクションに記載されていない他のグループには影響しません。

#### 完全な例

グループ `0000c0af-c217-41e9-b790-3043788f0000` が VIP ユーザーのグループだとします。

新しい Entra ID グループ `4444c0af-c217-41e9-b790-3043788f4444` を導入し、VIP ユーザーの管理を許可された support staff を含めます。これらの support staff は他の基本的な support 権限もすべて持つべきなので、既存のロールに追加します。

ロールを「制限」しても、supporter に新しいロールは付与されません。

```json
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ],
  "Roles": {
    "DeviceAdmin": {
      "Groups": [
        "9cbfc0af-c217-41e9-b790-3043788f1234", // 1st Device Support AAD Group
        "5555c0af-c217-41e9-b790-3043788f1234", // 2nd Device Support AAD Group - other team
        "4444c0af-c217-41e9-b790-3043788f4444"  // VIP Support Crew
      ],
      "AllowedRunbookPatterns": [
        "rjgit-device_*"
      ]
    },
    "UserAdmin": {
      "Groups": [
        "1234c0af-c217-41e9-b790-3043788f1234", // User Support AAD Group
        "4444c0af-c217-41e9-b790-3043788f4444"  // VIP Support Crew
      ],
      "AllowedRunbookPatterns": [
        "rjgit-user_general_assign-or-unassign-license",
        "rjgit-user_mail_*",
        "user_*"
      ]
    }
  },
  "TargetEntityGroups": {
    "0000c0af-c217-41e9-b790-3043788f0000": {  // VIP Users - Treat with care!
      "RestrictRoles": {
        "UserAdmin": [
          "4444c0af-c217-41e9-b790-3043788f4444" // VIP Support
        ],
        "DeviceAdmin": [
          "4444c0af-c217-41e9-b790-3043788f4444" // VIP Support
        ]
      }
    }
  }
}
```

#### **例: US Support Staff を US ユーザーの管理のみに制限する**

このシナリオでは、米国拠点の Support Staff が米国にいるユーザーのみを管理できるようにしたいとします。この制限を適用するには:

* 明示的に **拒否する** US Supporters が Runbooks を実行する能力を **すべてのユーザー**.
* 特定の例外ルールを追加して、 **許可する** Runbooks の実行を **US Users**.

これにより、US Supporters の権限が意図した対象（US Users）に厳密に限定され、対象外のユーザーとの誤操作を防げます。

**実装**

1. Runbook Runners の Entra グループを Realm Join Portal で割り当てる必要があります
   1. Settings > Permissions > Runbook Runner Permissions
   2. US Supporters の Entra グループは、RealmJoin Portal で一般的な Runbook 操作を許可するために、Runbook Runners Group のメンバーでなければなりません。
2. Settings > Runbook Permissions で新しいロールを追加する
   1. Roles セクションに、USSupporters ロールとその Entra グループ（group object ID）を追加する
   2. USSupporters 用の AllowedRunbookPatterns を追加する
3. TargetEntityGroups を変更する
   1. All-Users グループは、Role USSupporters を空の値で Restrict する必要があります（ここには Entra グループの object ID は追加されません）。これは暗黙の拒否です！
   2. US Users グループは、Role USSupporters を US Supporters の Entra グループ object ID に Restrict する必要があります

<figure><img src="https://3438325150-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FZ56Ipx6VuZDjIeZO2MTC%2Fimage.png?alt=media&#x26;token=e3f5fe54-0d17-46f0-a106-f51d548bde64" alt=""><figcaption><p>US Support Staff を US Users のみに管理させる制限</p></figcaption></figure>

以下がこのシナリオの完全な例です。

```json
{
  // Portal Permission:
  // Runbook Runner Role: US Supporters

  // Group Memberships:
  // 3e1e7540-7f0c-483c-b9bf-500342e2467c: All-Users
  // c603278c-cc36-4661-bb7a-eecb7ab079f9: US Supporters
  // 0f76d01e-cc6b-4553-bf1d-e4ccedd9c824: US Users

  "EnabledRunbookPatterns": [ // Mail および security Runbook の一般的な有効化
    "rjgit-*_mail_*",
    "rjgit-*security*"
  ],
  "DisabledRunbookPatterns": [
    "*password*"
  ],

  "Roles": {
    "USSupporters": {
      "Groups": [
        "c603278c-cc36-4661-bb7a-eecb7ab079f9" // US Supporters
      ],
      "AllowedRunbookPatterns": [ // このロールで許可される Runbooks - US Supporters
        "rjgit-user_*",
        "rjgit-device_*",
        "rjgit-group_*"
      ]
    }
  },
  
  "TargetEntityGroups": {
    "3e1e7540-7f0c-483c-b9bf-500342e2467c": { // All-Users
      "RestrictRoles": {
        "USSupporters": [
          // 一般的に、どの US Supporters に対しても Runbooks を許可しない
        ]
      }
    },
    "0f76d01e-cc6b-4553-bf1d-e4ccedd9c824": { // US Users
      "RestrictRoles": {
        "USSupporters": [
          "c603278c-cc36-4661-bb7a-eecb7ab079f9" // US Supporters
        ]
      }
    }
  }
}
```

### SchedulingEnabledRunbookPatterns

このセクションには、「スケジュール可能」としてフラグ付けされる runbook の一覧が含まれます。RealmJoin Port では、これらの runbook のスケジュールを割り当て/管理できます。詳細は [scheduling](https://docs.realmjoin.com/ja/zi-dong-hua/runbooks/scheduling "mention").

次の例は、SchedulingEnabledRunbookPatterns が定義されていない場合の既定動作を示します。

```json
{
  "SchedulingEnabledRunbookPatterns": [
    "*_scheduled"
  ]
}
```

### SchedulingDisabledRunbookPatterns

このセクションには、「スケジュール可能」としてフラグ付けされることをブラックリスト化する runbook の一覧が含まれます。RealmJoin Port では、これらの runbook のスケジュールを割り当て/管理できません。詳細は [scheduling](https://docs.realmjoin.com/ja/zi-dong-hua/runbooks/scheduling "mention").

SchedulingEnabledRunbookPatterns と SchedulingDisabledRunbookPatterns の両方に存在する runbook は **一致しません** スケジュール可能になります。&#x20;

既定では、ブラックリスト化された runbook はありません。次の例は構文を示すだけです。

```json
{
  "SchedulingDisabledRunbookPatterns": [
    "rjgit-user_*"
  ]
}
```
