このドキュメントでは、 Netskope Cloud Exchangeの User Risk Exchange モジュールを使用して Azure AD プラグインを構成する方法について説明します。 Microsoft Azure ADプラグインは、Microsoft Azure ADからリスクの高いユーザーとそのスコアを取得します。また、ユーザーに対するグループへの追加、グループからの削除、および侵害された操作の確認もサポートしています。ユーザーは、Microsoft Azure AD プラットフォームのHome > Risky Usersから取得されます。
前提条件
この設定を完了するには、以下が必要です。
- Netskopeテナント(または、例えば本番環境と開発/テスト環境など、複数のテナント)。
- Tenant PluginとRisk Exchangeプラグインが既に設定されているNetskope Cloud Exchangeのテナントです。
- Azure ADアカウント。
- クライアント(アプリケーション)ID、クライアントシークレットID、テナントIDなどの構成詳細。
- 以下のホストへの接続性:
- https://graph.microsoft.com/https://login.microsoftonline.com/https://portal.azure.com/
Azure AD プラグインのサポート
Microsoft Azure AD UREプラグインは、ユーザーとそのそれぞれのスコアを取得します。このプラグインはアクションも実行します。
| 取得したデータの種類 | ユーザー |
| 支援対象となる活動の種類 | グループに追加、グループから削除、侵害の確認、何もしない |
マッピング
フィールドが引き抜かれた
| Microsoft Azure AD フィールド | Netskope CE Fields |
|---|---|
| userPrincipalName | |
| riskLevel | score |
スコアマッピング
| Default Netskope Score | Default Netskope Score Range |
|---|---|
| 致命的 | 0-250 |
| 高い | 251-500 |
| 中くらい | 501-750 |
| 低い | 751-1000 |
| Microsoft Azure AD スコア | Netskope CE URE スコア |
|---|---|
| 隠された情報なし 不明な将来価値 | なし |
| low | 875 |
| medium | 625 |
| high | 375 |
権限
必要なアクセス許可の取得と提供の詳細については、「Azure AD クレデンシャルを取得する」を参照してください。
- Group.Create
- Group.ReadWrite.All
- GroupMember.Read.All
- IdentityRiskyUser.ReadWrite.All
- User.Read.All
APIの詳細
使うAPI一覧
| APIエンドポイント | 方法 | 使うケース |
|---|---|---|
| <tenant_id>/oauth2/token | 得る | Get OAuth2 token |
| /identityProtection/riskyUsers | 得る | ユーザーとスコアを取得する |
| /groups | 得る | すべてのグループを取得する |
| /groups | 役職 | 新しいグループを作成する |
| /groups/{group-id}/members/$ref | 役職 | グループにメンバーを追加する |
| /groups/{group-id}/members/{member-id}/$ref | DELETE | グループからメンバーを削除する |
| /identityProtection/riskyUsers/confirmCompromised | 役職 | ユーザーが侵害されたことを確認する |
| /users/{user-mail} | 得る | 電子メールでユーザーを取得 |
認証トークンを取得する
API Endpoint: <Base URL>/<tenant_id>/oauth2/token
Method: GET
Body:
{
grant_type": "client_credentials",
client_id": client_id,
client_secret": client_secret,
resource": "https://graph.microsoft.com"
}
Sample API Response:
{
"token_type": "Bearer",
"expires_in": "3599",
"ext_expires_in": "3599",
"expires_on": "1666161987",
"not_before": "1666158087",
"resource": "https://graph.microsoft.com",
"access_token": "eyJ0eXAiOiJKV1Q...."
}
ユーザーとスコアを取得する
API Endpoint: <Base URL>/identityProtection/riskyUsers
Method: GET
Headers:
| 鍵 | Value |
|---|---|
| Content-Type | アプリケーション/json |
| Accept | */* |
| Authorization | ベアラー <auth_token> |
Sample API Response:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#identityProtection/riskyUsers",
"@odata.nextLink": "https://graph.microsoft.com/v1.0/identityProtection/riskyUsers?$top=1&$skiptoken=*****cbe5460********************4f1442c63a7b211674hdb2850a4421048fc_1",
"@microsoft.graph.tips": "Use $select to choose only the properties your app needs, as this can lead to performance improvements. For example: GET identityProtection/riskyUsers?$select=isDeleted,isProcessing",
"value": [
{
"id": "f8c8dcb2-21b7-4e20-985c-52**603300d",
"isDeleted": false,
"isProcessing": false,
"riskLevel": "high",
"riskState": "confirmedCompromised",
"riskDetail": "adminConfirmedUserCompromised",
"riskLastUpdatedDateTime": "2024-03-14T09:59:29.085289Z",
"userDisplayName": "User",
"userPrincipalName": "user@onmicrosoft.com"
}
]
}
すべてのグループを取得
API Endpoint: <Base URL>/groups
Method: GET
Headers:
| 鍵 | Value |
|---|---|
| Content-Type | アプリケーション/json |
| Accept | */* |
| Authorization | ベアラー <auth_token> |
Parameters:
| 鍵 | Value |
|---|---|
| $filter | groupTypes/any(s:s eq 'DynamicMembership') 以外 |
| $top | 999 |
| $orderby | displayName |
| $select | id,displayName,groupTypes |
| $count | true |
Sample API Response:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups(id,displayName,groupTypes)",
"@odata.nextLink": "https://graph.microsoft.com/v1.0/groups?$filter=groupTypes%2fany(s%3as+eq+%27DynamicMembership%27)&$top=1&$select=id%2cdisplayName%2cgroupTypes&$count=true&$skiptoken=RFNwdAoAAQAAAA",
"value": [
{
"id": "826e5e6c-f533-4a93-8420-fc9592ae3ca0",
"displayName": "TestDynamic",
"groupTypes": [
"DynamicMembership"
]
}
]
}
新しいグループを作成する
API Endpoint: <Base URL>/groups
Method: POST
Headers:
| 鍵 | Value |
|---|---|
| Content-Type | アプリケーション/json |
| Accept | */* |
| Authorization | ベアラー <auth_token> |
Body:
{
"description": "Created group from Netskope Cloud Exchange via Microsoft Azure AD User Risk Exchange plugin.",
"displayName": "Group Name",
"mailEnabled": true,
"mailNickname": "groupname",
"securityEnabled": false,
"groupTypes": [
"Unified"
]
}
Sample API Response:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups/$entity",
"id": "6999bb7****************05b4e04155",
"deletedDateTime": null,
"classification": null,
"createdDateTime": "2024-03-16T11:01:45Z",
"creationOptions": [],
"description": "Created group from Netskope Cloud Exchange via Microsoft Azure AD User Risk Exchange plugin.",
"displayName": "Group Name",
"expirationDateTime": null,
"groupTypes": [
"Unified"
],
"isAssignableToRole": null,
"mail": "groupname@netskopebd.onmicrosoft.com",
"mailEnabled": true,
"mailNickname": "groupname",
"membershipRule": null,
"membershipRuleProcessingState": null,
"onPremisesDomainName": null,
"onPremisesLastSyncDateTime": null,
"onPremisesNetBiosName": null,
"onPremisesSamAccountName": null,
"onPremisesSecurityIdentifier": null,
"onPremisesSyncEnabled": null,
"preferredDataLocation": null,
"preferredLanguage": null,
"proxyAddresses": [
"SMTP:groupname@netskopebd.onmicrosoft.com"
],
"renewedDateTime": "2024-03-16T11:01:45Z",
"resourceBehaviorOptions": [],
"resourceProvisioningOptions": [],
"securityEnabled": false,
"securityIdentifier": "S-1-12-1-1771682685-1286044974-90333062-1430380724",
"theme": null,
"uniqueName": null,
"visibility": "Public",
"onPremisesProvisioningErrors": [],
"serviceProvisioningErrors": []
}
グループにメンバーを追加する
API Endpoint: <Base URL>/groups/{group-id}/members/$ref
Method: POST
Headers:
| 鍵 | Value |
|---|---|
| Content-Type | アプリケーション/json |
| Accept | */* |
| Authorization | ベアラー <auth_token> |
Body:
{
"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/{id}"
}
Sample API Response: (Status Code 204)
{}
グループからメンバーを削除する
API Endpoint: <Base URL>/groups/{group-id}/members/{member-id}/$ref
Method: DELETE
Headers:
| 鍵 | Value |
|---|---|
| Content-Type | アプリケーション/json |
| Accept | */* |
| Authorization | ベアラー <auth_token> |
Sample API Response: (Status Code 204)
{}
ユーザーが侵害されたことを確認する
API endpoint: <Base URL>/identityProtection/riskyUsers/confirmCompromised
Method: POST
Headers:
| 鍵 | Value |
|---|---|
| Content-Type | アプリケーション/json |
| Accept | */* |
| Authorization | ベアラー <auth_token> |
Body:
{
"userIds": [
"targeted-userId-1"
]
}
Sample API Response: (Status Code 204)
{}
ユーザーとスコアを取得する
API endpoint: <Base URL>/users/{user-mail}
Method: GET
Headers:
| 鍵 | Value |
|---|---|
| Content-Type | アプリケーション/json |
| Accept | */* |
| Authorization | ベアラー <auth_token> |
Sample API Response:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"@microsoft.graph.tips": "This request only returns a subset of the resource's properties. Your app will need to use $select to return non-default properties. To find out what other properties are available for this resource see https://learn.microsoft.com/graph/api/resources/user",
"businessPhones": [],
"displayName": "Crest",
"givenName": null,
"jobTitle": null,
"mail": "user@netskopebd.onmicrosoft.com",
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": "en-US",
"surname": null,
"userPrincipalName": "user@netskopebd.onmicrosoft.com",
"id": "e0ae0b3b-**********7-cb84372efc52"
}
パフォーマンスマトリックス
パフォーマンス測定は、これらのVM仕様を持つ大規模CEスタック上で、プラグインサイクルごとに50万人のユーザーとそのそれぞれのリスクスコアを取得することによって実施されます。
| スタックの詳細 | サイズ:大 RAM:32 GB CPU:16コア |
| Microsoft Azure AD から取得したユーザーリスクスコア | 500K |
| 所要時間 | 約120分 |
ユーザーエージェント
netskope-ce-5.0.0-ure-microsoft-azure-ad-v1.2.1
ワークフロー
- Azure AD クレデンシャル: クライアント (アプリケーション) ID、クライアント シークレット ID、テナント ID、Microsoft Azure AD URL、および Microsoft Graph トークン URL を取得します。
- Azure ADプラグインを設定します。
- Azure AD プラグインのユーザーリスク交換ビジネスルールとアクションを設定します。
- Azure ADプラグインを検証します。
再生ボタンをクリックして動画をご覧ください。
Azure AD クレデンシャルを入手する
- https://portal.azure.com/にアクセスしてください。そしてログインしてください。
- Azure Active Directoryクリックして、 Overview > Basic Informationへ進んでください。

- こちらにテナントIDが記載されています。これをコピーしてください プラグインを設定する際に使用してください。

- Azure Active Directory の左側で、 App registrationsをクリックします。

- 応募名をクリックし、新しい名前を作成するには New Registrationをクリックしてください。新しい登録の場合は、名前を入力して Registerをクリックします。
- アプリケーションページには、アプリケーション(クライアント)IDが記載されています。プラグインの設定時に使うためにこれをコピーしてください。これはプラグインのClient (Application) ID設定に関するものです。

- Certificates and Secretsをクリックしてください。

- + New Client Secretをクリックして鍵を作成し、秘密IDのデスクリプションを入力し、秘密値の有効期間を選択し(デフォルトは6ヶ月)、Addをクリックします。プラグインの Client Secret ID の値(secret idではなく)をコピーしてください。使うです。 これは、クライアントシークレットが最初に作成されたときにのみ取得できます。


- 次に、以下の手順を実行してください。
- + Add a permissionをクリックしてから+ Add a permissionを選択してください。Microsoft Graphをクリックしてください。Application Permissionをクリックしてください。以下の項目を検索して選択してください。左側の管理者権限を付与してください。
- Group.Create
- Group.ReadWrite.All
- GroupMember.Read.All
- IdentityRiskyUser.ReadWrite.All
- User.Read.All
- + Add a permissionをクリックしてから+ Add a permissionを選択してください。Microsoft Graphをクリックしてください。Application Permissionをクリックしてください。以下の項目を検索して選択してください。
- プラグインを設定するために、テナントID、クライアント(アプリケーション)ID、およびクライアントシークレットIDを収集してください。
ユーザーリスク交換用のAzure ADプラグインを構成する
- Cloud Exchange で、 Settings > Pluginsに移動します。

- Microsoft Azure AD v1.2.1 (URE)プラグインボックスを検索して選択します。

- 構成名と同期間隔を入力し、 Nextをクリックします。

- 先に取得したクライアント(アプリケーション)ID、クライアントシークレットID、テナントID、Microsoft Azure ADのURLを入力してください。完了したら、 Nextをクリックしてください。

- スコアの範囲Select 。

- Saveをクリックしてください。

Azure ADプラグインのユーザーリスクエクスチェンジビジネスルールを構成する
- ユーザーリスク交換に移動して、 Business Rulesをクリックします。
- Click Create New Rule

- 使うしたいフィルターのオプションをSelectしてください。ドロップダウンメニューから、フィールド、演算子、値を選択し、 Saveをクリックします。

ユーザーリスク交換の左側のパネルでUsersをクリックすると、ユーザーのスコアを確認できます。
Azure ADプラグインのアクションを構成する
Microsoft Azure AD プラグインは以下をサポートしています。
- 「グループに追加」アクションを実行すると、選択したグループにユーザーが追加されます。
- 「グループから削除」アクションを実行すると、選択したグループからユーザーが削除されます。
- 「侵害確認」アクションは、リスクのあるユーザーに追加されたユーザーが実際にリスクのあるユーザーであることを確認し、そのユーザーのリスク状態を「侵害確認」に変更します。
- 「何もしない」を選択すると、ユーザーに対して一切の操作は行われません。
これらのアクションを設定するには、以下の手順に従ってください。
グループに追加
- ユーザーリスク交換画面でActionsに移動し、 Add Action Configurationをクリックします。
- ビジネスルール、構成Select 、構成済みのプラグインの名前を選択します。
- 「アクション」ドロップダウンでAdd to Groupを選択します。
- グループドロップダウンでCreate new groupを選択し、グループ名を入力して、Microsoft Azure ADに新しいグループを作成します。
- Save .
をクリックしてください
- 手動で操作を実行するには、 Syncをクリックしてください。日数を入力し、 Fetchをクリックすると、この操作の影響を受けるユーザー数が表示されます。操作を実行するには、 Syncをクリックしてください。
グループから削除
- ユーザーリスク交換画面でActionsに移動し、 Add Action Configurationをクリックします。
- ビジネスルール、構成Select 、構成済みのプラグインの名前を選択してください。
- 「アクション」ドロップダウンでRemove from Groupを選択します。
- グループドロップダウンメニューから、削除するグループを選択します。

- SaveをクリックしてからSyncクリックしてください。日数を入力し、 Fetchをクリックすると、この操作の影響を受けるユーザー数が表示されます。操作を実行するには、 Syncをクリックしてください。
Confirm Compromised
- ユーザーリスク交換画面でActionsに移動し、 Add Action Configurationをクリックします。
- ビジネスルール、構成Select 、構成済みのプラグインの名前を選択してください。
- 「アクション」ドロップダウンでConfirm Compromisedを選択します。

- SaveをクリックしてからSyncクリックしてください。日数を入力し、 Fetchをクリックすると、この操作の影響を受けるユーザー数が表示されます。操作を実行するには、 Syncをクリックしてください。
No Action
- ユーザーリスク交換画面でActionsに移動し、 Add Action Configurationをクリックします。
- ビジネスルール、構成Select 、構成済みのプラグインの名前を選択してください。
- 「アクション」ドロップダウンでNo Actionを選択し、 「アラートを生成する」トグルを有効にします。

- SaveをクリックしてからSyncクリックしてください。日数を入力し、 Fetchをクリックすると、この操作の影響を受けるユーザー数が表示されます。操作を実行するには、 Syncをクリックしてください。

Azure ADプラグインを検証する
プルを検証する
Microsoft Azure AD プラットフォームでは、ユーザーはHome > Risky Usersに表示されます。
User Risk Exchangeで、 Usersに移動して、Microsoft Azure ADプラグインから取得したユーザーを確認します。
また、 Loggingにアクセスして、Microsoft Azure AD プラットフォームからユーザーを取得するログを検索することもできます。

こんなフィルターを使います。

アクションを検証する
Cloud Exchange で実行された操作を検証するには、 Loggingにアクセスして、Microsoft Azure AD プラグインに関連するログを検索してください。
Microsoft Azure AD では、「グループに追加」と「グループから削除」のアクションを探してください。
- Home > Azure Active Directoryへ移動してください。左側のパネルにあるGroupsをクリックしてください。

- グループ名を検索して選択してください。たとえば、このケースではNetskope 。 左側のパネルのMembersをクリックしてください。

- あなたが実行した操作に基づいて、グループのメンバーを確認してください。

侵害されたアクションを確認する
- Microsoft Azure プラットフォームにログインし、Microsoft Azure AD の危険なユーザーを検索します。
- リスク状態が表示されます。ユーザーが最初にリスクの高いユーザーに追加されると、そのリスク状態は「リスクあり」となり、アクションが実行された後は、ここに示されているように、リスク状態が「侵害済み」に変更される必要があります。
Note: 「侵害の確認」アクションが実行されてから、Azure プラットフォームでユーザーのステータスが変更されるまでに数分かかる場合があります。
トラブルシューティング
プラグイン更新後のアクション設定で、グループ名の代わりにグループIDが表示されます
プラグインをv1.1.2からアップグレードした後最新バージョンでは、アクションにグループ表示名の代わりにグループIDが表示されます。
267******************-878e6f460a1c
What to do: アクションを編集し、以前に保存したグループに従ってグループを選択します。
グループがプラットフォームから削除された場合、アクションにグループIDとグループ名が表示されます。
Microsoft Azure AD からグループまたはグループ名が更新/削除された場合、アクション構成ではグループ名が以下のように表示され、ユーザーが「グループに追加」または「グループから削除」アクションを実行しようとするとエラーが発生します。
{"id": "26739fd0-bba6-4eb7-b761-878e6f460a1c", "displayName": "Netskope CE Azure AD Demo", "display_name": "Netskope CE Azure AD Demo (Security)", "group_type": "Security"}
What to do: グループが存在するかどうかを確認するか、Azure プラットフォーム上で同じ名前のグループを作成するか、アクション構成で別のグループを使用します。
警告ログを受信しました: グループへのユーザーの追加/削除ができません
既にグループに所属しているユーザーに対して「グループに追加」という操作を実行すると、以下の警告ログが出力されます。グループに所属していないユーザーに対して「グループから削除」操作を実行した場合も、同様の動作が見られます。
URE Microsoft Azure AD [Microsoft Azure AD]: Unable to add user with email 'crest@netskopebd.onmicrosoft.com' to group named 'Netskope' and ID '5bbe2369-24b4-44a2-b37c-778b9a77f7a3'. This error may occur if user already exist in group. Error: {'code': 'Request_BadRequest', 'message': "One or more added object references already exist for the following modified properties: 'members'.", 'innerError': {'date': '2024-03-18T06:31:08', 'request-id': '33b52b75-ffee-4ff5-95d2-6250205947ee', 'client-request-id': '33b52b75-ffee-4ff5-95d2-6250205947ee'}}
What to do: ユーザーが既にグループに所属しているかどうかを確認します。ユーザーが既にログインしている場合、このログが受信されます。

