
# Entra サービス プリンシパルを使用した Azure DevOps PR ゲーティング

個人用アクセス トークン（PAT）の代わりに、Aikido に、あなたが所有する Microsoft Entra のサービス プリンシパルとして、Azure DevOps 組織にプル リクエスト（PR）のステータスとコメントを投稿させることができます。トークンやシークレットは作成も保存もされません。各呼び出しごとに、Aikido は Microsoft Entra に対して自身の身元を証明し、Microsoft Entra はサービス プリンシパル用の短時間のみ有効なアクセス トークンを発行します。有効期限が切れるものも、ローテーションが必要なものもなく、すべてのステータスとコメントはアプリケーション自身の名前で投稿されます。

{% hint style="info" %}
ワークスペースは Azure DevOps Services（dev.azure.com）に接続されている必要があり、Azure DevOps 組織は Microsoft Entra テナント（**組織設定** → **Microsoft Entra**）に接続されている必要があります。そのテナントでアプリケーションを登録でき、Azure DevOps 組織でユーザーを追加して権限を変更できる必要があります。また、プロジェクトごとに 1 つのコマンドを実行するために Azure CLI も必要です。Azure DevOps Server では引き続き PAT を使用します。
{% endhint %}

{% hint style="warning" %}
Aikido 経由の Azure DevOps PR ゲーティングは、Azure Repos Git リポジトリのみをサポートします。Team Foundation Version Control (TFVC) リポジトリは、PR ゲーティングや Code Quality ゲートではサポートされていません。
{% endhint %}

