@knowttl/mg-axi 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -41
- package/dist/api.js +119 -0
- package/dist/catalogue.js +303 -0
- package/dist/cli.js +39 -9
- package/dist/docs.js +135 -46
- package/dist/entra-apps.js +158 -6
- package/dist/entra-audit-logs.js +93 -12
- package/dist/entra-conditional-access.js +416 -11
- package/dist/entra-federation-configurations.js +7 -4
- package/dist/entra-grants.js +8 -4
- package/dist/entra-group-lifecycle.js +13 -8
- package/dist/entra-identity-providers.js +7 -4
- package/dist/entra-lifecycle-workflows.js +16 -4
- package/dist/entra-multi-tenant-organization.js +7 -4
- package/dist/entra-on-premises-synchronization.js +6 -4
- package/dist/entra-risk-prevention.js +10 -4
- package/dist/entra-risk.js +11 -4
- package/dist/entra-roles.js +194 -8
- package/dist/entra-terms-of-use.js +13 -8
- package/dist/graph-session.js +1 -0
- package/dist/setup.js +4 -1
- package/docs/coverage.md +721 -654
- package/inventory/operations.json +2 -2
- package/inventory/schema.json +1 -1
- package/package.json +1 -1
- package/skills/mg-axi/SKILL.md +30 -0
package/dist/api.js
CHANGED
|
@@ -11,7 +11,9 @@ import { KNOWN_DATA_POLICY_FIELDS } from "./entra-data-policy-operations.js";
|
|
|
11
11
|
import { KNOWN_FRAUD_FIELDS, KNOWN_WAF_FIELDS, KNOWN_VERIFICATION_FIELDS } from "./entra-risk-prevention.js";
|
|
12
12
|
import { KNOWN_FEDERATION_FIELDS } from "./entra-federation-configurations.js";
|
|
13
13
|
import { KNOWN_CA_FIELDS, KNOWN_PKI_FIELDS } from "./entra-certificate-auth.js";
|
|
14
|
+
import { KNOWN_AUTH_CONTEXT_FIELDS, KNOWN_COMBO_FIELDS, KNOWN_DELETED_LOCATION_FIELDS, KNOWN_DELETED_POLICY_FIELDS, KNOWN_MODE_FIELDS, KNOWN_STRENGTH_FIELDS, KNOWN_TEMPLATE_FIELDS as KNOWN_CA_TEMPLATE_FIELDS } from "./entra-conditional-access.js";
|
|
14
15
|
import { KNOWN_SUBSCRIPTION_FIELDS } from "./entra-subscriptions.js";
|
|
16
|
+
import { KNOWN_TEMPLATE_FIELDS as KNOWN_ROLE_TEMPLATE_FIELDS, KNOWN_ROLE_MEMBER_FIELDS, KNOWN_SCOPED_MEMBER_FIELDS } from "./entra-roles.js";
|
|
15
17
|
import { KNOWN_ASSIGNMENT_INSTANCE_FIELDS, KNOWN_ASSIGNMENT_SCHEDULE_FIELDS, KNOWN_ELIGIBILITY_INSTANCE_FIELDS, KNOWN_ELIGIBILITY_REQUEST_FIELDS, KNOWN_ELIGIBILITY_SCHEDULE_FIELDS } from "./entra-group-pim.js";
|
|
16
18
|
import { KNOWN_SYNC_FIELDS } from "./entra-on-premises-synchronization.js";
|
|
17
19
|
import { KNOWN_ACCEPTANCE_FIELDS, KNOWN_AGREEMENT_FIELDS } from "./entra-terms-of-use.js";
|
|
@@ -59,6 +61,7 @@ const AUTH_METHOD_FIELDS = ["id", "createdDateTime", "displayName", "phoneNumber
|
|
|
59
61
|
const REGISTRATION_FIELDS = ["id", "userPrincipalName", "userDisplayName", "userType", "isAdmin", "isMfaRegistered", "isMfaCapable", "isPasswordlessCapable", "isSsprRegistered", "isSsprEnabled", "isSsprCapable", "userPreferredMethodForSecondaryAuthentication", "lastUpdatedDateTime"];
|
|
60
62
|
const SIGNIN_FIELDS = ["id", "createdDateTime", "userId", "userPrincipalName", "userDisplayName", "appDisplayName", "appId", "ipAddress", "location", "status", "conditionalAccessStatus", "riskDetail", "riskLevelAggregated", "riskLevelDuringSignIn", "riskState", "resourceDisplayName", "resourceId", "clientAppUsed"];
|
|
61
63
|
const AUDIT_FIELDS = ["id", "activityDateTime", "activityDisplayName", "category", "loggedByService", "operationType", "result", "resultReason", "correlationId", "initiatedBy", "targetResources"];
|
|
64
|
+
const PROVISIONING_FIELDS = ["id", "activityDateTime", "tenantId", "jobId", "cycleId", "changeId", "action", "durationInMilliseconds", "sourceSystem", "sourceIdentity", "targetSystem", "targetIdentity", "provisioningStatusInfo", "provisioningSteps", "modifiedProperties", "servicePrincipal", "initiatedBy"];
|
|
62
65
|
const RISKY_USER_FIELDS = ["id", "userPrincipalName", "userDisplayName", "riskDetail", "riskLastUpdatedDateTime", "riskLevel", "riskState"];
|
|
63
66
|
const RISK_DETECTION_FIELDS = ["id", "detectedDateTime", "activityDateTime", "userId", "userPrincipalName", "userDisplayName", "ipAddress", "location", "riskDetail", "riskLevel", "riskState", "riskEventType", "detectionTimingType", "lastUpdatedDateTime", "source"];
|
|
64
67
|
const RISKY_SP_FIELDS = ["id", "displayName", "appId", "servicePrincipalType", "riskDetail", "riskLastUpdatedDateTime", "riskLevel", "riskState", "isEnabled", "isProcessing"];
|
|
@@ -68,6 +71,7 @@ const APP_FIELDS = ["id", "appId", "displayName", "createdDateTime", "signInAudi
|
|
|
68
71
|
const SP_FIELDS = ["id", "appId", "displayName", "servicePrincipalType", "accountEnabled", "appOwnerOrganizationId", "appRoleAssignmentRequired", "preferredSingleSignOnMode", "loginUrl"];
|
|
69
72
|
const GRANT_FIELDS = ["id", "clientId", "consentType", "principalId", "resourceId", "scope", "startTime", "expiryTime"];
|
|
70
73
|
const APP_ROLE_FIELDS = ["id", "appRoleId", "principalId", "principalDisplayName", "principalType", "resourceId", "resourceDisplayName", "createdDateTime"];
|
|
74
|
+
const FEDERATED_FIELDS = ["id", "name", "issuer", "subject", "description", "audiences"];
|
|
71
75
|
const ROLE_ASSIGNMENT_FIELDS = ["id", "principalId", "roleDefinitionId", "directoryScopeId", "appScopeId", "createdDateTime"];
|
|
72
76
|
const PIM_INSTANCE_FIELDS = ["id", "roleDefinitionId", "principalId", "assignmentType", "memberType", "startDateTime", "endDateTime", "activatedUsing"];
|
|
73
77
|
const DEVICE_FIELDS = ["id", "deviceId", "displayName", "operatingSystem", "operatingSystemVersion", "trustType", "isCompliant", "isManaged", "accountEnabled", "createdDateTime", "approximateLastSignInDateTime", "manufacturer", "model"];
|
|
@@ -109,6 +113,62 @@ export const REVIEWED_ROUTES = [
|
|
|
109
113
|
{ id: "v1.0:GET:/identity/conditionalAccess/namedLocations/{namedLocation-id}", kind: "single", query: SINGLE_QUERY, fields: NAMED_LOCATION_FIELDS,
|
|
110
114
|
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (for example Security Reader) is also required.",
|
|
111
115
|
sources: ["https://learn.microsoft.com/graph/api/countrynamedlocation-get?view=graph-rest-1.0"] },
|
|
116
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/authenticationStrength/policies", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_STRENGTH_FIELDS,
|
|
117
|
+
access: "D/A Policy.Read.AuthenticationMethod. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
118
|
+
note: "Conditional Access needs P1.",
|
|
119
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/authenticationstrengthroot-list-policies?view=graph-rest-1.0"] },
|
|
120
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/authenticationStrength/policies/{authenticationStrengthPolicy-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_STRENGTH_FIELDS,
|
|
121
|
+
access: "D/A Policy.Read.AuthenticationMethod. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
122
|
+
note: "Conditional Access needs P1.",
|
|
123
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/authenticationstrengthpolicy-get?view=graph-rest-1.0"] },
|
|
124
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/authenticationStrength/policies/{authenticationStrengthPolicy-id}/combinationConfigurations", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_COMBO_FIELDS, keepODataType: true,
|
|
125
|
+
access: "D/A Policy.Read.AuthenticationMethod. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
126
|
+
note: "Conditional Access needs P1. Rows are polymorphic: the @odata.type discriminator rides along automatically to name the configuration kind.",
|
|
127
|
+
sources: ["https://learn.microsoft.com/graph/api/authenticationstrengthpolicy-list-combinationconfigurations?view=graph-rest-1.0"] },
|
|
128
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/authenticationStrength/policies/{authenticationStrengthPolicy-id}/combinationConfigurations/{authenticationCombinationConfiguration-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_COMBO_FIELDS, keepODataType: true,
|
|
129
|
+
access: "D/A Policy.Read.AuthenticationMethod. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
130
|
+
note: "Conditional Access needs P1. Rows are polymorphic: the @odata.type discriminator rides along automatically to name the configuration kind.",
|
|
131
|
+
sources: ["https://learn.microsoft.com/graph/api/authenticationcombinationconfiguration-get?view=graph-rest-1.0"] },
|
|
132
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/authenticationStrength/authenticationMethodModes", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_MODE_FIELDS,
|
|
133
|
+
access: "D/A Policy.Read.AuthenticationMethod. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
134
|
+
note: "Conditional Access needs P1.",
|
|
135
|
+
sources: ["https://learn.microsoft.com/graph/api/authenticationstrengthroot-list-authenticationmethodmodes?view=graph-rest-1.0"] },
|
|
136
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/authenticationStrength/authenticationMethodModes/{authenticationMethodModeDetail-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_MODE_FIELDS,
|
|
137
|
+
access: "D/A Policy.Read.AuthenticationMethod. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
138
|
+
note: "Conditional Access needs P1.",
|
|
139
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/authenticationmethodmodedetail-get?view=graph-rest-1.0"] },
|
|
140
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/templates", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_CA_TEMPLATE_FIELDS,
|
|
141
|
+
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (for example Security Reader) is also required.",
|
|
142
|
+
note: "Conditional Access needs P1.",
|
|
143
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/conditionalaccessroot-list-templates?view=graph-rest-1.0"] },
|
|
144
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/templates/{conditionalAccessTemplate-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_CA_TEMPLATE_FIELDS,
|
|
145
|
+
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (for example Security Reader) is also required.",
|
|
146
|
+
note: "Conditional Access needs P1.",
|
|
147
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/conditionalaccesstemplate-get?view=graph-rest-1.0"] },
|
|
148
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/authenticationContextClassReferences", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_AUTH_CONTEXT_FIELDS,
|
|
149
|
+
access: "D/A AuthenticationContext.Read.All. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Global Reader, Global Secure Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
150
|
+
note: "Conditional Access needs P1.",
|
|
151
|
+
sources: ["https://learn.microsoft.com/graph/api/conditionalaccessroot-list-authenticationcontextclassreferences?view=graph-rest-1.0"] },
|
|
152
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/authenticationContextClassReferences/{authenticationContextClassReference-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_AUTH_CONTEXT_FIELDS,
|
|
153
|
+
access: "D/A AuthenticationContext.Read.All. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Global Reader, Global Secure Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
154
|
+
note: "The get page documents no optional query parameters; $select travels as the standard single-object projection. Conditional Access needs P1.",
|
|
155
|
+
sources: ["https://learn.microsoft.com/graph/api/authenticationcontextclassreference-get?view=graph-rest-1.0"] },
|
|
156
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/deletedItems/policies", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_DELETED_POLICY_FIELDS,
|
|
157
|
+
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Global Reader, Global Secure Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
158
|
+
note: "No v1.0 operation-level documentation page; access follows the beta policyDeletableItem contract for conditional-access objects with the conditionalAccessPolicy resource reference. Soft-deleted policies restore within 30 days; restore is beta-only and out of scope. Conditional Access needs P1.",
|
|
159
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/policydeletableitem-list?view=graph-rest-beta", "https://learn.microsoft.com/en-us/graph/api/resources/policydeletableitem?view=graph-rest-beta"] },
|
|
160
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/deletedItems/policies/{conditionalAccessPolicy-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DELETED_POLICY_FIELDS,
|
|
161
|
+
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Global Reader, Global Secure Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
162
|
+
note: "No v1.0 operation-level documentation page; access follows the beta policyDeletableItem contract for conditional-access objects with the conditionalAccessPolicy resource reference. Soft-deleted policies restore within 30 days; restore is beta-only and out of scope. Conditional Access needs P1.",
|
|
163
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/policydeletableitem-get?view=graph-rest-beta", "https://learn.microsoft.com/en-us/graph/api/resources/policydeletableitem?view=graph-rest-beta"] },
|
|
164
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/deletedItems/namedLocations", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_DELETED_LOCATION_FIELDS, keepODataType: true,
|
|
165
|
+
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Global Reader, Global Secure Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
166
|
+
note: "No v1.0 operation-level documentation page; access follows the beta policyDeletableItem contract for conditional-access objects with the namedLocation resource reference. Rows are polymorphic: the @odata.type discriminator rides along automatically to name the location kind. Soft-deleted locations restore within 30 days; restore is beta-only and out of scope. Conditional Access needs P1.",
|
|
167
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/policydeletableitem-list?view=graph-rest-beta", "https://learn.microsoft.com/en-us/graph/api/resources/policydeletableitem?view=graph-rest-beta"] },
|
|
168
|
+
{ id: "v1.0:GET:/identity/conditionalAccess/deletedItems/namedLocations/{namedLocation-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_DELETED_LOCATION_FIELDS, keepODataType: true,
|
|
169
|
+
access: "D/A Policy.Read.All. Delegated callers pass it as --scopes; a supported administrator role (Conditional Access Administrator, Global Reader, Global Secure Access Administrator, Security Administrator or Security Reader) is also required.",
|
|
170
|
+
note: "No v1.0 operation-level documentation page; access follows the beta policyDeletableItem contract for conditional-access objects with the namedLocation resource reference. Soft-deleted locations restore within 30 days; restore is beta-only and out of scope. Conditional Access needs P1.",
|
|
171
|
+
sources: ["https://learn.microsoft.com/en-us/graph/api/policydeletableitem-get?view=graph-rest-beta", "https://learn.microsoft.com/en-us/graph/api/resources/policydeletableitem?view=graph-rest-beta"] },
|
|
112
172
|
{ id: "v1.0:GET:/users/{user-id}/authentication/methods", kind: "collection", query: ["$select"], fields: AUTH_METHOD_FIELDS,
|
|
113
173
|
access: "D/A UserAuthenticationMethod.Read.All for other users; delegated self UserAuthenticationMethod.Read. Dedicated administrator roles also apply.",
|
|
114
174
|
note: "Targeted per-user inspection only; aggregate coverage belongs to the registration report, never to a scan across users.",
|
|
@@ -127,6 +187,10 @@ export const REVIEWED_ROUTES = [
|
|
|
127
187
|
{ id: "v1.0:GET:/auditLogs/directoryAudits", kind: "collection", query: COLLECTION_QUERY, fields: AUDIT_FIELDS,
|
|
128
188
|
access: "D/A AuditLog.Read.All. Delegated callers pass it as --scopes.",
|
|
129
189
|
sources: ["https://learn.microsoft.com/graph/api/directoryaudit-list?view=graph-rest-1.0"] },
|
|
190
|
+
{ id: "v1.0:GET:/auditLogs/provisioning", kind: "collection", query: COLLECTION_QUERY, fields: PROVISIONING_FIELDS,
|
|
191
|
+
access: "D/A AuditLog.Read.All and Directory.Read.All. Delegated callers pass both as --scopes; Reports Reader is the least privileged directory role.",
|
|
192
|
+
note: "Entra ID P1/P2 licence prerequisite; retention is 30 days on premium and 7 days on free.",
|
|
193
|
+
sources: ["https://learn.microsoft.com/graph/api/provisioningobjectsummary-list?view=graph-rest-1.0"] },
|
|
130
194
|
{ id: "v1.0:GET:/identityProtection/riskyUsers", kind: "collection", query: COLLECTION_QUERY, fields: RISKY_USER_FIELDS,
|
|
131
195
|
access: "D/A IdentityRiskyUser.Read.All. Delegated callers pass it as --scopes.",
|
|
132
196
|
note: "Full investigation needs P2/Suite; limited results stay limited, never reinterpreted as empty.",
|
|
@@ -183,6 +247,34 @@ export const REVIEWED_ROUTES = [
|
|
|
183
247
|
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
184
248
|
note: "Actual granted assignments; requested permissions are a separate contract.",
|
|
185
249
|
sources: ["https://learn.microsoft.com/graph/api/serviceprincipal-list-approleassignments?view=graph-rest-1.0"] },
|
|
250
|
+
{ id: "v1.0:GET:/servicePrincipals/{servicePrincipal-id}/appRoleAssignments/{appRoleAssignment-id}", kind: "single", query: SINGLE_QUERY, fields: APP_ROLE_FIELDS,
|
|
251
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
252
|
+
note: "One granted assignment on the client service principal; requested permissions are a separate contract.",
|
|
253
|
+
sources: ["https://learn.microsoft.com/graph/api/approleassignment-get?view=graph-rest-1.0"] },
|
|
254
|
+
{ id: "v1.0:GET:/servicePrincipals/{servicePrincipal-id}/appRoleAssignedTo", kind: "collection", query: COLLECTION_QUERY, fields: APP_ROLE_FIELDS,
|
|
255
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
256
|
+
note: "Principals assigned to this resource service principal; the reverse view of appRoleAssignments.",
|
|
257
|
+
sources: ["https://learn.microsoft.com/graph/api/serviceprincipal-list-approleassignedto?view=graph-rest-1.0"] },
|
|
258
|
+
{ id: "v1.0:GET:/servicePrincipals/{servicePrincipal-id}/appRoleAssignedTo/{appRoleAssignment-id}", kind: "single", query: SINGLE_QUERY, fields: APP_ROLE_FIELDS,
|
|
259
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
260
|
+
note: "One principal assignment on the resource service principal; the reverse view of appRoleAssignments.",
|
|
261
|
+
sources: ["https://learn.microsoft.com/graph/api/approleassignment-get?view=graph-rest-1.0"] },
|
|
262
|
+
{ id: "v1.0:GET:/applications/{application-id}/federatedIdentityCredentials", kind: "collection", query: COLLECTION_QUERY, fields: FEDERATED_FIELDS,
|
|
263
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
264
|
+
note: "Workload-identity trust metadata only; GET never returns secret values and success redaction still applies.",
|
|
265
|
+
sources: ["https://learn.microsoft.com/graph/api/federatedidentitycredential-list?view=graph-rest-1.0"] },
|
|
266
|
+
{ id: "v1.0:GET:/applications/{application-id}/federatedIdentityCredentials/{federatedIdentityCredential-id}", kind: "single", query: SINGLE_QUERY, fields: FEDERATED_FIELDS,
|
|
267
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
268
|
+
note: "One workload-identity trust entry; metadata only, never secret values.",
|
|
269
|
+
sources: ["https://learn.microsoft.com/graph/api/federatedidentitycredential-get?view=graph-rest-1.0"] },
|
|
270
|
+
{ id: "v1.0:GET:/servicePrincipals/{servicePrincipal-id}/federatedIdentityCredentials", kind: "collection", query: COLLECTION_QUERY, fields: FEDERATED_FIELDS,
|
|
271
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
272
|
+
note: "Same federatedIdentityCredential resource contract as the application navigation; metadata only, never secret values.",
|
|
273
|
+
sources: ["https://learn.microsoft.com/graph/api/federatedidentitycredential-list?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/federatedidentitycredential?view=graph-rest-1.0"] },
|
|
274
|
+
{ id: "v1.0:GET:/servicePrincipals/{servicePrincipal-id}/federatedIdentityCredentials/{federatedIdentityCredential-id}", kind: "single", query: SINGLE_QUERY, fields: FEDERATED_FIELDS,
|
|
275
|
+
access: "D/A Application.Read.All. Delegated callers pass it as --scopes.",
|
|
276
|
+
note: "Same federatedIdentityCredential resource contract as the application navigation; metadata only, never secret values.",
|
|
277
|
+
sources: ["https://learn.microsoft.com/graph/api/federatedidentitycredential-get?view=graph-rest-1.0", "https://learn.microsoft.com/graph/api/resources/federatedidentitycredential?view=graph-rest-1.0"] },
|
|
186
278
|
{ id: "v1.0:GET:/oauth2PermissionGrants", kind: "collection", query: COLLECTION_QUERY, fields: GRANT_FIELDS,
|
|
187
279
|
access: "D/A Directory.Read.All as the read choice. Delegated callers pass it as --scopes.",
|
|
188
280
|
note: "Actual granted consent; requested permissions are a separate contract.",
|
|
@@ -202,6 +294,33 @@ export const REVIEWED_ROUTES = [
|
|
|
202
294
|
access: "D/A RoleAssignmentSchedule.Read.Directory. Delegated callers pass it as --scopes.",
|
|
203
295
|
note: "Active (including activated eligible) assignments; PIM needs P2 or ID Governance.",
|
|
204
296
|
sources: ["https://learn.microsoft.com/graph/api/rbacapplication-list-roleassignmentscheduleinstances?view=graph-rest-1.0"] },
|
|
297
|
+
{ id: "v1.0:GET:/directoryRoleTemplates", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_ROLE_TEMPLATE_FIELDS,
|
|
298
|
+
access: "D/A RoleManagement.Read.Directory. Delegated callers pass it as --scopes.",
|
|
299
|
+
note: "Templates describe every role; activation state lives on directoryRoles.",
|
|
300
|
+
sources: ["https://learn.microsoft.com/graph/api/directoryroletemplate-list?view=graph-rest-1.0"] },
|
|
301
|
+
{ id: "v1.0:GET:/directoryRoleTemplates/{directoryRoleTemplate-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_ROLE_TEMPLATE_FIELDS,
|
|
302
|
+
access: "D/A RoleManagement.Read.Directory. Delegated callers pass it as --scopes.",
|
|
303
|
+
sources: ["https://learn.microsoft.com/graph/api/directoryroletemplate-get?view=graph-rest-1.0"] },
|
|
304
|
+
{ id: "v1.0:GET:/directoryRoles/{directoryRole-id}/members", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_ROLE_MEMBER_FIELDS,
|
|
305
|
+
access: "D/A RoleManagement.Read.Directory. Delegated callers pass it as --scopes.",
|
|
306
|
+
note: "Members are the assigned principals; @odata.type names each member kind.",
|
|
307
|
+
sources: ["https://learn.microsoft.com/graph/api/directoryrole-list-members?view=graph-rest-1.0"] },
|
|
308
|
+
{ id: "v1.0:GET:/directoryRoles/{directoryRole-id}/scopedMembers", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_SCOPED_MEMBER_FIELDS,
|
|
309
|
+
access: "D/A RoleManagement.Read.Directory. Delegated callers pass it as --scopes.",
|
|
310
|
+
note: "Scoped members bind one role to one principal within one directory scope; administrative-unit scopes need P1.",
|
|
311
|
+
sources: ["https://learn.microsoft.com/graph/api/directoryrole-list-scopedmembers?view=graph-rest-1.0"] },
|
|
312
|
+
{ id: "v1.0:GET:/directoryRoles/{directoryRole-id}/scopedMembers/{scopedRoleMembership-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_SCOPED_MEMBER_FIELDS,
|
|
313
|
+
access: "D/A RoleManagement.Read.Directory. Delegated callers pass it as --scopes.",
|
|
314
|
+
note: "Administrative-unit scopes need P1.",
|
|
315
|
+
sources: ["https://learn.microsoft.com/graph/api/scopedrolemembership-get?view=graph-rest-1.0"] },
|
|
316
|
+
{ id: "v1.0:GET:/scopedRoleMemberships", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_SCOPED_MEMBER_FIELDS,
|
|
317
|
+
access: "D/A RoleManagement.Read.Directory. Delegated callers pass it as --scopes.",
|
|
318
|
+
note: "Administrative-unit-scoped admin assignments; directory-wide assignments live on roleAssignments. Administrative-unit scopes need P1.",
|
|
319
|
+
sources: ["https://learn.microsoft.com/graph/api/scopedrolemembership-list?view=graph-rest-1.0"] },
|
|
320
|
+
{ id: "v1.0:GET:/scopedRoleMemberships/{scopedRoleMembership-id}", kind: "single", query: SINGLE_QUERY, fields: KNOWN_SCOPED_MEMBER_FIELDS,
|
|
321
|
+
access: "D/A RoleManagement.Read.Directory. Delegated callers pass it as --scopes.",
|
|
322
|
+
note: "Administrative-unit scopes need P1.",
|
|
323
|
+
sources: ["https://learn.microsoft.com/graph/api/scopedrolemembership-get?view=graph-rest-1.0"] },
|
|
205
324
|
{ id: "v1.0:GET:/identityGovernance/privilegedAccess/group/assignmentSchedules", kind: "collection", query: COLLECTION_QUERY, fields: KNOWN_ASSIGNMENT_SCHEDULE_FIELDS,
|
|
206
325
|
access: "D/A PrivilegedAssignmentSchedule.Read.AzureADGroup. Delegated callers pass it as --scopes.",
|
|
207
326
|
note: "Assignment schedules govern group membership or ownership over time; PIM for Groups needs P2 or ID Governance; lists require $filter on groupId or principalId. AssignmentScheduleRequests stay out: their least privilege is the write scope PrivilegedAssignmentSchedule.ReadWrite.AzureADGroup.",
|
package/dist/catalogue.js
CHANGED
|
@@ -91,6 +91,14 @@ const appRoleGrantRead = {
|
|
|
91
91
|
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
92
92
|
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Application.Read.All; reads never request write-consent scopes" },
|
|
93
93
|
};
|
|
94
|
+
const federatedRead = {
|
|
95
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
96
|
+
select: { value: "comma-separated-properties", description: "Request server properties from id, name, issuer, subject, description, audiences; rows carry metadata only, never secret material" },
|
|
97
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
98
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
99
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
100
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Application.Read.All" },
|
|
101
|
+
};
|
|
94
102
|
const roleRead = {
|
|
95
103
|
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
96
104
|
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed role property set" },
|
|
@@ -327,6 +335,22 @@ const caRead = {
|
|
|
327
335
|
cursor: { value: "opaque-cursor|-", description: "Resume a capped collection losslessly; - reads the token from stdin (16 MB ceiling for either input); repeat the original query flags or omit them" },
|
|
328
336
|
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Policy.Read.All" },
|
|
329
337
|
};
|
|
338
|
+
const caStrengthRead = {
|
|
339
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph; unsupported combinations fail before credentials" },
|
|
340
|
+
select: { value: "comma-separated-properties", description: "Request server properties; authentication-strength detail needs Policy.Read.AuthenticationMethod in both modes plus a supported Conditional Access role for delegated access" },
|
|
341
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
342
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
343
|
+
cursor: { value: "opaque-cursor|-", description: "Resume a capped collection losslessly; - reads the token from stdin (16 MB ceiling for either input); repeat the original query flags or omit them" },
|
|
344
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Policy.Read.AuthenticationMethod" },
|
|
345
|
+
};
|
|
346
|
+
const caAuthContextRead = {
|
|
347
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph; unsupported combinations fail before credentials" },
|
|
348
|
+
select: { value: "comma-separated-properties", description: "Request server properties; authentication-context detail needs AuthenticationContext.Read.All in both modes plus a supported Conditional Access role for delegated access" },
|
|
349
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
350
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
351
|
+
cursor: { value: "opaque-cursor|-", description: "Resume a capped collection losslessly; - reads the token from stdin (16 MB ceiling for either input); repeat the original query flags or omit them" },
|
|
352
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to AuthenticationContext.Read.All" },
|
|
353
|
+
};
|
|
330
354
|
const providerRead = {
|
|
331
355
|
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
332
356
|
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed identity-provider set; secret-bearing fields (clientSecret, certificateData) are never selectable" },
|
|
@@ -619,6 +643,72 @@ export const LEAVES = [
|
|
|
619
643
|
full: roleRead.full,
|
|
620
644
|
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need a supported directory role" },
|
|
621
645
|
}, examples: ["mg-axi entra directory-role show --id <role-id> --profile soc", "mg-axi entra directory-role show --id <role-id> --profile soc --full"] },
|
|
646
|
+
{ path: "entra directory-role-template list", description: "List directory-role templates (id, displayName, description); templates exist whether or not the role is activated", operation: "GET:/directoryRoleTemplates", flags: {
|
|
647
|
+
...common,
|
|
648
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
649
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
650
|
+
filter: roleRead.filter,
|
|
651
|
+
select: roleRead.select,
|
|
652
|
+
fields: roleRead.fields,
|
|
653
|
+
full: roleRead.full,
|
|
654
|
+
cursor: roleRead.cursor,
|
|
655
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need a supported directory role" },
|
|
656
|
+
}, examples: ["mg-axi entra directory-role-template list --profile soc", "mg-axi entra directory-role-template list --profile soc --filter \"displayName eq 'Helpdesk Administrator'\""] },
|
|
657
|
+
{ path: "entra directory-role-template show", description: "Show one directory-role template with richer default properties", operation: "GET:/directoryRoleTemplates/{directoryRoleTemplate-id}", flags: {
|
|
658
|
+
...common, id: { value: "template-id", required: true, description: "Directory-role template object ID" },
|
|
659
|
+
select: roleRead.select,
|
|
660
|
+
fields: roleRead.fields,
|
|
661
|
+
full: roleRead.full,
|
|
662
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need a supported directory role" },
|
|
663
|
+
}, examples: ["mg-axi entra directory-role-template show --id <template-id> --profile soc", "mg-axi entra directory-role-template show --id <template-id> --profile soc --full"] },
|
|
664
|
+
{ path: "entra directory-role member list", description: "List the members of one activated directory role (id, displayName); @odata.type names each member kind", operation: "GET:/directoryRoles/{directoryRole-id}/members", flags: {
|
|
665
|
+
...common, role: { value: "role-id", required: true, description: "Activated directory-role object ID whose members are listed" },
|
|
666
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
667
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
668
|
+
filter: roleRead.filter,
|
|
669
|
+
select: roleRead.select,
|
|
670
|
+
fields: roleRead.fields,
|
|
671
|
+
full: roleRead.full,
|
|
672
|
+
cursor: roleRead.cursor,
|
|
673
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need a supported directory role" },
|
|
674
|
+
}, examples: ["mg-axi entra directory-role member list --role <role-id> --profile soc", "mg-axi entra directory-role member list --role <role-id> --profile soc --filter \"displayName eq 'Adele Vance'\""] },
|
|
675
|
+
{ path: "entra directory-role scoped-member list", description: "List the scoped members of one activated directory role (id, principalId, roleId, directoryScopeId); administrative-unit scopes need P1", operation: "GET:/directoryRoles/{directoryRole-id}/scopedMembers", flags: {
|
|
676
|
+
...common, role: { value: "role-id", required: true, description: "Activated directory-role object ID whose scoped members are listed" },
|
|
677
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
678
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
679
|
+
filter: roleRead.filter,
|
|
680
|
+
select: roleRead.select,
|
|
681
|
+
fields: roleRead.fields,
|
|
682
|
+
full: roleRead.full,
|
|
683
|
+
cursor: roleRead.cursor,
|
|
684
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need a supported directory role; administrative-unit scopes need P1" },
|
|
685
|
+
}, examples: ["mg-axi entra directory-role scoped-member list --role <role-id> --profile soc", "mg-axi entra directory-role scoped-member list --role <role-id> --profile soc --filter \"principalId eq '<principal-id>'\""] },
|
|
686
|
+
{ path: "entra directory-role scoped-member show", description: "Show one scoped member of an activated directory role with richer default properties", operation: "GET:/directoryRoles/{directoryRole-id}/scopedMembers/{scopedRoleMembership-id}", flags: {
|
|
687
|
+
...common, role: { value: "role-id", required: true, description: "Activated directory-role object ID owning the scoped member" },
|
|
688
|
+
id: { value: "scoped-membership-id", required: true, description: "Scoped membership object ID" },
|
|
689
|
+
select: roleRead.select,
|
|
690
|
+
fields: roleRead.fields,
|
|
691
|
+
full: roleRead.full,
|
|
692
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need a supported directory role; administrative-unit scopes need P1" },
|
|
693
|
+
}, examples: ["mg-axi entra directory-role scoped-member show --role <role-id> --id <scoped-membership-id> --profile soc", "mg-axi entra directory-role scoped-member show --role <role-id> --id <scoped-membership-id> --profile soc --full"] },
|
|
694
|
+
{ path: "entra scoped-role-membership list", description: "List administrative-unit-scoped role memberships (id, principalId, roleId, directoryScopeId); directory-wide assignments live on roleAssignments", operation: "GET:/scopedRoleMemberships", flags: {
|
|
695
|
+
...common,
|
|
696
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
697
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
698
|
+
filter: roleRead.filter,
|
|
699
|
+
select: roleRead.select,
|
|
700
|
+
fields: roleRead.fields,
|
|
701
|
+
full: roleRead.full,
|
|
702
|
+
cursor: roleRead.cursor,
|
|
703
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need a supported directory role; administrative-unit scopes need P1" },
|
|
704
|
+
}, examples: ["mg-axi entra scoped-role-membership list --profile soc", "mg-axi entra scoped-role-membership list --profile soc --filter \"roleId eq '<role-id>'\""] },
|
|
705
|
+
{ path: "entra scoped-role-membership show", description: "Show one administrative-unit-scoped role membership with richer default properties", operation: "GET:/scopedRoleMemberships/{scopedRoleMembership-id}", flags: {
|
|
706
|
+
...common, id: { value: "scoped-membership-id", required: true, description: "Scoped membership object ID" },
|
|
707
|
+
select: roleRead.select,
|
|
708
|
+
fields: roleRead.fields,
|
|
709
|
+
full: roleRead.full,
|
|
710
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need a supported directory role; administrative-unit scopes need P1" },
|
|
711
|
+
}, examples: ["mg-axi entra scoped-role-membership show --id <scoped-membership-id> --profile soc", "mg-axi entra scoped-role-membership show --id <scoped-membership-id> --profile soc --full"] },
|
|
622
712
|
{ path: "entra role-assignment list", description: "List current role assignments (id, principalId, roleDefinitionId, directoryScopeId), including direct and PIM-activated assignments; use pim active list for assignmentType Assigned versus Activated", operation: "GET:/roleManagement/directory/roleAssignments", flags: {
|
|
623
713
|
...common,
|
|
624
714
|
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
@@ -1497,6 +1587,26 @@ export const LEAVES = [
|
|
|
1497
1587
|
full: logRead.full,
|
|
1498
1588
|
scopes: logRead.scopes,
|
|
1499
1589
|
}, examples: ["mg-axi entra directory-audit show --id <directory-audit-id> --profile soc", "mg-axi entra directory-audit show --id <directory-audit-id> --profile soc --full"] },
|
|
1590
|
+
{ path: "entra provisioning list", description: "List provisioning-log events in a bounded time window (AuditLog.Read.All and Directory.Read.All; delegated callers also need Global Reader, Reports Reader, Security Administrator, Security Operator or Security Reader; Entra ID P1/P2 licence prerequisite)", operation: "GET:/auditLogs/provisioning", flags: {
|
|
1591
|
+
...common,
|
|
1592
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1593
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1594
|
+
since: { ...logRead.since, description: "Required for a new query (resume with --cursor instead): earliest activityDateTime bounding the server time range" },
|
|
1595
|
+
until: logRead.until,
|
|
1596
|
+
filter: logRead.filter,
|
|
1597
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the supported provisioning-log property set" },
|
|
1598
|
+
fields: logRead.fields,
|
|
1599
|
+
full: logRead.full,
|
|
1600
|
+
cursor: logRead.cursor,
|
|
1601
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to AuditLog.Read.All,Directory.Read.All" },
|
|
1602
|
+
}, examples: ["mg-axi entra provisioning list --profile soc --since 2026-09-01T00:00:00Z", "mg-axi entra provisioning list --profile soc --since 2026-09-01T00:00:00Z --filter \"provisioningStatusInfo/status eq 'failure'\" --limit 10", "mg-axi entra provisioning list --profile soc --since 2026-09-01T00:00:00Z --until 2026-09-08T00:00:00Z --all"] },
|
|
1603
|
+
{ path: "entra provisioning show", description: "Show one provisioning-log event with the full reviewed property set", operation: "GET:/auditLogs/provisioning/{provisioningObjectSummary-id}", flags: {
|
|
1604
|
+
...common, id: { value: "provisioning-id", required: true, description: "Provisioning-log event object ID" },
|
|
1605
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the supported provisioning-log property set" },
|
|
1606
|
+
fields: logRead.fields,
|
|
1607
|
+
full: logRead.full,
|
|
1608
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to AuditLog.Read.All,Directory.Read.All" },
|
|
1609
|
+
}, examples: ["mg-axi entra provisioning show --id <provisioning-id> --profile soc", "mg-axi entra provisioning show --id <provisioning-id> --profile soc --full"] },
|
|
1500
1610
|
{ path: "entra application list", description: "List applications with compact properties (id, appId, displayName); appId is the client ID, distinct from the object id", operation: "GET:/applications", flags: {
|
|
1501
1611
|
...common,
|
|
1502
1612
|
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
@@ -1577,6 +1687,71 @@ export const LEAVES = [
|
|
|
1577
1687
|
cursor: appRoleGrantRead.cursor,
|
|
1578
1688
|
scopes: appRoleGrantRead.scopes,
|
|
1579
1689
|
}, examples: ["mg-axi entra service-principal app-role-assignment list --service-principal <service-principal-object-id> --profile soc"] },
|
|
1690
|
+
{ path: "entra service-principal app-role-assignment show", description: "Show one app-only role assignment granted to a client service principal", operation: "GET:/servicePrincipals/{servicePrincipal-id}/appRoleAssignments/{appRoleAssignment-id}", flags: {
|
|
1691
|
+
...common, "service-principal": { value: "service-principal-object-id", required: true, description: "Client service-principal object ID holding the assignment" },
|
|
1692
|
+
id: { value: "assignment-object-id", required: true, description: "App role assignment object ID" },
|
|
1693
|
+
select: appRoleGrantRead.select,
|
|
1694
|
+
fields: appRoleGrantRead.fields,
|
|
1695
|
+
full: appRoleGrantRead.full,
|
|
1696
|
+
scopes: appRoleGrantRead.scopes,
|
|
1697
|
+
}, examples: ["mg-axi entra service-principal app-role-assignment show --service-principal <service-principal-object-id> --id <assignment-object-id> --profile soc"] },
|
|
1698
|
+
{ path: "entra service-principal app-role-assigned-to list", description: "List principals assigned to one resource service principal; rows are granted assignments, distinct from the application's requested permissions", operation: "GET:/servicePrincipals/{servicePrincipal-id}/appRoleAssignedTo", flags: {
|
|
1699
|
+
...common, "service-principal": { value: "service-principal-object-id", required: true, description: "Resource service-principal object ID whose assignees are listed" },
|
|
1700
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1701
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1702
|
+
filter: appRoleGrantRead.filter,
|
|
1703
|
+
select: appRoleGrantRead.select,
|
|
1704
|
+
fields: appRoleGrantRead.fields,
|
|
1705
|
+
full: appRoleGrantRead.full,
|
|
1706
|
+
cursor: appRoleGrantRead.cursor,
|
|
1707
|
+
scopes: appRoleGrantRead.scopes,
|
|
1708
|
+
}, examples: ["mg-axi entra service-principal app-role-assigned-to list --service-principal <service-principal-object-id> --profile soc"] },
|
|
1709
|
+
{ path: "entra service-principal app-role-assigned-to show", description: "Show one principal assignment on a resource service principal", operation: "GET:/servicePrincipals/{servicePrincipal-id}/appRoleAssignedTo/{appRoleAssignment-id}", flags: {
|
|
1710
|
+
...common, "service-principal": { value: "service-principal-object-id", required: true, description: "Resource service-principal object ID holding the assignment" },
|
|
1711
|
+
id: { value: "assignment-object-id", required: true, description: "App role assignment object ID" },
|
|
1712
|
+
select: appRoleGrantRead.select,
|
|
1713
|
+
fields: appRoleGrantRead.fields,
|
|
1714
|
+
full: appRoleGrantRead.full,
|
|
1715
|
+
scopes: appRoleGrantRead.scopes,
|
|
1716
|
+
}, examples: ["mg-axi entra service-principal app-role-assigned-to show --service-principal <service-principal-object-id> --id <assignment-object-id> --profile soc"] },
|
|
1717
|
+
{ path: "entra application federated-credential list", description: "List federated identity credentials of one application; rows carry issuer, subject and audience metadata only, never secret material", operation: "GET:/applications/{application-id}/federatedIdentityCredentials", flags: {
|
|
1718
|
+
...common, application: { value: "application-object-id", required: true, description: "Application object ID whose federated credentials are listed" },
|
|
1719
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1720
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1721
|
+
filter: federatedRead.filter,
|
|
1722
|
+
select: federatedRead.select,
|
|
1723
|
+
fields: federatedRead.fields,
|
|
1724
|
+
full: federatedRead.full,
|
|
1725
|
+
cursor: federatedRead.cursor,
|
|
1726
|
+
scopes: federatedRead.scopes,
|
|
1727
|
+
}, examples: ["mg-axi entra application federated-credential list --application <application-object-id> --profile soc"] },
|
|
1728
|
+
{ path: "entra application federated-credential show", description: "Show one federated identity credential of an application; metadata only, never secret material", operation: "GET:/applications/{application-id}/federatedIdentityCredentials/{federatedIdentityCredential-id}", flags: {
|
|
1729
|
+
...common, application: { value: "application-object-id", required: true, description: "Application object ID holding the credential" },
|
|
1730
|
+
id: { value: "credential-object-id", required: true, description: "Federated identity credential object ID" },
|
|
1731
|
+
select: federatedRead.select,
|
|
1732
|
+
fields: federatedRead.fields,
|
|
1733
|
+
full: federatedRead.full,
|
|
1734
|
+
scopes: federatedRead.scopes,
|
|
1735
|
+
}, examples: ["mg-axi entra application federated-credential show --application <application-object-id> --id <credential-object-id> --profile soc"] },
|
|
1736
|
+
{ path: "entra service-principal federated-credential list", description: "List federated identity credentials of one service principal; rows carry issuer, subject and audience metadata only, never secret material", operation: "GET:/servicePrincipals/{servicePrincipal-id}/federatedIdentityCredentials", flags: {
|
|
1737
|
+
...common, "service-principal": { value: "service-principal-object-id", required: true, description: "Service-principal object ID whose federated credentials are listed" },
|
|
1738
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1739
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1740
|
+
filter: federatedRead.filter,
|
|
1741
|
+
select: federatedRead.select,
|
|
1742
|
+
fields: federatedRead.fields,
|
|
1743
|
+
full: federatedRead.full,
|
|
1744
|
+
cursor: federatedRead.cursor,
|
|
1745
|
+
scopes: federatedRead.scopes,
|
|
1746
|
+
}, examples: ["mg-axi entra service-principal federated-credential list --service-principal <service-principal-object-id> --profile soc"] },
|
|
1747
|
+
{ path: "entra service-principal federated-credential show", description: "Show one federated identity credential of a service principal; metadata only, never secret material", operation: "GET:/servicePrincipals/{servicePrincipal-id}/federatedIdentityCredentials/{federatedIdentityCredential-id}", flags: {
|
|
1748
|
+
...common, "service-principal": { value: "service-principal-object-id", required: true, description: "Service-principal object ID holding the credential" },
|
|
1749
|
+
id: { value: "credential-object-id", required: true, description: "Federated identity credential object ID" },
|
|
1750
|
+
select: federatedRead.select,
|
|
1751
|
+
fields: federatedRead.fields,
|
|
1752
|
+
full: federatedRead.full,
|
|
1753
|
+
scopes: federatedRead.scopes,
|
|
1754
|
+
}, examples: ["mg-axi entra service-principal federated-credential show --service-principal <service-principal-object-id> --id <credential-object-id> --profile soc"] },
|
|
1580
1755
|
{ path: "entra risky-user list", description: "List at-risk users with compact risk state (IdentityRiskyUser.Read.All; delegated callers also need Global Reader, Security Operator, Security Reader or Security Administrator; the riskyUsers API requires P2)", operation: "GET:/identityProtection/riskyUsers", flags: {
|
|
1581
1756
|
...common,
|
|
1582
1757
|
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
@@ -1728,6 +1903,134 @@ export const LEAVES = [
|
|
|
1728
1903
|
full: caRead.full,
|
|
1729
1904
|
scopes: caRead.scopes,
|
|
1730
1905
|
}, examples: ["mg-axi entra conditional-access named-location show --id <named-location-id> --profile soc", "mg-axi entra conditional-access named-location show --id <named-location-id> --profile soc --full"] },
|
|
1906
|
+
{ path: "entra conditional-access auth-strength-policy list", description: "List authentication-strength policies with compact properties (id, displayName, policyType)", operation: "GET:/identity/conditionalAccess/authenticationStrength/policies", flags: {
|
|
1907
|
+
...common,
|
|
1908
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1909
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1910
|
+
filter: caStrengthRead.filter,
|
|
1911
|
+
select: caStrengthRead.select,
|
|
1912
|
+
fields: caStrengthRead.fields,
|
|
1913
|
+
full: caStrengthRead.full,
|
|
1914
|
+
cursor: caStrengthRead.cursor,
|
|
1915
|
+
scopes: caStrengthRead.scopes,
|
|
1916
|
+
}, examples: ["mg-axi entra conditional-access auth-strength-policy list --profile soc", "mg-axi entra conditional-access auth-strength-policy list --profile soc --limit 10", "mg-axi entra conditional-access auth-strength-policy list --profile soc --filter \"policyType eq 'builtIn'\" --select id,displayName,policyType"] },
|
|
1917
|
+
{ path: "entra conditional-access auth-strength-policy show", description: "Show one authentication-strength policy with the full reviewed property set", operation: "GET:/identity/conditionalAccess/authenticationStrength/policies/{authenticationStrengthPolicy-id}", flags: {
|
|
1918
|
+
...common, id: { value: "auth-strength-policy-id", required: true, description: "Authentication-strength policy object ID" },
|
|
1919
|
+
select: caStrengthRead.select,
|
|
1920
|
+
fields: caStrengthRead.fields,
|
|
1921
|
+
full: caStrengthRead.full,
|
|
1922
|
+
scopes: caStrengthRead.scopes,
|
|
1923
|
+
}, examples: ["mg-axi entra conditional-access auth-strength-policy show --id <auth-strength-policy-id> --profile soc", "mg-axi entra conditional-access auth-strength-policy show --id <auth-strength-policy-id> --profile soc --full"] },
|
|
1924
|
+
{ path: "entra conditional-access combination-configuration list", description: "List the combination configurations of one authentication-strength policy", operation: "GET:/identity/conditionalAccess/authenticationStrength/policies/{authenticationStrengthPolicy-id}/combinationConfigurations", flags: {
|
|
1925
|
+
...common,
|
|
1926
|
+
policy: { value: "auth-strength-policy-id", required: true, description: "Authentication-strength policy object ID owning the combination configurations" },
|
|
1927
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1928
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1929
|
+
filter: caStrengthRead.filter,
|
|
1930
|
+
select: caStrengthRead.select,
|
|
1931
|
+
fields: caStrengthRead.fields,
|
|
1932
|
+
full: caStrengthRead.full,
|
|
1933
|
+
cursor: caStrengthRead.cursor,
|
|
1934
|
+
scopes: caStrengthRead.scopes,
|
|
1935
|
+
}, examples: ["mg-axi entra conditional-access combination-configuration list --policy <auth-strength-policy-id> --profile soc", "mg-axi entra conditional-access combination-configuration list --policy <auth-strength-policy-id> --profile soc --limit 10"] },
|
|
1936
|
+
{ path: "entra conditional-access combination-configuration show", description: "Show one combination configuration of an authentication-strength policy; @odata.type names the configuration kind", operation: "GET:/identity/conditionalAccess/authenticationStrength/policies/{authenticationStrengthPolicy-id}/combinationConfigurations/{authenticationCombinationConfiguration-id}", flags: {
|
|
1937
|
+
...common, policy: { value: "auth-strength-policy-id", required: true, description: "Authentication-strength policy object ID owning the combination configuration" },
|
|
1938
|
+
id: { value: "combination-configuration-id", required: true, description: "Combination configuration object ID" },
|
|
1939
|
+
select: caStrengthRead.select,
|
|
1940
|
+
fields: caStrengthRead.fields,
|
|
1941
|
+
full: caStrengthRead.full,
|
|
1942
|
+
scopes: caStrengthRead.scopes,
|
|
1943
|
+
}, examples: ["mg-axi entra conditional-access combination-configuration show --policy <auth-strength-policy-id> --id <combination-configuration-id> --profile soc", "mg-axi entra conditional-access combination-configuration show --policy <auth-strength-policy-id> --id <combination-configuration-id> --profile soc --full"] },
|
|
1944
|
+
{ path: "entra conditional-access auth-method-mode list", description: "List authentication method modes with compact properties (id, displayName)", operation: "GET:/identity/conditionalAccess/authenticationStrength/authenticationMethodModes", flags: {
|
|
1945
|
+
...common,
|
|
1946
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1947
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1948
|
+
filter: caStrengthRead.filter,
|
|
1949
|
+
select: caStrengthRead.select,
|
|
1950
|
+
fields: caStrengthRead.fields,
|
|
1951
|
+
full: caStrengthRead.full,
|
|
1952
|
+
cursor: caStrengthRead.cursor,
|
|
1953
|
+
scopes: caStrengthRead.scopes,
|
|
1954
|
+
}, examples: ["mg-axi entra conditional-access auth-method-mode list --profile soc", "mg-axi entra conditional-access auth-method-mode list --profile soc --limit 10"] },
|
|
1955
|
+
{ path: "entra conditional-access auth-method-mode show", description: "Show one authentication method mode with the full reviewed property set", operation: "GET:/identity/conditionalAccess/authenticationStrength/authenticationMethodModes/{authenticationMethodModeDetail-id}", flags: {
|
|
1956
|
+
...common, id: { value: "auth-method-mode-id", required: true, description: "Authentication method mode object ID" },
|
|
1957
|
+
select: caStrengthRead.select,
|
|
1958
|
+
fields: caStrengthRead.fields,
|
|
1959
|
+
full: caStrengthRead.full,
|
|
1960
|
+
scopes: caStrengthRead.scopes,
|
|
1961
|
+
}, examples: ["mg-axi entra conditional-access auth-method-mode show --id <auth-method-mode-id> --profile soc", "mg-axi entra conditional-access auth-method-mode show --id <auth-method-mode-id> --profile soc --full"] },
|
|
1962
|
+
{ path: "entra conditional-access template list", description: "List Conditional Access templates with compact properties (id, name)", operation: "GET:/identity/conditionalAccess/templates", flags: {
|
|
1963
|
+
...common,
|
|
1964
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1965
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1966
|
+
filter: caRead.filter,
|
|
1967
|
+
select: caRead.select,
|
|
1968
|
+
fields: caRead.fields,
|
|
1969
|
+
full: caRead.full,
|
|
1970
|
+
cursor: caRead.cursor,
|
|
1971
|
+
scopes: caRead.scopes,
|
|
1972
|
+
}, examples: ["mg-axi entra conditional-access template list --profile soc", "mg-axi entra conditional-access template list --profile soc --limit 10"] },
|
|
1973
|
+
{ path: "entra conditional-access template show", description: "Show one Conditional Access template with the full reviewed property set", operation: "GET:/identity/conditionalAccess/templates/{conditionalAccessTemplate-id}", flags: {
|
|
1974
|
+
...common, id: { value: "template-id", required: true, description: "Conditional Access template object ID" },
|
|
1975
|
+
select: caRead.select,
|
|
1976
|
+
fields: caRead.fields,
|
|
1977
|
+
full: caRead.full,
|
|
1978
|
+
scopes: caRead.scopes,
|
|
1979
|
+
}, examples: ["mg-axi entra conditional-access template show --id <template-id> --profile soc", "mg-axi entra conditional-access template show --id <template-id> --profile soc --full"] },
|
|
1980
|
+
{ path: "entra conditional-access auth-context list", description: "List authentication context class references with compact properties (id, displayName)", operation: "GET:/identity/conditionalAccess/authenticationContextClassReferences", flags: {
|
|
1981
|
+
...common,
|
|
1982
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1983
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1984
|
+
filter: caAuthContextRead.filter,
|
|
1985
|
+
select: caAuthContextRead.select,
|
|
1986
|
+
fields: caAuthContextRead.fields,
|
|
1987
|
+
full: caAuthContextRead.full,
|
|
1988
|
+
cursor: caAuthContextRead.cursor,
|
|
1989
|
+
scopes: caAuthContextRead.scopes,
|
|
1990
|
+
}, examples: ["mg-axi entra conditional-access auth-context list --profile soc", "mg-axi entra conditional-access auth-context list --profile soc --limit 10"] },
|
|
1991
|
+
{ path: "entra conditional-access auth-context show", description: "Show one authentication context class reference with the full reviewed property set", operation: "GET:/identity/conditionalAccess/authenticationContextClassReferences/{authenticationContextClassReference-id}", flags: {
|
|
1992
|
+
...common, id: { value: "auth-context-id", required: true, description: "Authentication context class reference object ID" },
|
|
1993
|
+
select: caAuthContextRead.select,
|
|
1994
|
+
fields: caAuthContextRead.fields,
|
|
1995
|
+
full: caAuthContextRead.full,
|
|
1996
|
+
scopes: caAuthContextRead.scopes,
|
|
1997
|
+
}, examples: ["mg-axi entra conditional-access auth-context show --id <auth-context-id> --profile soc", "mg-axi entra conditional-access auth-context show --id <auth-context-id> --profile soc --full"] },
|
|
1998
|
+
{ path: "entra conditional-access deleted-policy list", description: "List soft-deleted Conditional Access policies with compact properties (id, displayName, state, deletedDateTime); restore stays out of scope", operation: "GET:/identity/conditionalAccess/deletedItems/policies", flags: {
|
|
1999
|
+
...common,
|
|
2000
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
2001
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
2002
|
+
filter: caRead.filter,
|
|
2003
|
+
select: caRead.select,
|
|
2004
|
+
fields: caRead.fields,
|
|
2005
|
+
full: caRead.full,
|
|
2006
|
+
cursor: caRead.cursor,
|
|
2007
|
+
scopes: caRead.scopes,
|
|
2008
|
+
}, examples: ["mg-axi entra conditional-access deleted-policy list --profile soc", "mg-axi entra conditional-access deleted-policy list --profile soc --limit 10"] },
|
|
2009
|
+
{ path: "entra conditional-access deleted-policy show", description: "Show one soft-deleted Conditional Access policy with the full reviewed property set; restore stays out of scope", operation: "GET:/identity/conditionalAccess/deletedItems/policies/{conditionalAccessPolicy-id}", flags: {
|
|
2010
|
+
...common, id: { value: "deleted-policy-id", required: true, description: "Soft-deleted Conditional Access policy object ID" },
|
|
2011
|
+
select: caRead.select,
|
|
2012
|
+
fields: caRead.fields,
|
|
2013
|
+
full: caRead.full,
|
|
2014
|
+
scopes: caRead.scopes,
|
|
2015
|
+
}, examples: ["mg-axi entra conditional-access deleted-policy show --id <deleted-policy-id> --profile soc", "mg-axi entra conditional-access deleted-policy show --id <deleted-policy-id> --profile soc --full"] },
|
|
2016
|
+
{ path: "entra conditional-access deleted-named-location list", description: "List soft-deleted Conditional Access named locations with compact properties (id, displayName, deletedDateTime); restore stays out of scope", operation: "GET:/identity/conditionalAccess/deletedItems/namedLocations", flags: {
|
|
2017
|
+
...common,
|
|
2018
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
2019
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
2020
|
+
filter: caRead.filter,
|
|
2021
|
+
select: caRead.select,
|
|
2022
|
+
fields: caRead.fields,
|
|
2023
|
+
full: caRead.full,
|
|
2024
|
+
cursor: caRead.cursor,
|
|
2025
|
+
scopes: caRead.scopes,
|
|
2026
|
+
}, examples: ["mg-axi entra conditional-access deleted-named-location list --profile soc", "mg-axi entra conditional-access deleted-named-location list --profile soc --limit 10"] },
|
|
2027
|
+
{ path: "entra conditional-access deleted-named-location show", description: "Show one soft-deleted Conditional Access named location with the full reviewed property set; restore stays out of scope", operation: "GET:/identity/conditionalAccess/deletedItems/namedLocations/{namedLocation-id}", flags: {
|
|
2028
|
+
...common, id: { value: "deleted-named-location-id", required: true, description: "Soft-deleted named location object ID" },
|
|
2029
|
+
select: caRead.select,
|
|
2030
|
+
fields: caRead.fields,
|
|
2031
|
+
full: caRead.full,
|
|
2032
|
+
scopes: caRead.scopes,
|
|
2033
|
+
}, examples: ["mg-axi entra conditional-access deleted-named-location show --id <deleted-named-location-id> --profile soc", "mg-axi entra conditional-access deleted-named-location show --id <deleted-named-location-id> --profile soc --full"] },
|
|
1731
2034
|
{ path: "entra identity-provider list", description: "List workforce identity providers with compact properties (id, displayName); rows carry @odata.type naming the provider kind; client secrets and key material are never returned", operation: "GET:/identity/identityProviders", flags: {
|
|
1732
2035
|
...common,
|
|
1733
2036
|
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|