|
| 1 | +[[ms-graph-authz]] |
| 2 | +=== Microsoft Graph Authz |
| 3 | + |
| 4 | +The Microsoft Graph Authz plugin uses https://learn.microsoft.com/en-us/graph/api/user-list-memberof[Microsoft Graph] to look up group membership information from Microsoft Entra ID. |
| 5 | + |
| 6 | +This is primarily intended to work around the Microsoft Entra ID maximum group size limit (see https://learn.microsoft.com/en-us/security/zero-trust/develop/configure-tokens-group-claims-app-roles#group-overages[Group overages]). |
| 7 | + |
| 8 | +:plugin_name: microsoft-graph-authz |
| 9 | +include::install_remove.asciidoc[] |
| 10 | + |
| 11 | +[[configure-azure]] |
| 12 | +==== Configure Azure |
| 13 | + |
| 14 | +To make API calls to Microsoft Graph, Elasticsearch requires Azure credentials with the correct permissions. |
| 15 | + |
| 16 | +[discrete] |
| 17 | +==== Create a custom Azure Application |
| 18 | + |
| 19 | +. Log in to the https://portal.azure.com[Azure portal] and go to Microsoft Entra ID. |
| 20 | +. To register a new application, click *Enterprise applications* > *New application*. |
| 21 | +. Click *Create your own application*, provide a name, and select the *Integrate any other application you don’t find in the gallery* option. |
| 22 | + |
| 23 | +image::images/01-create-enterprise-application.png["create your own application" page] |
| 24 | + |
| 25 | +[discrete] |
| 26 | +==== Configure the custom Application |
| 27 | + |
| 28 | +. In the https://portal.azure.com[Azure portal], go to Microsoft Entra ID. |
| 29 | +. Under *App registrations*, select the *All applications* tab, and then find the application created in the previous section. |
| 30 | ++ |
| 31 | +image::images/02-find-app-registration.png[find your app registration] |
| 32 | +. Take note of the *Application (client) ID* and *Tenant ID* shown here. |
| 33 | +These will be needed to configure Elasticsearch later. |
| 34 | ++ |
| 35 | +image::images/03-get-application-id.png[get your application ID] |
| 36 | +. Under *Manage* > *Certificates & secrets* |
| 37 | +- Create a new client secret. |
| 38 | +- Take note of your new client secret's *Value*. |
| 39 | +This is needed later, and is only displayed once. |
| 40 | ++ |
| 41 | +image::images/04-create-client-secret.png[get your client secret] |
| 42 | +. Under Manage > API permissions |
| 43 | +.. Go to *Add a permission*. |
| 44 | +.. Choose *Microsoft Graph*. |
| 45 | +.. Choose *Application permissions*. |
| 46 | +.. Select `Directory.ReadWrite.All`, `Group.ReadWrite.All`, `User.Read.All`. |
| 47 | +.. Note that an Azure Admin will need to approve these permissions before the credentials can be used. |
| 48 | ++ |
| 49 | +image::images/05-configure-api-permissions.png[configure api permissions] |
| 50 | + |
| 51 | +==== Configuration properties |
| 52 | + |
| 53 | +After the plugin is installed, the following configuration settings are available: |
| 54 | + |
| 55 | +xpack.security.authc.realms.microsoft_graph.*.order:: |
| 56 | +The priority of the realm within the realm chain. |
| 57 | +Realms with a lower order are consulted first. |
| 58 | +The value must be unique for each realm. |
| 59 | +This setting is required. |
| 60 | + |
| 61 | +xpack.security.authc.realms.microsoft_graph.*.tenant_id:: |
| 62 | +Your Microsoft Entra ID https://learn.microsoft.com/en-us/entra/fundamentals/how-to-find-tenant[Tenant ID]. |
| 63 | +This setting is required. |
| 64 | + |
| 65 | +xpack.security.authc.realms.microsoft_graph.*.client_id:: |
| 66 | +The Application ID of the Enterprise Application you registered in the previous section. |
| 67 | +This setting is required. |
| 68 | + |
| 69 | +xpack.security.authc.realms.microsoft_graph.*.client_secret:: |
| 70 | +The client secret value for the Application you registered in the previous section. |
| 71 | +This is a sensitive setting, and must be configured in the Elasticsearch keystore. |
| 72 | +This setting is required. |
| 73 | + |
| 74 | +xpack.security.authc.realms.microsoft_graph.*.access_token_host:: |
| 75 | +A Microsoft login URL. |
| 76 | +Defaults to `https://login.microsoftonline.com`. |
| 77 | + |
| 78 | +xpack.security.authc.realms.microsoft_graph.*.graph_host:: |
| 79 | +The Microsoft Graph base address. |
| 80 | +Defaults to `https://graph.microsoft.com/v1.0`. |
| 81 | + |
| 82 | +xpack.security.authc.realms.microsoft_graph.*.http_request_timeout:: |
| 83 | +The timeout for individual Graph HTTP requests. |
| 84 | +Defaults to `10s`. |
| 85 | + |
| 86 | +xpack.security.authc.realms.microsoft_graph.*.execution_timeout:: |
| 87 | +The overall timeout for authorization requests to this plugin. |
| 88 | +Defaults to `30s`. |
| 89 | + |
| 90 | +Create a Microsoft Graph realm, following the above settings, then configure an existing realm to delegate to it using `authorization_realms`. |
| 91 | + |
| 92 | +For example, the following configuration authenticates via Microsoft Entra with SAML, and uses the Microsoft Graph plugin to look up group membership: |
| 93 | + |
| 94 | +[source,yaml] |
| 95 | +---- |
| 96 | +xpack.security.authc.realms.saml.kibana-realm: |
| 97 | + order: 2 |
| 98 | + attributes.principal: nameid |
| 99 | + attributes.groups: "http://schemas.microsoft.com/ws/2008/06/identity/claims/groups" |
| 100 | + idp.metadata.path: "https://login.microsoftonline.com/<Tenant ID>/federationmetadata/2007-06/federationmetadata.xml?appid=<Application_ID>" |
| 101 | + idp.entity_id: "https://sts.windows.net/<Tenant_ID>/" |
| 102 | + sp.entity_id: "<Kibana_Endpoint_URL>" |
| 103 | + sp.acs: "<Kibana_Endpoint_URL>/api/security/saml/callback" |
| 104 | + sp.logout: "<Kibana_Endpoint_URL>/logout" |
| 105 | + authorization_realms: microsoft_graph1 |
| 106 | +
|
| 107 | +xpack.security.authc.realms.microsoft_graph.microsoft_graph1: |
| 108 | + order: 3 |
| 109 | + tenant_id: "<Tenant_ID>" |
| 110 | + client_id: "<Graph_Application_ID>" |
| 111 | +---- |
0 commit comments