# Managed Identities

{% hint style="info" %}
この機能にはバージョン **2.0** 以上が必要です。
{% endhint %}

SCEPman は、証明書およびユーザーとデバイスの OCSP 検証を提供するために、Entra Directory と Intune のエンドポイントと連携する必要があります。デプロイ後、SCEPman にはまだこれらのサービスへアクセスするための必要な権限がありません。この記事で説明する PowerShell モジュールは、必要な権限を SCEPman App Service の Managed Identity に追加し、インストールを完了します。

さらに、PowerShell モジュールは SCEPman 2.0 で導入された SCEPman Certificate Master コンポーネントに必要なバックグラウンド配線も追加します。SCEPman 1.x から SCEPman 2.x にアップグレードした場合、PowerShell モジュールは SCEPman Certificate Master コンポーネント用に 2 つの新しい Azure リソースも追加します。

## SCEPman インストール用 PowerShell モジュールを取得して実行する

新規に SCEPman 2.x をインストールした場合でも、SCEPman 1.x から SCEPman 2.x にアップグレードした場合でも、また一部のデプロイアーキテクチャ変更後でも、インストール手順は同じです。SCEPman PowerShell モジュールをダウンロードして実行すると、実行すべき内容を検出してインストールを完了します。SCEPman モジュールは何度実行してもかまいません。まだ不足しているものだけを追加します。

### 前提条件

