# 要件

## PowerShell モジュール

{% hint style="info" %}
PowerShell モジュール セクションは、以下に基づいて自動的に更新されます。 [公開リポジトリ](https://github.com/realmjoin/realmjoin-runbooks).
{% endhint %}

で利用可能な共有 Runbook は [GitHub](https://github.com/realmjoin/realmjoin-runbooks) 次の Windows PowerShell モジュールを想定/使用します:

| モジュール                            | Runbook における最小バージョン |
| -------------------------------- | ------------------- |
| `Az.Accounts`                    | 5.3.2               |
| `Az.Compute`                     | 5.1.1               |
| `Az.DesktopVirtualization`       | 5.4.1               |
| `Az.ManagementPartner`           | 0.7.5               |
| `Az.Resources`                   | 9.0.1               |
| `Az.Storage`                     | 9.6.0               |
| `ExchangeOnlineManagement`       | 3.9.2               |
| `Microsoft.Graph.Authentication` | 2.35.1              |
| `MicrosoftTeams`                 | 7.6.0               |
| `RealmJoin.RunbookHelper`        | 0.8.5               |

RealmJoin Portal は、Runbook 内から参照されている場合、これらのモジュールを自動的にインポートしてインストールします。このインポートでは、モジュールに指定された最小バージョンも考慮されます。

## 権限

{% hint style="info" %}
権限セクションは、以下に基づいて自動的に更新されます。 [公開リポジトリ](https://github.com/realmjoin/realmjoin-runbooks).
{% endhint %}

RealmJoin の共有 Runbook は、Azure Automation の [システム割り当てマネージド ID](https://learn.microsoft.com/en-us/azure/automation/enable-managed-identity-for-automation) を使用して、Entra ID、MS Graph API などと連携します。

以下のロールと権限の一覧により、現在共有リポジトリで利用可能なすべての Runbook を使用できるようになります。

Runbook はこの権限セットに対してのみテストされているため、これらのロール/権限を減らすことは推奨されません。ロール/権限のセットを減らすと、一部の Runbook は動作しなくなります。

### Entra ID ロール

次の Entra ID ロールをマネージド ID に割り当ててください

* Application Developer
* Cloud Device Administrator
* Exchange 管理者
* Teams Administrator
* ユーザー管理者

### Graph API の権限

次の Graph API 権限をマネージド ID に付与してください

* `Application.Read.All`
* `Application.ReadWrite.OwnedBy`
* `AuditLog.Read.All`
* `BitlockerKey.Read.All`
* `CloudPC.ReadWrite.All`
* `Device.ReadWrite.All`
* `DeviceLocalCredential.Read.All`
* `DeviceManagementApps.ReadWrite.All`
* `DeviceManagementConfiguration.ReadWrite.All`
* `DeviceManagementManagedDevices.PrivilegedOperations.All`
* `DeviceManagementManagedDevices.ReadWrite.All`
* `DeviceManagementServiceConfig.ReadWrite.All`
* `Directory.Read.All`
* `Group.Create`
* `Group.ReadWrite.All`
* `GroupMember.ReadWrite.All`
* `IdentityRiskyUser.ReadWrite.All`
* `InformationProtectionPolicy.Read.All`
* `Mail.Send`
* `Organization.Read.All`
* `Place.Read.All`
* `Policy.Read.All`
* `Reports.Read.All`
* `RoleAssignmentSchedule.Read.Directory`
* `RoleManagement.Read.All`
* `RoleManagement.Read.Directory`
* `Team.Create`
* `TeamSettings.ReadWrite.All`
* `User.ReadWrite.All`
* `UserAuthenticationMethod.ReadWrite.All`
* `WindowsUpdates.ReadWrite.All`

### その他のアプリ API 権限

次の Office 365 Exchange Online API 権限をマネージド ID に付与してください

* `Exchange.ManageAsApp`

次の WindowsDefenderATP API 権限をマネージド ID に付与してください

* `Machine.Read.All`
* `Machine.Isolate`
* `Machine.RestrictExecution`
* `Ti.ReadWrite.All`

次の SharePoint API 権限をマネージド ID に付与してください

* `User.Read.All`
* `Sites.Read.All`
* `Sites.FullControl.All`

### ロールと権限の付与

マネージド ID への権限付与は、現時点では Azure Portal では行えません。この目的には MS Graph / PowerShell スクリプトの使用を推奨します。

この手順の例を見つけることができます [こちら](https://github.com/Workplace-Foundation/approle-and-directoryrole-granter).

### Azure リソースの権限

Runbook 用の Azure Automation アカウントをホストしているサブスクリプションまたはリソース グループには、少なくとも「Contributor」アクセス権を付与してください

一部の Runbook は、レポートやバックアップを保存するために Azure Storage Account を使用します。対応するサブスクリプションまたはリソース グループには、少なくとも「Contributor」アクセス権を付与してください。すると、多くの Runbook はそのリソース グループ内に必要なリソースを自分で作成できます。

## 認証方法

### マネージド ID

Azure Automation は [マネージド ID](https://docs.microsoft.com/en-us/azure/automation/enable-managed-identity-for-automation) (システム割り当て) を主要な認証方法としてサポートしています。これにより、非推奨の RunAs アカウントが置き換えられます。

RealmJoin Runbook は、マネージド ID が構成されていない場合、現在 RunAs アカウントをサポートしています。

{% hint style="warning" %}
マネージド ID と RunAs アカウントが同時に構成されている場合、RealmJoin の共有リポジトリにある Runbook は、サポート用の `RealmJoin.RunbookHelper` モジュールの v0.8.0 以降の新しいバージョンを使用する際、既定でマネージド ID の使用を優先します。

古いバージョンのモジュールでは、マネージド ID を十分に活用できず、RunAs アカウントが優先されていました。

必要な権限をマネージド ID に付与するか、完全に無効化して RunAs アカウントのみを使用するようにしてください。
{% endhint %}

### クライアント シークレット

一部のプライベート Runbook では、ClientID/Secret 形式の認証が必要になる場合があります。現在、ClientID と Secret を必要とする共有 Runbook はありません。

必要であれば、ClientID と Secret は Azure Automation Account の "realmjoin-automation-cred" という名前のマネージド資格情報に保存できます。

現在、Automation Account 内の "realmjoin-automation-cred" は既定で RJ-Wizard により作成されますが、ランダムな値が設定されています。正しい値を入力する必要があります。