**まず**、次に移動します [一般設定](https://app.aikido.dev/settings/account)に戻り、】【t\_f3941c4b":"デバイスを接続","t\_5d4f039e":"管理対象デバイスでインストールコマンドを実行する","t\_831d390e":"Workspace ONE UEM コンソールで、次の場所に移動します：","t\_8edbd69c":"リソース","t\_72eed93f":"→","t\_ba9a6e6d":"スクリプト","t\_d113c2a0":"を選択し、","t\_96cd98c8":"Windows","t\_249d2587":"をドロップダウンから選択します。","t\_43b01c7b":"","t\_36c80f14":"一般","t\_f6ef8739":"タブで、スクリプトに名前を付けます（例：\\"Aikido Device Protection Install\\"）。","t\_c35a5a82":"詳細","t\_0acd71e4":"タブで、次を設定します：","t\_be245649":"言語","t\_1ae764eb":"PowerShell","t\_7640c765":"実行コンテキストと権限","t\_4a0c02ed":"システムコンテキスト","t\_ad9531b5":"Aikido ダッシュボードからコピーした PowerShell インストールコマンドを、スクリプト本文に貼り付けます。","t\_b083cb05":"割り当て","t\_2f2f8b67":"タブで、対象の Windows スマートグループにスクリプトを割り当て、トリガーを次回のサンプル時に実行するよう設定します。","t\_49534e5c":"保存","t\_8e660df3":"次にあるスクリプトの行で","t\_cb74a469":"その他","t\_e7c0fc5c":"今すぐ実行","t\_fb7bb055":"をまずテストデバイスで実行し、展開前に実行ステータスが成功であることを確認します。","t\_2876b474":"スクリプトにはデバイス上の Intelligent Hub が必要です。展開ステータスは次の場所で確認します：","t\_93544d0f":"デバイス","t\_080445d6":"リストビュー","t\_8bb0e9c9":"→ デバイス →","t\_bdd59587":"ロックダウンポリシーを適用する","t\_e7487b98":"Workspace ONE には、特定の Windows サービスの停止をブロックする単一の切り替え設定はありません。以下の 2 つの制御を組み合わせて、エージェントの改ざん耐性を高めます。","t\_0fcb4797":"Workspace ONE プロファイルを 2 つ別々に作成します。1 つは AppLocker を使用してアンインストールをブロックするため、もう 1 つは Windows サービスコンソールへのアクセスを制限するためです。","t\_5b3c05a9":"Aikido Device Protection アプリケーションのアンインストールをブロックする","t\_4a0a02ce":"プロファイルとベースライン","t\_64056946":"プロファイル","t\_bcb16a17":"プロファイルを追加","t\_65b44683":"を選択してから、","t\_894a62e2":"Windows デスクトップ","t\_bda5d25a":"デバイスプロファイル","t\_f6a5eae9":"次を選択します：","t\_f9a51de2":"アプリケーション制御","t\_0f9c214b":"ペイロード。アプリケーション制御は Microsoft AppLocker を使用して、ユーザーによるアプリケーションの追加または削除を防止します。","t\_cfd7a295":"次の内容を貼り付けます：","t\_bebb586b":"aikido-applocker-deny-mdm.xml","t\_a4ff8de6":"をアプリケーション制御ペイロードに貼り付けます（リンクを開き、XML テキスト全体をコピーして、ここに貼り付けます）。","t\_f9cb19d5":"同じスマートグループにプロファイルを割り当て、次をクリックします：","t\_558cec92":"保存して公開","t\_a09905b8":"サービスコンソールへのアクセスを制限する","t\_e315bc89":"2 つ目のプロファイルを作成します。次の場所に移動します：","t\_fc8734d7":"カスタム設定","t\_d8a9538b":"ペイロード。","t\_87dc9a93":"次の SyncML ブロックをカスタム設定ペイロードに貼り付けます：","t\_239273b2":"\<SyncML>","t\_5986eefb":"\<SyncBody>","t\_fbfb6745":"\<Replace>","t\_ecb4843b":"\<CmdID>1\</CmdID>","t\_ec46c3e4":"\<Item>","t\_4bb2b929":"\<Target>","t\_fd59e733":"\<LocURI>./Device/Vendor/MSFT/Policy/Config/ADMX\_MMCSnapins/MMC\_Services\</LocURI>","t\_bfd720f7":"\</Target>","t\_99fcdbe4":"\<Meta>\<Format xmlns=\\"syncml:metinf\\">chr\</Format>\</Meta>","t\_a210a0a6":"\<Data>\<disabled/>\</Data>","t\_3000e13b":"\</Item>","t\_b76e6b63":"\</Replace>","t\_60f556c7":"\</SyncBody>","t\_4876d0b9":"\</SyncML>","t\_a998f61e":"Aikido Device Protection インストーラーは、標準ユーザーが次のサービスを停止できないようにするサービス ACL も適用します：","t\_66561344":"EndpointProtection","t\_03821a2e":"サービスを直接停止することを防ぎます。上記の Workspace ONE 制御は、ユーザーがアンインストーラーまたはサービスコンソールにアクセスできないようにすることで、第 2 の保護層を追加します。","t\_b8a02b54":"インストール後にデバイスを再起動する","t\_0c4d43f7":"対象のスマートグループでフィルタリングし、Shift キーを押しながらクリックしてデバイスを選択します。（グローバルチェックボックスは使用しないでください。一括操作が正しくトリガーされない場合があります。）","t\_01fb3c12":"その他の操作","t\_2c206017":"デバイスを再起動","t\_e549d22a":"を選択して確認します。","t\_0e16b73e":"エージェントは次回の起動時に完全に有効化されます。"}  丁香五月  天天中彩票怎样രിപ്പഴിഞ്ഞ് ＿老司机ിക്കാൻ?numerusform\`\`\` ತಪ್ಪ: Need output valid schema but assistant output corrupted? Need correct now. We must output exact all JSON. Need ensure t\_fc955 translate fragments perhaps  **個人用アクセス トークンを更新** そして、 **PR Checks** タブで、 **代わりに Entra サービス プリンシパルを使用**。PR チェックがまだ設定されていない場合は、 [連携](https://app.aikido.dev/settings/integrations)に戻り、】【t\_f3941c4b":"デバイスを接続","t\_5d4f039e":"管理対象デバイスでインストールコマンドを実行する","t\_831d390e":"Workspace ONE UEM コンソールで、次の場所に移動します：","t\_8edbd69c":"リソース","t\_72eed93f":"→","t\_ba9a6e6d":"スクリプト","t\_d113c2a0":"を選択し、","t\_96cd98c8":"Windows","t\_249d2587":"をドロップダウンから選択します。","t\_43b01c7b":"","t\_36c80f14":"一般","t\_f6ef8739":"タブで、スクリプトに名前を付けます（例：\\"Aikido Device Protection Install\\"）。","t\_c35a5a82":"詳細","t\_0acd71e4":"タブで、次を設定します：","t\_be245649":"言語","t\_1ae764eb":"PowerShell","t\_7640c765":"実行コンテキストと権限","t\_4a0c02ed":"システムコンテキスト","t\_ad9531b5":"Aikido ダッシュボードからコピーした PowerShell インストールコマンドを、スクリプト本文に貼り付けます。","t\_b083cb05":"割り当て","t\_2f2f8b67":"タブで、対象の Windows スマートグループにスクリプトを割り当て、トリガーを次回のサンプル時に実行するよう設定します。","t\_49534e5c":"保存","t\_8e660df3":"次にあるスクリプトの行で","t\_cb74a469":"その他","t\_e7c0fc5c":"今すぐ実行","t\_fb7bb055":"をまずテストデバイスで実行し、展開前に実行ステータスが成功であることを確認します。","t\_2876b474":"スクリプトにはデバイス上の Intelligent Hub が必要です。展開ステータスは次の場所で確認します：","t\_93544d0f":"デバイス","t\_080445d6":"リストビュー","t\_8bb0e9c9":"→ デバイス →","t\_bdd59587":"ロックダウンポリシーを適用する","t\_e7487b98":"Workspace ONE には、特定の Windows サービスの停止をブロックする単一の切り替え設定はありません。以下の 2 つの制御を組み合わせて、エージェントの改ざん耐性を高めます。","t\_0fcb4797":"Workspace ONE プロファイルを 2 つ別々に作成します。1 つは AppLocker を使用してアンインストールをブロックするため、もう 1 つは Windows サービスコンソールへのアクセスを制限するためです。","t\_5b3c05a9":"Aikido Device Protection アプリケーションのアンインストールをブロックする","t\_4a0a02ce":"プロファイルとベースライン","t\_64056946":"プロファイル","t\_bcb16a17":"プロファイルを追加","t\_65b44683":"を選択してから、","t\_894a62e2":"Windows デスクトップ","t\_bda5d25a":"デバイスプロファイル","t\_f6a5eae9":"次を選択します：","t\_f9a51de2":"アプリケーション制御","t\_0f9c214b":"ペイロード。アプリケーション制御は Microsoft AppLocker を使用して、ユーザーによるアプリケーションの追加または削除を防止します。","t\_cfd7a295":"次の内容を貼り付けます：","t\_bebb586b":"aikido-applocker-deny-mdm.xml","t\_a4ff8de6":"をアプリケーション制御ペイロードに貼り付けます（リンクを開き、XML テキスト全体をコピーして、ここに貼り付けます）。","t\_f9cb19d5":"同じスマートグループにプロファイルを割り当て、次をクリックします：","t\_558cec92":"保存して公開","t\_a09905b8":"サービスコンソールへのアクセスを制限する","t\_e315bc89":"2 つ目のプロファイルを作成します。次の場所に移動します：","t\_fc8734d7":"カスタム設定","t\_d8a9538b":"ペイロード。","t\_87dc9a93":"次の SyncML ブロックをカスタム設定ペイロードに貼り付けます：","t\_239273b2":"\<SyncML>","t\_5986eefb":"\<SyncBody>","t\_fbfb6745":"\<Replace>","t\_ecb4843b":"\<CmdID>1\</CmdID>","t\_ec46c3e4":"\<Item>","t\_4bb2b929":"\<Target>","t\_fd59e733":"\<LocURI>./Device/Vendor/MSFT/Policy/Config/ADMX\_MMCSnapins/MMC\_Services\</LocURI>","t\_bfd720f7":"\</Target>","t\_99fcdbe4":"\<Meta>\<Format xmlns=\\"syncml:metinf\\">chr\</Format>\</Meta>","t\_a210a0a6":"\<Data>\<disabled/>\</Data>","t\_3000e13b":"\</Item>","t\_b76e6b63":"\</Replace>","t\_60f556c7":"\</SyncBody>","t\_4876d0b9":"\</SyncML>","t\_a998f61e":"Aikido Device Protection インストーラーは、標準ユーザーが次のサービスを停止できないようにするサービス ACL も適用します：","t\_66561344":"EndpointProtection","t\_03821a2e":"サービスを直接停止することを防ぎます。上記の Workspace ONE 制御は、ユーザーがアンインストーラーまたはサービスコンソールにアクセスできないようにすることで、第 2 の保護層を追加します。","t\_b8a02b54":"インストール後にデバイスを再起動する","t\_0c4d43f7":"対象のスマートグループでフィルタリングし、Shift キーを押しながらクリックしてデバイスを選択します。（グローバルチェックボックスは使用しないでください。一括操作が正しくトリガーされない場合があります。）","t\_01fb3c12":"その他の操作","t\_2c206017":"デバイスを再起動","t\_e549d22a":"を選択して確認します。","t\_0e16b73e":"エージェントは次回の起動時に完全に有効化されます。"}  丁香五月  天天中彩票怎样രിപ്പഴിഞ്ഞ് ＿老司机ിക്കാൻ?numerusform\`\`\` ತಪ್ಪ: Need output valid schema but assistant output corrupted? Need correct now. We must output exact all JSON. Need ensure t\_fc955 translate fragments perhaps  **接続する** Azure DevOps PR チェックで、個人用アクセス トークンのページでも同じボタンをクリックします。

<figure><img src="https://help.aikidogov.us/_assets/d87cc7fc989f/azure-devops-pr-checks-use-entra-service-principal.png" alt="PR Checks tab in Aikido with the personal access token card and the button to use an Entra service principal instead"><figcaption></figcaption></figure>

サービス プリンシパルの管理ページに移動します。次の場所からも見つけられます: [Azure DevOps PR Checks のサービス プリンシパルを管理](https://app.aikido.dev/settings/integrations/azure-devops/checks/service-principal)からも開けます。このページは開いたままにしておいてください。ここには次のセクションで必要な **発行者**, **サブジェクト識別子**、および **オーディエンス** が表示されています。

<figure><img src="https://help.aikidogov.us/_assets/e83f98f8f4f9/azure-devops-scanning-service-principal-page.png" alt="Aikido service principal page showing the issuer, subject identifier, and audience values"><figcaption></figcaption></figure>

{% hint style="info" %}
すでに設定済みであっても、PR チェック用に別のアプリケーションを作成してください [コードスキャン](https://help.aikidogov.us/docs/docs-ja/code-scanning/connect-your-source-code/code-scanning-for-azure-devops-with-entra-service-principal) または [AutoFix](https://help.aikidogov.us/docs/docs-ja/autofix-and-remediation/configure/autofix-for-azure-devops-with-entra-service-principal) Entra のサービス プリンシパルを使っていても同様です。Issuer と Audience は同じですが、PR チェックでは独自の Aikido ID を使用するため、Subject 識別子は異なります。PR チェックのページからコピーしてください。
{% endhint %}

**次に**、以下の手順に従って Microsoft Entra でサービス プリンシパルを作成し、Azure DevOps でアクセス権を付与します。

## Microsoft Entra にアプリケーションを登録

1. を開き、 [Microsoft Entra 管理センター](https://entra.microsoft.com)、次に移動します **Entra ID** → **アプリの登録** に移動し、 **新しい登録**.
2. アプリケーションに次の名前を付けてください **Aikido PR Checks**、そのまま **シングルテナントのみ** 選択したままにし、リダイレクト URI は空欄のままにして、 **登録**.

<figure><img src="https://help.aikidogov.us/_assets/8284c4966d1c/azure-devops-pr-checks-entra-register-app.png" alt="Register an application form in Microsoft Entra with the name Aikido PR Checks and single tenant selected"><figcaption></figcaption></figure>

3. On the **概要** アプリケーションのページで、次をコピーします: **アプリケーション（クライアント）ID** と **ディレクトリ（テナント）ID**。これら 2 つは後で Aikido に入力します。

<figure><img src="https://help.aikidogov.us/_assets/3937408a491b/azure-devops-pr-checks-entra-app-overview.png" alt="Overview page of the Aikido PR Checks application in Microsoft Entra showing the application (client) ID and directory (tenant) ID"><figcaption></figcaption></figure>

4. 次へ移動します： **証明書とシークレット** → **フェデレーション資格情報** に移動し、 **資格情報を追加**.

<figure><img src="https://help.aikidogov.us/_assets/d7a19901e2a7/azure-devops-scanning-entra-federated-credentials.png" alt="Federated credentials tab of the Entra application with the Add credential button"><figcaption></figcaption></figure>

5. 選択します **その他の発行者** そして、Aikido のサービス プリンシパル管理ページに表示されているとおりに値を正確に入力します:

* **発行者**：Aikido に表示されている発行者
* **種類**：明示的なサブジェクト識別子
* **値**：Aikido に表示されているサブジェクト識別子
* **オーディエンス**：次をクリックします **編集** そして、既定値を Aikido に表示されている Audience に置き換えます。そこにはワークスペース ID が含まれているため、Aikido がそのワークスペース向けに発行したトークンのみが受け入れられます。

資格情報に名前を付けます。たとえば **aikido-pr-checks**、次をクリックし **追加**。クライアント シークレットや証明書は不要です。

<figure><img src="https://help.aikidogov.us/_assets/89f629512d2c/azure-devops-pr-checks-entra-add-credential.png" alt="Add a credential form in Microsoft Entra filled in with the issuer, subject identifier, and audience from Aikido"><figcaption></figcaption></figure>

## Azure DevOps でアクセス権を付与

PR チェックには Azure DevOps で 3 つの権限が必要です。リポジトリへの読み取りアクセス、プル リクエストにステータスとコメントを投稿する権限、そしてプル リクエストが作成・更新・コメントされたときに Aikido に通知する service hooks を作成および削除する権限です。付与するのはその 3 つだけにしてください。

### アプリケーションをプロジェクトに追加

1. Azure DevOps で、次へ移動します **組織設定** → **ユーザー** に移動し、 **ユーザーを追加**.
2. アプリケーション名（**Aikido PR Checks**）、次を設定します **アクセス レベル** を **Basic**、PR チェックを有効にしたいプロジェクトに追加します。アプリケーションがまだ表示されない場合は、1 分ほど待ってから再度検索してください。
3. 次の項目の下で **Azure DevOps グループ**、そのまま **Project Readers**。次にクリックします **追加**.

<figure><img src="https://help.aikidogov.us/_assets/1411f8146b32/azure-devops-pr-checks-add-service-principal-as-user.png" alt="Add new users panel in Azure DevOps with the service principal, Basic access level, a project, and the Project Readers group selected"><figcaption></figcaption></figure>

### プル リクエストへの変更を許可

アプリケーションを追加した各プロジェクトでこれを繰り返してください。

1. プロジェクトを開き、次へ移動します **プロジェクト設定** → **リポジトリ** → **セキュリティ**.
2. 最上位のままにしておきます **Git リポジトリ** ノードにすると権限がプロジェクト内のすべてのリポジトリに適用されます。あるいは、単一のリポジトリを選択します。
3. アプリケーション名を検索して選択します。
4. 次の項目を設定します： **プル リクエストへの貢献** を **許可**。その他のすべての権限は次のままにします **未設定**：PR チェックはコードをプッシュしません。

### サービス フックの管理を許可

サービス フックは、リポジトリで PR チェックを有効にしたときに Aikido が作成し、無効にしたときに削除する Webhook です。Azure DevOps にはこの権限用のページはありません。既定ではプロジェクト管理者だけがこの権限を持ち、Microsoft は Azure CLI または REST API を使って他のユーザーに付与する方法を案内しています。この方法で付与すると、アプリケーションは管理者グループに含まれないため、権限の変更、リポジトリの削除、その他プロジェクト内の何かに触れることができません。

以下のコマンドを、次のものを使って実行します [Azure CLI](https://learn.microsoft.com/cli/azure/install-azure-cli) とその `azure-devops` 拡張機能を使い、Project Collection Administrator としてサインインした状態で実行します。アプリケーションを追加した各プロジェクトで繰り返してください。

1. プロジェクトの ID を取得します：

```shell
az devops project show --org https://dev.azure.com/<your-organization> --project "<project name>" --query id -o tsv
```

2. アプリケーションの descriptor を取得します。次で始まります `aadsp.`:

```shell
az devops invoke --org https://dev.azure.com/<your-organization> --area graph --resource serviceprincipals --api-version 7.1-preview --query "value[?displayName=='Aikido PR Checks'].descriptor" -o tsv
```

3. アプリケーションに、プロジェクトのサービス フックの表示と編集を許可します。namespace id は Azure DevOps における service hooks 権限の固定 ID であり、 `3` は **サブスクリプションの表示** と **サブスクリプションの編集**:

```shell
az devops security permission update --org https://dev.azure.com/<your-organization> \
  --namespace-id cb594ebe-87dd-4fc9-ac2c-6a10a4c92046 \
  --subject <application-descriptor> \
  --token PublisherSecurity/<project-id> \
  --allow-bit 3 -o table
```

出力には次が表示されます **ViewSubscriptions** と **EditSubscriptions** として *許可*。Edit にはサブスクリプションの削除も含まれます。

{% hint style="info" %}
これは、PAT の設定でトークンを作成する人に必要とされるのと同じ権限であり、そのためその設定には管理者が必要です。サービス プリンシパルを使う場合は、その権限をアプリケーションのみに付与します。
{% endhint %}

## Aikido に接続

1. Aikido のサービス プリンシパル管理ページに戻ります。
2. 先ほどコピーした **ディレクトリ（テナント）ID** と **アプリケーション（クライアント）ID** 先ほどコピーしたものを入力し、次をクリックします **サービス プリンシパルを保存**。Aikido は Microsoft Entra にトークンを要求し、Azure DevOps 組織のリポジトリにアクセスできることを確認し、保存前にテスト用サブスクリプションを作成・削除して service hooks を管理できることを確認します。

これで準備完了です。PR チェックはこれからサービス プリンシパルとして認証され、 **PR Checks** タブには、どのアプリケーションが使用中かが表示されます。ゲート対象にしたいリポジトリは、 [Azure DevOps PR Checks](https://app.aikido.dev/settings/integrations/azure-devops/checks) ページで設定します。詳しくは [Azure DevOps PRゲーティング](https://help.aikidogov.us/docs/docs-ja/pr-and-release-gating/azure-pipelines-ci-pr-gating-via-aikido-dashboard-with-a-personal-access-token)。Service hooks、ステータス、コメントは次によって作成されます **Aikido PR Checks**.

<figure><img src="https://help.aikidogov.us/_assets/a8bbdb9e448d/azure-devops-pr-checks-service-principal-saved.png" alt="Azure DevOps PR Checks page in Aikido after saving the service principal, with the repository list ready to configure"><figcaption></figcaption></figure>

{% hint style="info" %}
PAT に戻すには、次をクリックします **代わりに個人用アクセス トークンを使用する** の **PR Checks** タブを開いてトークンを保存します。これによりサービス プリンシパルは削除されますが、リポジトリ設定はそのまま機能し続けます。 **アンインストール** Azure DevOps PR Checks ページでこれを行うと、service hooks、連携、サービス プリンシパルが削除されます。Microsoft Entra でフェデレーション資格情報を削除するか、Azure DevOps 組織からアプリケーションを削除すると、Aikido のアクセスは直ちに取り消されます。
{% endhint %}
