リソースタイプとは、SaaSアプリにおける構成またはリソースの種類のことです。リソースタイプには、プロパティがあり、 NGL条件で指定できます。または、条件内でリンクされたリソースタイプを参照することもできます。 例えば、Oktaアプリスイートでは、「アカウント」、「アプリケーションユーザー」、「アプリケーションユーザー」などがリソースタイプです。リソースの種類は、アプリスイート固有のものです。NGLで使用できるリソースタイプのリストを確認するには、アプリスイートのDOMファイルを参照してください。 リソースタイプには、属性、タイプ、参照、リソースタイプ属性のデトリプションなど、関連付けられたプロパティメタデータがあります。 例えば、 ApplicationUserリソースタイプには、 lastUpdated 、 appId 、 scopeなどのプロパティがあります。
主要リソースタイプ
アプリスイートの直後に記載されているリソースタイプは、プライマリリソースタイプと呼ばれます。NGLがポリシー内のルールとして実行されると、すべての検出結果はプライマリリソースタイプに関連付けられます。例えば、
microsoft365 remotedomain should-have autoforwardenabled = false
ここでは、 remotedomainは主要なリソースタイプです。
二次リソースタイプ
二次リソースタイプとは、ルール内で参照されるリンクされたリソースタイプのことであり、ルールの条件セクションの一部となります。例えば、
Okta ApplicationUser should-have Application with-attribute { lastUpdated > 30 }
That is, ApplicationUser resource type of the Okta app suite should have Application resource, where Application resource type should have LastUpdated property with > 30 result. While Application is a secondary resource type.
Namespace Resource Type
名前空間リソースタイプは、リソースタイプを単一のタイプの下に整理するために作成されます。これらにはメタデータがありません。例えば、OktaアプリスイートのApplicationUsersは、メタデータを持たない名前空間リソースタイプです。
例えば、OktaにおけるApplicationUsers 、 Application 、 Rolesなどは、名前空間リソースタイプです。このようなリソースは、複数のサービスがさまざまな方法でリソースに類似した名前を使用する傾向があるため、名前空間の競合を防ぐのに役立ちます。
例えば、このNGLクエリでは、Microsoft 365に少なくとも1つのフィッシング対策ポリシーが設定されていることを確認します。
microsoft365 defenderforoffice365 should-have antiphishpolicy exists
defenderforoffice365リソースタイプは、プロパティを持つantiphishpolicyリソースタイプノードにリンクされた名前空間ノードです。このルールは、 defenderforoffice365にリンクされたantiphishpolicyのノードが少なくとも 1 つ存在する場合にのみ真と評価されます。
複数のリソースタイプを使う
NGLの条件は 複数のリンクされたリソースタイプを使用して複雑な条件を表現できます。 相互にリンクされたリソースタイプは NGLで構成を検証できます。 これは、連携して動作する複数のリソースタイプのセキュリティレベルを評価するのに役立ちます。リソースの種類に関する詳細については、 DOMの一覧を参照してください。以下は、 NGLにおける複数のリソースタイプの例です。
-
すべてのリンクが条件に一致する必要がある場合。例えば、
azuread conditionalaccess should-have conditionalaccesspolicy with-attribute { state = "enabled" }この NGL クエリは、リンクされたすべての ConditionalAccessPolicy の属性 state =”enabled” が ConditionalAccess リソースに対してある場合に true と評価されます。
– To view the ConditionalAccess resource, access the Microsoft Entra ID DOM, then expand IdentityAndSignIn > ConditionalAccess.
– To view the ConditionalAccessPolicy resource, access the Microsoft Entra ID DOM, then expand IdentityAndSignIn > ConditionalAccess > ConditionalAccessPolicyルールの評価結果に関する真理値表は以下のとおりです。
Cp2-state = enabled Cp2状態 = 無効
Cp1–state = enabledSuccess Fail
Cp1–状態 = 無効Fail Fail truth table -
リンクされたリソースのいずれかが条件に一致する場合。例えば、
azuread conditionalaccess should-have any conditionalaccesspolicy as c with-attribute { c.state = "enabled" }この NGL クエリは、リンクされた ConditionalAccessPolicy のいずれかが条件を満たす場合に、ConditionalAccess リソースに対して true と評価されます。
– To view the ConditionalAccess resource, access the Microsoft Entra ID DOM, then expand IdentityAndSignIn > ConditionalAccess.
– To view the ConditionalAccessPolicy resource, access the same Microsoft Entra ID DOM, then expand IdentityAndSignIn > ConditionalAccess > ConditionalAccessPolicy.ルールの評価結果に関する真理値表は以下のとおりです。
Cp2-state = enabled Cp2状態 = 無効 Cp1-state = enabled Success Success Cp1-state = 無効 Success Fail Truth table -
リソースはリンクできます参照関係。例えば、Salesforce アプリケーション スイートでは、 DelegateGroupはDelegateGroupMember にリンクされ、さらにUserにもリンクされています。
– DelegateGroupリソースを表示するには、Salesforce DOM にアクセスし、 Metadata > DelegateGroups > DelegateGroupを展開します。
– DelegateGroupMemberリソースを表示するには、Salesforce DOM にアクセスし、 Tooling > DelegateGroupMembers > DelegateGroupMemberを展開します。
– Userリソースを表示するには、Salesforce DOM にアクセスし、 SObjects > Users > Userを展開します。
DelegateGroupとDelegateGroupMember間のリンクは、 DelegateGroupId属性を介して存在します。これら3つのリソースタイプが機能する場合、リンクされたユーザーのいずれかに「デモ user1」という名前がある場合にDelegateGroupを検索するNGLは、次のように記述されます。
salesforce DelegateGroup should-have DelegateGroupMember with-attribute {any user as u with-attribute { u.Name = “デモ user1” }}
ルールの評価結果に関する真理値表は以下のとおりです。
| user–name = デモ user1 | user–name = デモ user2 | |
| user–name = デモ user1 | Success | Success |
| user–name = デモ user2 | Success | Fail |
DOMファイルの理解
DOMファイルは、Netskope SSPMがサポートするリソースタイプの辞書です。リソースの種類はアプリケーションスイート固有のものであり、階層構造を持つ場合があります。リソースタイプの階層構造とそれらのリンク方法に関する詳細情報は、DOMファイルに記載されています。NGLクエリやルールを作成する際に、DOMファイルを参照することができます。
List of DOM files
- アトラシアン・コンフルエンス
- Box
- GitHub
- Google Workspace
- Microsoft 365
- Microsoft Azure AD
- マイクロソフト コパイロット
- Okta
- Salesforce
- ServiceNow
- Slack Enterprise
- ワークデイ
- ズーム
よくある間違い
このセクションでは、プロパティの型が間違っているために発生する可能性のあるエラーについて説明します。アプリ固有のプロパティ型に関する詳細は、 DOMファイルを参照してください。
| Error Scenario | 不適切なNGLの例 | エラーメッセージの例 | エラーを修正する手順 |
|---|---|---|---|
| アプリスイートが無効です | MyAppSuite ユーザーは部門 = "abc" を持つべきです | エラー: アプリスイート MyAppSuite は有効なアプリスイートまたは認識されたアプリスイートではありません | サポートされているアプリスイートを使用します。 例:AzureAD ユーザーは部門が「abc」であるべき |
| アプリスイートのプライマリリソースタイプは定義されていません | AzureAD の偽リソースには displayName が存在する必要があります | エラー: 「fakeresource」は「AzureAD」アプリスイートの有効なリソースタイプではありません | サポートされているすべてのリソースタイプのリストについては、DOM ファイルを参照してください。 例: AzureAD ユーザーに displayName が存在する必要があります |
| プロパティ/リソースタイプは、他のプロパティまたはリソースの子プロパティではありません。 | AzureAD ユーザーは「abc」という名前を持つべきです | エラー: 'name' は 'user' リソースタイプの子プロパティではありません | リソースタイプに関連付けられているすべてのプロパティのリストを取得するには、DOM ファイルを参照してください。 例:AzureAD ユーザーは displayName = "abc" を持つべきです |
| 識別子は有効なリソースタイプですが、他のリソースには接続されていません。 | AzureADユーザーは、{name = "abc"}属性を持つグループをgとして持つ必要があります。 | エラー: 「ユーザー」リソースタイプは「グループ」リソースタイプとリンクしていません | リソースタイプに関連付けられているすべてのプロパティの一覧を取得するには、DOMファイルを参照してください。 |
| 識別子は、他のリソースタイプの子プロパティでもなく、他のリソースタイプにも接続されていません。 | AzureADグループメンバーはアプリケーションが存在する必要があります | エラー: 'application' は 'GroupMember' リソースタイプの子プロパティでもなく、'GroupMember' リソースタイプへのリンクもありません。 | リソースタイプに関連付けられているすべてのプロパティの一覧を取得するには、DOMファイルを参照してください。 |