* A **Global Admin** SCEPman をインストールしたいテナントのアカウント（または、 *Privileged Role Administrator* などの別の AAD ロール、および Azure Subscription への書き込み権限）。 *Application Administrator* ロールを使用し、その後 Global Administrator 権限が必要なコマンドを手動で実行するオプションもあります。
* [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) （としても知られています *az*）。Azure CLI は、モジュールを実行する推奨方法である [Azure Cloud Shell](https://docs.microsoft.com/en-us/azure/cloud-shell/overview)に事前インストールされています。

### SCEPman インストール CMDlet の実行

#### ホームページを有効化

前提条件が満たされたら、PowerShell Gallery から SCEPman インストールモジュールをインストールし、その後 CMDlet を実行して SCEPman と Certificate Master のインストールを完了できます。

1. まず、SCEPman App Service に移動して、Default domain をクリックします（下のスクリーンショットを参照）。これにより SCEPman のホームページに移動します。

<figure><img src="https://114237723-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2FOpFw5ty3cTxb27sfldRx%2F2024-04-17%2016_16_16.png?alt=media&#x26;token=ee0ac055-4107-494d-9990-8a610fbec7f7" alt=""><figcaption></figcaption></figure>

2. SCEPman インスタンスのホームページに表示されている PowerShell コマンドを、PowerShell または Azure Cloud Shell で実行します（下のスクリーンショットを参照）。これには SCEPman インスタンスを識別するためのパラメーターが含まれているため、ユーザー操作なしで理想的にコードを実行できます。

![](https://114237723-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2Fgit-blob-9189fc6b1b39a7ba68b3add0dfe55427083ef43e%2F2022-04-07SCEPmanV2.0AfterNewInstallation.png?alt=media)

{% hint style="warning" %}
CMDlet 実行後、SCEPman のホームページで「Service not available」または「502 Server Error」が表示されることがあります。その場合は 2〜3 分待ってからページを再読み込みしてください。
{% endhint %}

#### ホームページを無効化

SCEPman ホームページを無効にしている場合、または CMDlet を再度実行する必要がある場合は、次の手順を実行してください:

1. &#x20;下記のコードを PowerShell または Azure Cloud Shell に貼り付けます:

```
Install-Module SCEPman -Scope CurrentUser -Force
Complete-SCEPmanInstallation 6>&1
```

2. 次の入力を行ってください:

* SCEPman が実行されている Azure Subscription（アクセス権が複数ある場合）
* SCEPman App Service の名前（SCEPman ホームページのコードを使用した場合は不要）

3. （SCEPman のアップグレード時のみ）、さらに 2 つの確認が必要です:

* 新しい SCEPman Certificate Master App Service の名前（Enter キーで提案を承認するか、リソースの新しい名前を入力できます）
* 新しい Storage Account リソースの名前（同様に、Enter キーで提案を承認するか、リソースの新しい名前を入力できます）

### Global Admin ロールなしで SCEPman インストール CMDlet を実行する

次を使用します *-SkipAppRoleAssignments* Complete-SCEPmanInstallation のフラグを使うと、Global Admin 権限なしで CMDlet を実行できます。これにより、SCEPman および Certificate MasterApp Services の Managed Identities に必要な App Role の割り当てがスキップされます。その後、Global Administrator として App Role を手動で割り当てることができます。CMDlet は必要なコマンドをコンソールに出力します。

### Deployment Slots を使用する際の考慮事項

SCEPman モジュールは、特定の 1 つの Deployment Slot を使用するようにパラメーターで指定しない限り、すべての Deployment Slots の構成を更新します `-DeploymentSlotName` （これは技術的には Deployment Slot ではないため、メインのものにはできません）。構成更新により、SCEPman の設定は **Managed Identity 認証を使用するように** **Enterprise App 認証の代わりに変更されます**.&#x20;

SCEPman 1.x **は** Managed Identity 認証をサポートしていないため、CMDlet によって 1.x バージョンのままの Deployment Slots は使用不能になります。したがって、複数の Deployment Slots があり、それらを一度にすべてアップグレードしたくない場合は、本番スロットを最後に更新してください -- **そのアップグレードは他のすべての Deployment Slots にも影響します**.&#x20;

他の Deployment Slots については、 `-DeploymentSlotName` パラメーターを使用して、個々の Deployment Slots のみに対象を絞ります。これが Deployment Slot の SCEPman ホームページに表示される PowerShell コマンドなので、そのままコピーできます。

すべての Deployment Slots が 2.x で動作するようになったら、Complete-SCEPmanInstallation CMDlet をもう一度実行するだけで、すべてが Managed Identities を使用するようになります。

{% hint style="danger" %}
誤って SCEPman 1.x がまだ動作している Deployment Slot を Managed Identity 認証に更新してしまった場合は、 [ダウングレードガイド](https://docs.scepman.com/ja/deployment-options/enterprise-deployment#downgrade-from-2.x-to-1.x) を参照して、再度動作させてください。
{% endhint %}

### 1 つのテナントに SCEPman を複数回インストールする際の考慮事項

CMDlet Complete-SCEPmanInstallation は 2 つの App Registrations を作成します: `SCEPman-api` および `SCEPman-CertMaster`. [セクション「CMDlet が SCEPman Certificate Master をどのように構成するか](#how-the-cmdlet-configures-scepman-certificate-master)」では、これらの App Registrations が何を行うかを説明しています。CMDlet ではそれらの名前が一意であることが必要なため、1 つのテナントに複数の SCEPman インストールがある場合、既定ではこれらの App Registrations を共有します。つまり、ユーザーはすべての Certificate Master で同じロールを持ち、技術的には各 Certificate Master インスタンスが任意の SCEPman に証明書要求を送信できます（ただし、SCEPman Certificate Master をそのように構成しない限り、その動作は発生しません）。

この動作を望まない場合、たとえば SCEPman のインストールが組織の異なる部門に属している場合、あるいは 1 つの SCEPman インストールがプレプロダクション環境である場合、または SCEPman Root CA と SCEPman Issuing CA を持つ多層 PKI を使いたい場合は、SCEPman インスタンスに別の app registrations を使用するよう指定する必要があります。

この目的のために、Complete-SCEPmanInstallation CMDlet には 2 つのパラメーターがあります `-AzureADAppNameForSCEPman` および `-AzureADAppNameForCertMaster`。これらのパラメーターにより、App Registrations の名前を別々に定義できます。たとえば、Root CA では次のように CMDlet を呼び出せます:\
`Complete-SCEPmanInstallation -SCEPmanAppServiceName app-scepmanroot -SearchAllSubscriptions -AzureAdAppNameForSCEPman SCEPman-api-root -AzureAdAppNameForCertMaster -SCEPman-CertMaster-root 6>&1`

そして、Subordinate CA では次のようにもう一度呼び出します:

`Complete-SCEPmanInstallation -SCEPmanAppServiceName app-scepmansub -SearchAllSubscriptions -AzureAdAppNameForSCEPman SCEPman-api-sub -AzureAdAppNameForCertMaster -SCEPman-CertMaster-sub 6>&1`

## SCEPman PowerShell モジュールのバックグラウンド詳細

このセクションでは、PowerShell モジュールの内部動作を説明します。スクリプトの変更が必要な特殊な構成がある場合、特別な権限を付与する必要がある場合、SCEPman のインストールで問題をトラブルシューティングする必要がある場合、または独自プロジェクトのインストール スクリプトを作成するために内部動作を理解したい場合に役立ちます。PowerShell モジュールはオープンソース ソフトウェアです。そのソースコードは [GitHub Repository](https://github.com/scepman/scepman-psmodule)で確認できます。Pull Request を歓迎します！

コマンドレットは `6>&1`を付けて実行することを推奨します。これにより情報ストリームがリダイレクトされ、画面に出力されるため、省略した場合よりもプログラムの状態に関するより多くの情報が得られます。さらに `-Verbose`を追加すると、スクリプトの動作に関するさらに多くの情報が表示されます。

### CMDlet が SCEPman をどのように構成するか

PowerShell CMDlet は SCEPman App Service を検索します。App Service はシステム割り当ての Managed Identity を使用しており、通常のインストールではすでに SCEPman の Azure Key Vault へのアクセス権を持っています。CMDlet は Microsoft Graph へのアクセス権を追加し、AAD と Intune で受信 OCSP 要求のユーザーとデバイスを検索できるようにし、さらに Intune 自体へのアクセス権を追加して受信 SCEP 要求を検証できるようにします。

### CMDlet が SCEPman 1.x からの更新をどのように処理するか

SCEPman への権限付与に加えて、このモジュールはアップグレード時に 2 つの新しい Azure リソースを追加します:

* SCEPman Certificate Master App Service
* 手動で作成された証明書用に SCEPman と SCEPman Certificate Master が共有する Storage Account

SCEPman Certificate Master コンポーネントを使用しない Community Edition であっても、この 2 つの新しいリソースは追加されます。これにより、必要に応じて Enterprise Edition への切り替えがより簡単になり、追加コストは発生しません。Storage Account は空のままで、Microsoft の課金はストレージ容量に応じて行われます。また、Certificate Master App Service は SCEPman と App Service Plan を共有するため、これも追加コストは発生しません。

SCEPman 1.x は Microsoft Graph と Intune への認証に App Registration を使用していましたが、SCEPman 2.x は Managed Identity を使用できます。CMDlet は次の設定を変更して Managed Identity に切り替えます:

* [AppConfig:AuthConfig:ApplicationId](https://docs.scepman.com/ja/scepman-no/application-settings/dependencies-azure-services/azure-ad#appconfigauthconfigapplicationid) は、権限のない新しく作成された app registration に設定されます。これは認証に使用されます *に対して* SCEPman の認証先としてではなく、SCEPman によって使用されます。古い値は `Backup:AppConfig:AuthConfig:ApplicationId`.
* [AppConfig:AuthConfig:ApplicationKey](https://docs.scepman.com/ja/scepman-no/application-settings/dependencies-azure-services/azure-ad#appconfigauthconfigapplicationkey) が削除されると、古い値は `Backup:AppConfig:AuthConfig:ApplicationKey`としてバックアップされます。SCEPman は Application として認証しないため、これはもはや必要ありません。
* [AppConfig:AuthConfig:ManagedIdentityEnabledOnUnixTime](https://docs.scepman.com/ja/scepman-no/application-settings/dependencies-azure-services/azure-ad#appconfigauthconfigmanagedidentityenabledonunixtime) には、CMDlet が実行された時刻が含まれます。SCEPman が Managed Identity を使用してトークンを取得するのは、CMDlet 実行後しばらくしてからです。なぜなら、その時点でのみ、トークン内のロールが CMDlet によって追加された正しい権限を反映するからです。

### CMDlet が SCEPman Certificate Master をどのように構成するか

SCEPman App Service のホームページには、機密性のない読み取り専用情報のみを表示するため、匿名アクセスが許可されています。対照的に、SCEPman Certificate Master コンポーネントはユーザーに証明書の発行を許可します。そのため、認証済みアクセスのみを許可し、かつ適切な権限がある場合にのみ許可されます。これには、ログイン中のユーザーを確認するための Delegated Permissions を持つ Azure App Registration と、正しいログイン URL 設定が必要です。このモジュールはこの App Registration を `SCEPman-CertMaster` として Azure テナントに登録します。

さらに、SCEPman Certificate Master App Service は、証明書を発行するために Certificate Signing Requests (CSRs) をコアの SCEPman App Service に送信する権限が必要です。この背後にある認証メカニズムは、別の App Registration に基づいています: `SCEPman-api`。SCEPman は *SCEPman-api* を使用して CSR 送信権限を管理します。スクリプトは SCEPman-api を登録し、送信権限を SCEPman Certificate Master Managed Identity に追加します。

{% hint style="info" %}
SCEPman を 1.x から 2.x にアップグレードし、PS スクリプトが正常に実行された場合、SCEPman 1.x で使用されていた App Registration を削除できます

SCEPman V2.x は 2 つの新しい App Registrations を使用します: 「SCEPman-api」と「SCEPman-CertMaster」
{% endhint %}
