<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Configure security on Grafana Labs</title><link>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/</link><description>Recent content in Configure security on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/grafana/v10.0/setup-grafana/configure-security/index.xml" rel="self" type="application/rss+xml"/><item><title>Plan your IAM integration strategy</title><link>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/planning-iam-strategy/</link><pubDate>Fri, 13 Mar 2026 14:43:40 -0400</pubDate><guid>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/planning-iam-strategy/</guid><content><![CDATA[&lt;h1 id=&#34;plan-your-iam-integration-strategy&#34;&gt;Plan your IAM integration strategy&lt;/h1&gt;
&lt;p&gt;This section describes the decisions you should make when using an Identity and Access Management (IAM) provider to manage access to Grafana. IAM ensures that users have secure access to sensitive data and &lt;a href=&#34;../../../administration/data-source-management/&#34;&gt;other resources&lt;/a&gt;, simplifying user management and authentication.&lt;/p&gt;
&lt;h2 id=&#34;benefits-of-integrating-with-an-iam-provider&#34;&gt;Benefits of integrating with an IAM provider&lt;/h2&gt;
&lt;p&gt;Integrating with an IAM provider provides the following benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;User management&lt;/strong&gt;: By providing Grafana access to your current user management system, you eliminate the overhead of replicating user information and instead have centralized user management for users&amp;rsquo; roles and permissions to Grafana resources.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: Many IAM solutions provide advanced security features such as multi-factor authentication, RBAC, and audit trails, which can help to improve the security of your Grafana installation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SSO&lt;/strong&gt;: Properly setting up Grafana with your current IAM solution enables users to access Grafana with the same credentials they use for other applications.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: User additions and updates in your user database are immediately reflected in Grafana.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In order to plan an integration with Grafana, assess your organization&amp;rsquo;s current needs, requirements, and any existing IAM solutions being used. This includes thinking about how roles and permissions will be mapped to users in Grafana and how users can be grouped to access shared resources.&lt;/p&gt;
&lt;h2 id=&#34;internal-vs-external-users&#34;&gt;Internal vs external users&lt;/h2&gt;
&lt;p&gt;As a first step, determine how you want to manage users who will access Grafana.&lt;/p&gt;
&lt;p&gt;Do you already use an identity provider to manage users? If so, Grafana might be able to integrate with your identity provider through one of our IdP integrations.
Refer to &lt;a href=&#34;../configure-authentication/&#34;&gt;Configure authentication documentation&lt;/a&gt; for the list of supported providers.&lt;/p&gt;
&lt;p&gt;If you are not interested in setting up an external identity provider, but still want to limit access to your Grafana instance, consider using Grafana&amp;rsquo;s basic authentication.&lt;/p&gt;
&lt;p&gt;Finally, if you want your Grafana instance to be accessible to everyone, you can enable anonymous access to Grafana.
For information, refer to the &lt;a href=&#34;../configure-authentication/#anonymous-authentication&#34;&gt;anonymous authentication documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;ways-to-organize-users&#34;&gt;Ways to organize users&lt;/h2&gt;
&lt;p&gt;Organize users in subgroups that are sensible to the organization. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Different groups of users or customers should only have access to their intended resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplicity&lt;/strong&gt;: Reduce the scope of dashboards and resources available.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cost attribution&lt;/strong&gt;: Track and bill costs to individual customers, departments, or divisions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customization&lt;/strong&gt;: Each group of users could have a personalized experience like different dashboards or theme colors.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;users-in-grafana-teams&#34;&gt;Users in Grafana teams&lt;/h3&gt;
&lt;p&gt;You can organize users into &lt;a href=&#34;../../../administration/team-management/&#34;&gt;teams&lt;/a&gt; and assign them roles and permissions reflecting the current organization. For example, instead of assigning five users access to the same dashboard, you can create a team of those users and assign dashboard permissions to the team.&lt;/p&gt;
&lt;p&gt;A user can belong to multiple teams and be a member or an administrator for a given team. Team members inherit permissions from the team but cannot edit the team itself. Team administrators can add members to a team and update its settings, such as the team name, team members, roles assigned, and UI preferences.&lt;/p&gt;
&lt;p&gt;Teams are a perfect solution for working with a subset of users. Teams can share resources with other teams.&lt;/p&gt;
&lt;h3 id=&#34;users-in-grafana-organizations&#34;&gt;Users in Grafana organizations&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;../../../administration/organization-management/&#34;&gt;Grafana organizations&lt;/a&gt; allow complete isolation of resources, such as dashboards and data sources. Users can be members of one or several organizations, and they can only access resources from an organization they belong to.&lt;/p&gt;
&lt;p&gt;Having multiple organizations in a single instance of Grafana lets you manage your users in one place while completely separating resources.&lt;/p&gt;
&lt;p&gt;Organizations provide a higher measure of isolation within Grafana than teams do and can be helpful in certain scenarios. However, because organizations lack the scalability and flexibility of teams and &lt;a href=&#34;../../../dashboards/manage-dashboards/#create-a-dashboard-folder&#34;&gt;folders&lt;/a&gt;, we do not recommend using them as the default way to group users and resources.&lt;/p&gt;
&lt;p&gt;Note that Grafana Cloud does not support having more than 1 organizations per instance.&lt;/p&gt;
&lt;h3 id=&#34;choosing-between-teams-and-organizations&#34;&gt;Choosing between teams and organizations&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;../../../administration/team-management/&#34;&gt;Grafana teams&lt;/a&gt; and Grafana organizations serve similar purposes in the Grafana platform. Both are designed to help group users and manage and control access to resources.&lt;/p&gt;
&lt;p&gt;Teams provide more flexibility, as resources can be accessible by multiple teams, and team creation and management are simple.&lt;/p&gt;
&lt;p&gt;In contrast, organizations provide more isolation than teams, as resources cannot be shared between organizations.
They are more difficult to manage than teams, as you must create and update resources for each organization individually.
Organizations cater to bigger companies or users with intricate access needs, necessitating complete resource segregation.&lt;/p&gt;
&lt;h2 id=&#34;access-to-external-systems&#34;&gt;Access to external systems&lt;/h2&gt;
&lt;p&gt;Consider the need for machine-to-machine &lt;a href=&#34;https://en.wikipedia.org/wiki/Machine_to_machine&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;M2M&lt;/a&gt; communications. If a system needs to interact with Grafana, ensure it has proper access.&lt;/p&gt;
&lt;p&gt;Consider the following scenarios:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Schedule reports&lt;/strong&gt;: Generate reports periodically from Grafana through the reporting API and have them delivered to different communications channels like email, instant messaging, or keep them in a shared storage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Define alerts&lt;/strong&gt;: Define alert rules to be triggered when a specific condition is met. Route alert notifications to different teams according to your organization&amp;rsquo;s needs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Provisioning file&lt;/strong&gt;: Provisioning files can be used to automate the creation of dashboards, data sources, and other resources.&lt;/p&gt;
&lt;p&gt;These are just a few examples of how Grafana can be used in M2M scenarios. The platform is highly flexible and can be used in various M2M applications, making it a powerful tool for organizations seeking insights into their systems and devices.&lt;/p&gt;
&lt;h3 id=&#34;service-accounts&#34;&gt;Service accounts&lt;/h3&gt;
&lt;p&gt;You can use a service account to run automated workloads in Grafana, such as dashboard provisioning, configuration, or report generation. Create service accounts and service accounts tokens to authenticate applications, such as Terraform, with the Grafana API.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Service accounts will eventually replace &lt;a href=&#34;./#api-keys&#34;&gt;API keys&lt;/a&gt; as the primary way to authenticate applications that interact with Grafana.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;A common use case for creating a service account is to perform operations on automated or triggered tasks. You can use service accounts to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Schedule reports for specific dashboards to be delivered on a daily/weekly/monthly basis&lt;/li&gt;
&lt;li&gt;Define alerts in your system to be used in Grafana&lt;/li&gt;
&lt;li&gt;Set up an external SAML authentication provider&lt;/li&gt;
&lt;li&gt;Interact with Grafana without signing in as a user&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In &lt;a href=&#34;../../../introduction/grafana-enterprise/&#34;&gt;Grafana Enterprise&lt;/a&gt;, you can also use service accounts in combination with &lt;a href=&#34;../../../administration/roles-and-permissions/access-control/&#34;&gt;role-based access control&lt;/a&gt; to grant very specific permissions to applications that interact with Grafana.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Service accounts can only act in the organization they are created for. We recommend creating service accounts in each organization if you have the same task needed for multiple organizations.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;The following video shows how to migrate from API keys to service accounts.





  
  
  


&lt;div&gt;
  &lt;iframe src=&#34;https://player.vimeo.com/video/742056367?transparent=0&#34; title=&#34;vimeo video&#34; webkitallowfullscreen=&#34;&#34; mozallowfullscreen=&#34;&#34; allowfullscreen=&#34;&#34;&gt;&lt;/iframe&gt;
  &lt;div &gt;
    
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h4 id=&#34;service-account-tokens&#34;&gt;Service account tokens&lt;/h4&gt;
&lt;p&gt;To authenticate with Grafana&amp;rsquo;s HTTP API, a randomly generated string known as a service account token can be used as an alternative to a password.&lt;/p&gt;
&lt;p&gt;When a service account is created, it can be linked to multiple access tokens. These service access tokens can be utilized in the same manner as API keys, providing a means to programmatically access Grafana HTTP API.&lt;/p&gt;
&lt;p&gt;You can create multiple tokens for the same service account. You might want to do this if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multiple applications use the same permissions, but you want to audit or manage their actions separately.&lt;/li&gt;
&lt;li&gt;You need to rotate or replace a compromised token.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;In Grafana&amp;rsquo;s audit logs it will still show up as the same service account.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Service account access tokens inherit permissions from the service account.&lt;/p&gt;
&lt;h3 id=&#34;api-keys&#34;&gt;API keys&lt;/h3&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;If you use Grafana v8.5 or newer, you should use service accounts instead of API keys. API keys will be deprecated in the near future. For more information, refer to &lt;a href=&#34;./#service-accounts&#34;&gt;Grafana service accounts&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;You can use Grafana API keys to interact with data sources via HTTP APIs.&lt;/p&gt;
&lt;h2 id=&#34;how-to-work-with-roles&#34;&gt;How to work with roles?&lt;/h2&gt;
&lt;p&gt;Grafana roles control the access of users and service accounts to specific resources and determine their authorized actions.&lt;/p&gt;
&lt;p&gt;You can assign roles through the user interface or APIs, establish them through Terraform, or synchronize them automatically via an external IAM provider.&lt;/p&gt;
&lt;h3 id=&#34;what-are-roles&#34;&gt;What are roles?&lt;/h3&gt;
&lt;p&gt;Within an organization, Grafana has established three primary &lt;a href=&#34;../../../administration/roles-and-permissions/#organization-roles&#34;&gt;organization roles&lt;/a&gt; - organization administrator, editor, and viewer - which dictate the user&amp;rsquo;s level of access and permissions, including the ability to edit data sources or create teams.
To be a member of any organization, every user must be assigned a role.&lt;/p&gt;
&lt;p&gt;In addition, Grafana provides a server administrator role that grants access to and enables interaction with resources that affect the entire instance, including organizations, users, and server-wide settings.
This particular role can only be accessed by users of self-hosted Grafana instances. It is a significant role intended for the administrators of the Grafana instance.&lt;/p&gt;
&lt;h3 id=&#34;what-are-permissions&#34;&gt;What are permissions?&lt;/h3&gt;
&lt;p&gt;Each role consists of a set of &lt;a href=&#34;../../../administration/roles-and-permissions/#dashboard-permissions&#34;&gt;permissions&lt;/a&gt; that determine the tasks a user can perform in the system.
For example, the &lt;strong&gt;Admin&lt;/strong&gt; role includes permissions that let an administrator create and delete users.&lt;/p&gt;
&lt;p&gt;Grafana allows for precise permission settings on both dashboards and folders, giving you the ability to control which users and teams can view, edit, and administer them.
For example, you might want a certain viewer to be able to edit a dashboard. While that user can see all dashboards, you can grant them access to update only one of them.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&#34;../../../introduction/grafana-enterprise/&#34;&gt;Grafana Enterprise&lt;/a&gt;, you can also grant granular permissions for data sources to control who can query and edit them.&lt;/p&gt;
&lt;p&gt;Dashboard, folder, and data source permissions can be set through the UI or APIs or provisioned through Terraform.&lt;/p&gt;
&lt;h3 id=&#34;role-based-access-control&#34;&gt;Role-based access control&lt;/h3&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Available in &lt;a href=&#34;../../../introduction/grafana-enterprise/&#34;&gt;Grafana Enterprise&lt;/a&gt; and &lt;a href=&#34;/docs/grafana-cloud/&#34;&gt;Grafana Cloud&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;If you think that the basic organization and server administrator roles are too limiting, it might be beneficial to employ &lt;a href=&#34;../../../administration/roles-and-permissions/access-control/&#34;&gt;role-based access control (RBAC)&lt;/a&gt;.
RBAC is a flexible approach to managing user access to Grafana resources, including users, data sources, and reports. It enables easy granting, changing, and revoking of read and write access for users.&lt;/p&gt;
&lt;p&gt;RBAC comes with pre-defined roles, such as data source writer, which allows updating, reading, or querying all data sources.
You can assign these roles to users, teams, and service accounts.&lt;/p&gt;
&lt;p&gt;In addition, RBAC empowers you to generate personalized roles and modify permissions authorized by the standard Grafana roles.&lt;/p&gt;
&lt;h2 id=&#34;user-synchronization-between-grafana-and-identity-providers&#34;&gt;User synchronization between Grafana and identity providers&lt;/h2&gt;
&lt;p&gt;When connecting Grafana to an identity provider, it&amp;rsquo;s important to think beyond just the initial authentication setup. You should also think about the maintenance of user bases and roles. Using Grafana&amp;rsquo;s team and role synchronization features ensures that updates you make to a user in your identity provider will be reflected in their role assignment and team memberships in Grafana.&lt;/p&gt;
&lt;h3 id=&#34;team-sync&#34;&gt;Team sync&lt;/h3&gt;
&lt;p&gt;Team sync is a feature that allows you to synchronize teams or groups from your authentication provider with teams in Grafana. This means that users of specific teams or groups in LDAP, OAuth, or SAML will be automatically added or removed as members of corresponding teams in Grafana. Whenever a user logs in, Grafana will check for any changes in the teams or groups of the authentication provider and update the user&amp;rsquo;s teams in Grafana accordingly. This makes it easy to manage user permissions across multiple systems.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Available in &lt;a href=&#34;../../../introduction/grafana-enterprise/&#34;&gt;Grafana Enterprise&lt;/a&gt; and &lt;a href=&#34;/docs/grafana-cloud/&#34;&gt;Grafana Cloud Advanced&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;



&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Team synchronization occurs only when a user logs in. However, if you are using LDAP, it is possible to enable active background synchronization. This allows for the continuous synchronization of teams.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;role-sync&#34;&gt;Role Sync&lt;/h3&gt;
&lt;p&gt;Grafana can synchronize basic roles from your authentication provider by mapping attributes from the identity provider to the user role in Grafana. This means that users with specific attributes, like role, team, or group membership in LDAP, OAuth, or SAML, will be automatically assigned the corresponding role in Grafana. Whenever a user logs in, Grafana will check for any changes in the user information retrieved from the authentication provider and update the user&amp;rsquo;s role in Grafana accordingly.&lt;/p&gt;
&lt;h3 id=&#34;organization-sync&#34;&gt;Organization sync&lt;/h3&gt;
&lt;p&gt;Organization sync is the process of binding all the users from an organization in Grafana. This delegates the role of managing users to the identity provider. This way, there&amp;rsquo;s no need to manage user access from Grafana because the identity provider will be queried whenever a new user tries to log in.&lt;/p&gt;
&lt;p&gt;With organization sync, users from identity provider groups can be assigned to corresponding Grafana organizations. This functionality is similar to role sync but with the added benefit of specifying the organization that a user belongs to for a particular identity provider group. Please note that this feature is only available for self-hosted Grafana instances, as Cloud Grafana instances have a single organization limit.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Organization sync is currently only supported for SAML and LDAP.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;



&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;You don&amp;rsquo;t need to invite users through Grafana when syncing with Organization sync.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;



&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Currently, only basic roles can be mapped via Organization sync.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

]]></content><description>&lt;h1 id="plan-your-iam-integration-strategy">Plan your IAM integration strategy&lt;/h1>
&lt;p>This section describes the decisions you should make when using an Identity and Access Management (IAM) provider to manage access to Grafana. IAM ensures that users have secure access to sensitive data and &lt;a href="../../../administration/data-source-management/">other resources&lt;/a>, simplifying user management and authentication.&lt;/p></description></item><item><title>Configure authentication</title><link>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/configure-authentication/</link><pubDate>Fri, 13 Mar 2026 14:43:40 -0400</pubDate><guid>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/configure-authentication/</guid><content><![CDATA[&lt;h1 id=&#34;configure-authentication&#34;&gt;Configure authentication&lt;/h1&gt;
&lt;p&gt;Grafana provides many ways to authenticate users. Some authentication integrations also enable syncing user permissions and org memberships.&lt;/p&gt;
&lt;p&gt;The following table shows all supported authentication providers and the features available for them. &lt;a href=&#34;../configure-team-sync/&#34;&gt;Team sync&lt;/a&gt; and &lt;a href=&#34;enhanced-ldap/#active-ldap-synchronization&#34;&gt;active sync&lt;/a&gt; are only available in Grafana Enterprise.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Provider&lt;/th&gt;
              &lt;th style=&#34;text-align: center&#34;&gt;Support&lt;/th&gt;
              &lt;th style=&#34;text-align: center&#34;&gt;Role mapping&lt;/th&gt;
              &lt;th style=&#34;text-align: center&#34;&gt;Team sync&lt;br&gt; &lt;em&gt;(Enterprise only)&lt;/em&gt;&lt;/th&gt;
              &lt;th style=&#34;text-align: center&#34;&gt;Active sync&lt;br&gt; &lt;em&gt;(Enterprise only)&lt;/em&gt;&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;auth-proxy/&#34;&gt;Auth Proxy&lt;/a&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v2.1&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v6.3&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;azuread/&#34;&gt;Azure AD OAuth&lt;/a&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v6.7&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v6.7&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v6.7&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;generic-oauth/&#34;&gt;Generic OAuth&lt;/a&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v4.0&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v6.5&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;github/&#34;&gt;GitHub OAuth&lt;/a&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v2.0&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v6.3&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;gitlab/&#34;&gt;GitLab OAuth&lt;/a&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v5.3&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v6.4&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;google/&#34;&gt;Google OAuth&lt;/a&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v2.0&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;jwt/&#34;&gt;JWT&lt;/a&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v8.0&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;ldap/&#34;&gt;LDAP&lt;/a&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v2.1&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v2.1&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v5.3&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v6.3&#43;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;okta/&#34;&gt;Okta OAuth&lt;/a&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v7.0&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v7.0&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v7.0&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;a href=&#34;saml/&#34;&gt;SAML&lt;/a&gt; (Enterprise only)&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v6.3&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v7.0&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;v7.0&#43;&lt;/td&gt;
              &lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;configuring-multiple-identity-providers&#34;&gt;Configuring multiple identity providers&lt;/h2&gt;
&lt;p&gt;Grafana allows you to configure more than one authentication provider, however it is not possible to configure the same type of authentication provider twice.
For example, you can have &lt;a href=&#34;saml/&#34;&gt;SAML&lt;/a&gt; (Enterprise only) and &lt;a href=&#34;generic-oauth/&#34;&gt;Generic OAuth&lt;/a&gt; configured, but you can not have two different &lt;a href=&#34;generic-oauth/&#34;&gt;Generic OAuth&lt;/a&gt; configurations.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: Grafana does not support multiple identity providers resolving the same user. Ensure there are no user account overlaps between the different providers&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;In scenarios where you have multiple identity providers of the same type, there are a couple of options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use different Grafana instances each configured with a given identity provider.&lt;/li&gt;
&lt;li&gt;Check if the identity provider supports account federation. In such cases, you can configure it once and let your identity provider federate the accounts from different providers.&lt;/li&gt;
&lt;li&gt;If SAML is supported by the identity provider, you can configure one &lt;a href=&#34;generic-oauth/&#34;&gt;Generic OAuth&lt;/a&gt; and one &lt;a href=&#34;saml/&#34;&gt;SAML&lt;/a&gt; (Enterprise only).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;grafana-auth&#34;&gt;Grafana Auth&lt;/h2&gt;
&lt;p&gt;Grafana of course has a built in user authentication system with password authentication enabled by default. You can
disable authentication by enabling anonymous access. You can also hide the login form and only allow login through an auth
provider (listed above). There are also options for allowing self sign up.&lt;/p&gt;
&lt;h3 id=&#34;login-and-short-lived-tokens&#34;&gt;Login and short-lived tokens&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The following applies when using Grafana&amp;rsquo;s built in user authentication, LDAP (without Auth proxy) or OAuth integration.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Grafana uses short-lived tokens as a mechanism for verifying authenticated users.
These short-lived tokens are rotated on an interval specified by &lt;code&gt;token_rotation_interval_minutes&lt;/code&gt; for active authenticated users.&lt;/p&gt;
&lt;p&gt;Inactive authenticated users will remain logged in for a duration specified by &lt;code&gt;login_maximum_inactive_lifetime_duration&lt;/code&gt;.
This means that a user can close a Grafana window and return before &lt;code&gt;now &#43; login_maximum_inactive_lifetime_duration&lt;/code&gt; to continue their session.
This is true as long as the time since last user login is less than &lt;code&gt;login_maximum_lifetime_duration&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;remote-logout&#34;&gt;Remote logout&lt;/h4&gt;
&lt;p&gt;You can logout from other devices by removing login sessions from the bottom of your profile page. If you are
a Grafana admin user, you can also do the same for any user from the Server Admin / Edit User view.&lt;/p&gt;
&lt;h2 id=&#34;settings&#34;&gt;Settings&lt;/h2&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;[auth]

# Login cookie name
login_cookie_name = grafana_session

# The maximum lifetime (duration) an authenticated user can be inactive before being required to login at next visit. Default is 7 days (7d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). The lifetime resets at each successful token rotation (token_rotation_interval_minutes).
login_maximum_inactive_lifetime_duration =

# The maximum lifetime (duration) an authenticated user can be logged in since login time before being required to login. Default is 30 days (30d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month).
login_maximum_lifetime_duration =

# How often should auth tokens be rotated for authenticated users when being active. The default is every 10 minutes.
token_rotation_interval_minutes = 10

# The maximum lifetime (seconds) an API key can be used. If it is set all the API keys should have limited lifetime that is lower than this value.
api_key_max_seconds_to_live = -1

# Enforce user lookup based on email instead of the unique ID provided by the IdP.
oauth_allow_insecure_email_lookup = false&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;anonymous-authentication&#34;&gt;Anonymous authentication&lt;/h3&gt;
&lt;p&gt;You can make Grafana accessible without any login required by enabling anonymous access in the configuration file.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;[auth.anonymous]
enabled = true

# Organization name that should be used for unauthenticated users
org_name = Main Org.

# Role for unauthenticated users, other valid values are `Editor` and `Admin`
org_role = Viewer&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you change your organization name in the Grafana UI, this setting needs to be updated to match the new name.&lt;/p&gt;
&lt;h3 id=&#34;basic-authentication&#34;&gt;Basic authentication&lt;/h3&gt;
&lt;p&gt;Basic auth is enabled by default and works with the built-in Grafana user-password authentication system and LDAP
authentication integration.&lt;/p&gt;
&lt;p&gt;To disable basic auth:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;[auth.basic]
enabled = false&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;disable-login-form&#34;&gt;Disable login form&lt;/h3&gt;
&lt;p&gt;Hide the Grafana login form using the below configuration settings.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;[auth]
disable_login_form = true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;enable-email-lookup&#34;&gt;Enable email lookup&lt;/h3&gt;
&lt;p&gt;Enable user lookup based on email in addition to using unique ID provided by IdPs.&lt;/p&gt;
&lt;p&gt;By default, Grafana relies on the user unique ID provided by the identity provider.
Looking up users by email can be safe for some identity providers (for example, when they are single tenants and unique non-editable, validated emails are provided), as well as in some infrastructures.&lt;/p&gt;
&lt;p&gt;We strongly recommend against enabling email lookups, however it is possible to do with the following configuration.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;[auth]
oauth_allow_insecure_email_lookup = true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;automatic-oauth-login&#34;&gt;Automatic OAuth login&lt;/h3&gt;
&lt;p&gt;Set to true to attempt login with specific OAuth provider automatically, skipping the login screen.
This setting is ignored if multiple auth providers are configured to use auto login.
Defaults to &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;[auth.generic_oauth]
auto_login = true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;avoid-automatic-oauth-login&#34;&gt;Avoid automatic OAuth login&lt;/h3&gt;
&lt;p&gt;To sign in with a username and password and avoid automatic OAuth login, add the &lt;code&gt;disableAutoLogin&lt;/code&gt; parameter to your login URL.
For example: &lt;code&gt;grafana.example.com/login?disableAutoLogin&lt;/code&gt; or &lt;code&gt;grafana.example.com/login?disableAutoLogin=true&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;hide-sign-out-menu&#34;&gt;Hide sign-out menu&lt;/h3&gt;
&lt;p&gt;Set the option detailed below to true to hide sign-out menu link. Useful if you use an auth proxy or JWT authentication.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;[auth]
disable_signout_menu = true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;url-redirect-after-signing-out&#34;&gt;URL redirect after signing out&lt;/h3&gt;
&lt;p&gt;URL to redirect the user to after signing out from Grafana. This can for example be used to enable signout from OAuth provider.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;[auth]
signout_redirect_url =&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;protected-roles&#34;&gt;Protected roles&lt;/h3&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Available in &lt;a href=&#34;../../../introduction/grafana-enterprise/&#34;&gt;Grafana Enterprise&lt;/a&gt; and &lt;a href=&#34;../../../introduction/grafana-cloud/&#34;&gt;Grafana Cloud&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;By default, after you configure an authorization provider, Grafana will adopt existing users into the new authentication scheme. For example, if you have created a user with basic authentication having the login &lt;code&gt;jsmith@example.com&lt;/code&gt;, then set up SAML authentication where &lt;code&gt;jsmith@example.com&lt;/code&gt; is an account, the user&amp;rsquo;s authentication type will be changed to SAML if they perform a SAML sign-in.&lt;/p&gt;
&lt;p&gt;You can disable this user adoption for certain roles using the &lt;code&gt;protected_roles&lt;/code&gt; property:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;[auth.security]
protected_roles = server_admins org_admins&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The value of &lt;code&gt;protected_roles&lt;/code&gt; should be a list of roles to protect, separated by spaces. Valid roles are &lt;code&gt;viewers&lt;/code&gt;, &lt;code&gt;editors&lt;/code&gt;, &lt;code&gt;org_admins&lt;/code&gt;, &lt;code&gt;server_admins&lt;/code&gt;, and &lt;code&gt;all&lt;/code&gt; (a superset of the other roles).&lt;/p&gt;
]]></content><description>&lt;h1 id="configure-authentication">Configure authentication&lt;/h1>
&lt;p>Grafana provides many ways to authenticate users. Some authentication integrations also enable syncing user permissions and org memberships.&lt;/p>
&lt;p>The following table shows all supported authentication providers and the features available for them. &lt;a href="../configure-team-sync/">Team sync&lt;/a> and &lt;a href="enhanced-ldap/#active-ldap-synchronization">active sync&lt;/a> are only available in Grafana Enterprise.&lt;/p></description></item><item><title>Configure database encryption</title><link>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/configure-database-encryption/</link><pubDate>Fri, 13 Mar 2026 14:43:40 -0400</pubDate><guid>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/configure-database-encryption/</guid><content><![CDATA[&lt;h1 id=&#34;configure-database-encryption&#34;&gt;Configure database encryption&lt;/h1&gt;
&lt;p&gt;Grafana’s database contains secrets, which are used to query data sources, send alert notifications, and perform other functions within Grafana.&lt;/p&gt;
&lt;p&gt;Grafana encrypts these secrets before they are written to the database, by using a symmetric-key encryption algorithm called Advanced Encryption Standard (AES). These secrets are signed using a &lt;a href=&#34;../../configure-grafana/#secret_key&#34;&gt;secret key&lt;/a&gt; that you can change when you configure a new Grafana instance.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Grafana v9.0 and newer use &lt;a href=&#34;#envelope-encryption&#34;&gt;envelope encryption&lt;/a&gt; by default, which adds a layer of indirection to the encryption process that introduces an &lt;a href=&#34;#implicit-breaking-change&#34;&gt;&lt;strong&gt;implicit breaking change&lt;/strong&gt;&lt;/a&gt; for older versions of Grafana.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;For further details about how to operate a Grafana instance with envelope encryption, see the &lt;a href=&#34;#operational-work&#34;&gt;Operational work&lt;/a&gt; section.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;In Grafana Enterprise, you can also &lt;a href=&#34;#changing-your-encryption-mode-to-aes-gcm&#34;&gt;encrypt secrets in AES-GCM (Galois/Counter Mode)&lt;/a&gt; instead of the default AES-CFB (Cipher FeedBack mode).&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;envelope-encryption&#34;&gt;Envelope encryption&lt;/h2&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Since Grafana v9.0, you can turn envelope encryption off by adding the feature toggle &lt;code&gt;disableEnvelopeEncryption&lt;/code&gt; to your &lt;a href=&#34;../../configure-grafana/#feature_toggles&#34;&gt;Grafana configuration&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Instead of encrypting all secrets with a single key, Grafana uses a set of keys called data encryption keys (DEKs) to encrypt them. These data encryption keys are themselves encrypted with a single key encryption key (KEK), configured through the &lt;code&gt;secret_key&lt;/code&gt; attribute in your
&lt;a href=&#34;../../configure-grafana/#secret_key&#34;&gt;Grafana configuration&lt;/a&gt; or by &lt;a href=&#34;#encrypting-your-database-with-a-key-from-a-key-management-service-kms&#34;&gt;Encrypting your database with a key from a key management service (KMS)&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;implicit-breaking-change&#34;&gt;Implicit breaking change&lt;/h3&gt;
&lt;p&gt;Envelope encryption introduces an implicit breaking change to versions of Grafana prior to v9.0, because it changes how secrets stored in the Grafana database are encrypted. Grafana administrators can upgrade to Grafana v9.0 with no action required from the database encryption perspective, but must be extremely careful if they need to roll an upgrade back to Grafana v8.5 or earlier because secrets created or modified after upgrading to Grafana v9.0 can’t be decrypted by previous versions.&lt;/p&gt;
&lt;p&gt;Grafana v8.5 implemented envelope encryption behind an optional feature toggle. Grafana administrators who need to downgrade to Grafana v8.5 can enable envelope encryption as a workaround by adding the feature toggle &lt;code&gt;envelopeEncryption&lt;/code&gt; to the &lt;a href=&#34;../../configure-grafana/#feature_toggles&#34;&gt;Grafana configuration&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;operational-work&#34;&gt;Operational work&lt;/h2&gt;
&lt;p&gt;From the database encryption perspective, Grafana administrators can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#re-encrypt-secrets&#34;&gt;&lt;strong&gt;Re-encrypt secrets&lt;/strong&gt;&lt;/a&gt;: re-encrypt secrets with envelope encryption and a fresh data key.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#roll-back-secrets&#34;&gt;&lt;strong&gt;Roll back secrets&lt;/strong&gt;&lt;/a&gt;: decrypt secrets encrypted with envelope encryption and re-encrypt them with legacy encryption.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#re-encrypt-data-keys&#34;&gt;&lt;strong&gt;Re-encrypt data keys&lt;/strong&gt;&lt;/a&gt;: re-encrypt data keys with a fresh key encryption key and a KMS integration.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#rotate-data-keys&#34;&gt;&lt;strong&gt;Rotate data keys&lt;/strong&gt;&lt;/a&gt;: disable active data keys and stop using them for encryption in favor of a fresh one.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;re-encrypt-secrets&#34;&gt;Re-encrypt secrets&lt;/h3&gt;
&lt;p&gt;You can re-encrypt secrets in order to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Move already existing secrets&amp;rsquo; encryption forward from legacy to envelope encryption.&lt;/li&gt;
&lt;li&gt;Re-encrypt secrets after a &lt;a href=&#34;#rotate-data-keys&#34;&gt;data keys rotation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To re-encrypt secrets, use the &lt;a href=&#34;../../../cli/&#34;&gt;Grafana CLI&lt;/a&gt; by running the &lt;code&gt;grafana cli admin secrets-migration re-encrypt&lt;/code&gt; command or the &lt;code&gt;/encryption/reencrypt-secrets&lt;/code&gt; endpoint of the Grafana &lt;a href=&#34;../../../developers/http_api/admin/#roll-back-secrets&#34;&gt;Admin API&lt;/a&gt;. It&amp;rsquo;s safe to run more than once, more recommended under maintenance mode.&lt;/p&gt;
&lt;h3 id=&#34;roll-back-secrets&#34;&gt;Roll back secrets&lt;/h3&gt;
&lt;p&gt;You can roll back secrets encrypted with envelope encryption to legacy encryption. This might be necessary to downgrade to Grafana versions prior to v9.0 after an unsuccessful upgrade.&lt;/p&gt;
&lt;p&gt;To roll back secrets, use the &lt;a href=&#34;../../../cli/&#34;&gt;Grafana CLI&lt;/a&gt; by running the &lt;code&gt;grafana cli admin secrets-migration rollback&lt;/code&gt; command or the &lt;code&gt;/encryption/rollback-secrets&lt;/code&gt; endpoint of the Grafana &lt;a href=&#34;../../../developers/http_api/admin/#re-encrypt-secrets&#34;&gt;Admin API&lt;/a&gt;. It&amp;rsquo;s safe to run more than once, more recommended under maintenance mode.&lt;/p&gt;
&lt;h3 id=&#34;re-encrypt-data-keys&#34;&gt;Re-encrypt data keys&lt;/h3&gt;
&lt;p&gt;You can re-encrypt data keys encrypted with a specific key encryption key (KEK). This allows you to either re-encrypt existing data keys with a new KEK version or to re-encrypt them with a completely different KEK.&lt;/p&gt;
&lt;p&gt;To re-encrypt data keys, use the &lt;a href=&#34;../../../cli/&#34;&gt;Grafana CLI&lt;/a&gt; by running the &lt;code&gt;grafana cli admin secrets-migration re-encrypt-data-keys&lt;/code&gt; command or the &lt;code&gt;/encryption/reencrypt-data-keys&lt;/code&gt; endpoint of the Grafana &lt;a href=&#34;../../../developers/http_api/admin/#re-encrypt-data-encryption-keys&#34;&gt;Admin API&lt;/a&gt;. It&amp;rsquo;s safe to run more than once, more recommended under maintenance mode.&lt;/p&gt;
&lt;h3 id=&#34;rotate-data-keys&#34;&gt;Rotate data keys&lt;/h3&gt;
&lt;p&gt;You can rotate data keys to disable the active data key and therefore stop using them for encryption operations. For high-availability setups, you might need to wait until the data keys cache&amp;rsquo;s time-to-live (TTL) expires to ensure that all rotated data keys are no longer being used for encryption operations.&lt;/p&gt;
&lt;p&gt;New data keys for encryption operations are generated on demand.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Data key rotation does &lt;strong&gt;not&lt;/strong&gt; implicitly re-encrypt secrets. Grafana will continue to use rotated data keys to decrypt
secrets still encrypted with them. To completely stop using
rotated data keys for both encryption and decryption, see &lt;a href=&#34;#re-encrypt-secrets&#34;&gt;secrets re-encryption&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;To rotate data keys, use the &lt;code&gt;/encryption/rotate-data-keys&lt;/code&gt; endpoint of the Grafana &lt;a href=&#34;../../../developers/http_api/admin/#rotate-data-encryption-keys&#34;&gt;Admin API&lt;/a&gt;. It&amp;rsquo;s safe to call more than once, more recommended under maintenance mode.&lt;/p&gt;
&lt;h2 id=&#34;encrypting-your-database-with-a-key-from-a-key-management-service-kms&#34;&gt;Encrypting your database with a key from a key management service (KMS)&lt;/h2&gt;
&lt;p&gt;If you are using Grafana Enterprise, you can integrate with a key management service (KMS) provider, and change Grafana’s cryptographic mode of operation from AES-CFB to AES-GCM.&lt;/p&gt;
&lt;p&gt;You can choose to encrypt secrets stored in the Grafana database using a key from a KMS, which is a secure central storage location that is designed to help you to create and manage cryptographic keys and control their use across many services. When you integrate with a KMS, Grafana does not directly store your encryption key. Instead, Grafana stores KMS credentials and the identifier of the key, which Grafana uses to encrypt the database.&lt;/p&gt;
&lt;p&gt;Grafana integrates with the following key management services:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;encrypt-secrets-using-aws-kms/&#34;&gt;AWS KMS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;encrypt-secrets-using-azure-key-vault/&#34;&gt;Azure Key Vault&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;encrypt-secrets-using-google-cloud-kms/&#34;&gt;Google Cloud KMS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;encrypt-secrets-using-hashicorp-key-vault/&#34;&gt;Hashicorp Key Vault&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;changing-your-encryption-mode-to-aes-gcm&#34;&gt;Changing your encryption mode to AES-GCM&lt;/h2&gt;
&lt;p&gt;Grafana encrypts secrets using Advanced Encryption Standard in Cipher FeedBack mode (AES-CFB). You might prefer to use AES in Galois/Counter Mode (AES-GCM) instead, to meet your company’s security requirements or in order to maintain consistency with other services.&lt;/p&gt;
&lt;p&gt;To change your encryption mode, update the &lt;code&gt;algorithm&lt;/code&gt; value in the &lt;code&gt;[security.encryption]&lt;/code&gt; section of your Grafana configuration file. For further details, refer to &lt;a href=&#34;../../configure-grafana/enterprise-configuration/#securityencryption&#34;&gt;Enterprise configuration&lt;/a&gt;.&lt;/p&gt;
]]></content><description>&lt;h1 id="configure-database-encryption">Configure database encryption&lt;/h1>
&lt;p>Grafana’s database contains secrets, which are used to query data sources, send alert notifications, and perform other functions within Grafana.&lt;/p>
&lt;p>Grafana encrypts these secrets before they are written to the database, by using a symmetric-key encryption algorithm called Advanced Encryption Standard (AES). These secrets are signed using a &lt;a href="../../configure-grafana/#secret_key">secret key&lt;/a> that you can change when you configure a new Grafana instance.&lt;/p></description></item><item><title>Audit a Grafana instance</title><link>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/audit-grafana/</link><pubDate>Fri, 13 Mar 2026 14:43:40 -0400</pubDate><guid>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/audit-grafana/</guid><content><![CDATA[&lt;h1 id=&#34;audit-a-grafana-instance&#34;&gt;Audit a Grafana instance&lt;/h1&gt;
&lt;p&gt;Auditing allows you to track important changes to your Grafana instance. By default, audit logs are logged to file but the auditing feature also supports sending logs directly to Loki.&lt;/p&gt;
&lt;p&gt;Only API requests or UI actions that trigger an API request generate an audit log.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Available in &lt;a href=&#34;../../../introduction/grafana-enterprise/&#34;&gt;Grafana Enterprise&lt;/a&gt; version 7.3 and later, and &lt;a href=&#34;/docs/grafana-cloud/&#34;&gt;Grafana Cloud&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;audit-logs&#34;&gt;Audit logs&lt;/h2&gt;
&lt;p&gt;Audit logs are JSON objects representing user actions like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modifications to resources such as dashboards and data sources.&lt;/li&gt;
&lt;li&gt;A user failing to log in.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;format&#34;&gt;Format&lt;/h3&gt;
&lt;p&gt;Audit logs contain the following fields. The fields followed by &lt;strong&gt;*&lt;/strong&gt; are always available, the others depend on the type of action logged.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Field name&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;timestamp&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;The date and time the request was made, in coordinated universal time (UTC) using the &lt;a href=&#34;https://tools.ietf.org/html/rfc3339#section-5.6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;RFC3339&lt;/a&gt; format.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;user&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;object&lt;/td&gt;
              &lt;td&gt;Information about the user that made the request. Either one of the &lt;code&gt;UserID&lt;/code&gt; or &lt;code&gt;ApiKeyID&lt;/code&gt; fields will contain content if &lt;code&gt;isAnonymous=false&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;user.userId&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;ID of the Grafana user that made the request.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;user.orgId&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;Current organization of the user that made the request.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;user.orgRole&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Current role of the user that made the request.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;user.name&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Name of the Grafana user that made the request.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;user.tokenId&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;ID of the user authentication token.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;user.apiKeyId&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;ID of the Grafana API key used to make the request.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;user.isAnonymous&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;boolean&lt;/td&gt;
              &lt;td&gt;If an anonymous user made the request, &lt;code&gt;true&lt;/code&gt;. Otherwise, &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;action&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;The request action. For example, &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, or &lt;code&gt;manage-permissions&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;request&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;object&lt;/td&gt;
              &lt;td&gt;Information about the HTTP request.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;request.params&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;object&lt;/td&gt;
              &lt;td&gt;Request’s path parameters.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;request.query&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;object&lt;/td&gt;
              &lt;td&gt;Request’s query parameters.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;request.body&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Request’s body. Filled with &lt;code&gt;&amp;lt;non-marshalable format&amp;gt;&lt;/code&gt; when it isn&amp;rsquo;t a valid JSON.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;result&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;object&lt;/td&gt;
              &lt;td&gt;Information about the HTTP response.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;result.statusType&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;If the request action was successful, &lt;code&gt;success&lt;/code&gt;. Otherwise, &lt;code&gt;failure&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;result.statusCode&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;HTTP status of the request.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;result.failureMessage&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;HTTP error message.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;result.body&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Response body. Filled with &lt;code&gt;&amp;lt;non-marshalable format&amp;gt;&lt;/code&gt; when it isn&amp;rsquo;t a valid JSON.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;resources&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;array&lt;/td&gt;
              &lt;td&gt;Information about the resources that the request action affected. This field can be null for non-resource actions such as &lt;code&gt;login&lt;/code&gt; or &lt;code&gt;logout&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;resources[x].id&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;ID of the resource.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;resources[x].type&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;The type of the resource that was logged: &lt;code&gt;alert&lt;/code&gt;, &lt;code&gt;alert-notification&lt;/code&gt;, &lt;code&gt;annotation&lt;/code&gt;, &lt;code&gt;api-key&lt;/code&gt;, &lt;code&gt;auth-token&lt;/code&gt;, &lt;code&gt;dashboard&lt;/code&gt;, &lt;code&gt;datasource&lt;/code&gt;, &lt;code&gt;folder&lt;/code&gt;, &lt;code&gt;org&lt;/code&gt;, &lt;code&gt;panel&lt;/code&gt;, &lt;code&gt;playlist&lt;/code&gt;, &lt;code&gt;report&lt;/code&gt;, &lt;code&gt;team&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt;, or &lt;code&gt;version&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;requestUri&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Request URI.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;ipAddress&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;IP address that the request was made from.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;userAgent&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Agent through which the request was made.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;grafanaVersion&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Current version of Grafana when this log is created.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;additionalData&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;object&lt;/td&gt;
              &lt;td&gt;Additional information that can be provided about the request.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The &lt;code&gt;additionalData&lt;/code&gt; field can contain the following information:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Field name&lt;/th&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;loginUsername&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;login&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Login used in the Grafana authentication form.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;extUserInfo&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;login&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;User information provided by the external system that was used to log in.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;authTokenCount&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;login&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Number of active authentication tokens for the user that logged in.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;terminationReason&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;logout&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The reason why the user logged out, such as a manual logout or a token expiring.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;billing_role&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;billing-information&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The billing role associated with the billing information being sent.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;recorded-actions&#34;&gt;Recorded actions&lt;/h3&gt;
&lt;p&gt;The audit logs include records about the following categories of actions. Each action is
distinguished by the &lt;code&gt;action&lt;/code&gt; and &lt;code&gt;resources[...].type&lt;/code&gt; fields in the JSON record.&lt;/p&gt;
&lt;p&gt;For example, creating an API key produces an audit log like this:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JSON&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;{
  &amp;#34;action&amp;#34;: &amp;#34;create&amp;#34;,
  &amp;#34;resources&amp;#34;: [
    {
      &amp;#34;id&amp;#34;: 1,
      &amp;#34;type&amp;#34;: &amp;#34;api-key&amp;#34;
    }
  ],
  &amp;#34;timestamp&amp;#34;: &amp;#34;2021-11-12T22:12:36.144795692Z&amp;#34;,
  &amp;#34;user&amp;#34;: {
    &amp;#34;userId&amp;#34;: 1,
    &amp;#34;orgId&amp;#34;: 1,
    &amp;#34;orgRole&amp;#34;: &amp;#34;Admin&amp;#34;,
    &amp;#34;username&amp;#34;: &amp;#34;admin&amp;#34;,
    &amp;#34;isAnonymous&amp;#34;: false,
    &amp;#34;authTokenId&amp;#34;: 1
  },
  &amp;#34;request&amp;#34;: {
    &amp;#34;body&amp;#34;: &amp;#34;{\&amp;#34;name\&amp;#34;:\&amp;#34;example\&amp;#34;,\&amp;#34;role\&amp;#34;:\&amp;#34;Viewer\&amp;#34;,\&amp;#34;secondsToLive\&amp;#34;:null}&amp;#34;
  },
  &amp;#34;result&amp;#34;: {
    &amp;#34;statusType&amp;#34;: &amp;#34;success&amp;#34;,
    &amp;#34;statusCode&amp;#34;: 200,
    &amp;#34;responseBody&amp;#34;: &amp;#34;{\&amp;#34;id\&amp;#34;:1,\&amp;#34;name\&amp;#34;:\&amp;#34;example\&amp;#34;}&amp;#34;
  },
  &amp;#34;resources&amp;#34;: [
    {
      &amp;#34;id&amp;#34;: 1,
      &amp;#34;type&amp;#34;: &amp;#34;api-key&amp;#34;
    }
  ],
  &amp;#34;requestUri&amp;#34;: &amp;#34;/api/auth/keys&amp;#34;,
  &amp;#34;ipAddress&amp;#34;: &amp;#34;127.0.0.1:54652&amp;#34;,
  &amp;#34;userAgent&amp;#34;: &amp;#34;Mozilla/5.0 (X11; Linux x86_64; rv:94.0) Gecko/20100101 Firefox/94.0&amp;#34;,
  &amp;#34;grafanaVersion&amp;#34;: &amp;#34;8.3.0-pre&amp;#34;
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Some actions can only be distinguished by their &lt;code&gt;requestUri&lt;/code&gt; fields. For those actions, the relevant
pattern of the &lt;code&gt;requestUri&lt;/code&gt; field is given.&lt;/p&gt;
&lt;p&gt;Note that almost all these recorded actions are actions that correspond to API requests or UI actions that
trigger an API request. Therefore, the action &lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;email&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}]}&lt;/code&gt; corresponds
to the action when the user requests a report&amp;rsquo;s preview to be sent through email, and not the scheduled ones.&lt;/p&gt;
&lt;h4 id=&#34;sessions&#34;&gt;Sessions&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Log in&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;login-AUTH-MODULE&amp;quot;}&lt;/code&gt; *&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Log out **&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;logout&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Force logout for user&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;logout-user&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Remove user authentication token&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;revoke-auth-token&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;auth-token&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create API key&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;api-key&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete API key&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;api-key&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;* Where &lt;code&gt;AUTH-MODULE&lt;/code&gt; is the name of the authentication module: &lt;code&gt;grafana&lt;/code&gt;, &lt;code&gt;saml&lt;/code&gt;,
&lt;code&gt;ldap&lt;/code&gt;, etc. &lt;br /&gt;
** Includes manual log out, token expired/revoked, and &lt;a href=&#34;../configure-authentication/saml/#single-logout&#34;&gt;SAML Single Logout&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;service-accounts&#34;&gt;Service accounts&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Create service account&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;service-account&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update service account&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;service-account&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete service account&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;service-account&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create service account token&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;service-account&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;service-account-token&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete service account token&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;service-account&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;service-account-token&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Hide API keys&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;hide-api-keys&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Migrate API keys&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;migrate-api-keys&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Migrate API key&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;migrate-api-keys&amp;quot;}, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;api-key&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;access-control&#34;&gt;Access control&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Create role&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;role&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update role&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;role&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete role&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;role&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Assign built-in role&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;assign-builtin-role&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;role&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;builtin-role&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Remove built-in role&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;remove-builtin-role&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;role&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;builtin-role&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Grant team role&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;grant-team-role&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;team&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set team roles&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-team-roles&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;team&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Revoke team role&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;revoke-team-role&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;role&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;team&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Grant user role&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;grant-user-role&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;role&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set user roles&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-user-roles&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Revoke user role&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;revoke-user-role&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;role&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set user permissions on folder&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-user-permissions-on-folder&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;folder&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set team permissions on folder&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-team-permissions-on-folder&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;folder&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;team&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set basic role permissions on folder&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-basic-role-permissions-on-folder&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;folder&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;builtin-role&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set user permissions on dashboard&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-user-permissions-on-dashboards&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set team permissions on dashboard&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-team-permissions-on-dashboards&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;team&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set basic role permissions on dashboard&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-basic-role-permissions-on-dashboards&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;builtin-role&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set user permissions on team&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-user-permissions-on-teams&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;teams&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set user permissions on service account&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-user-permissions-on-service-accounts&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;service-account&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set user permissions on datasource&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-user-permissions-on-data-sources&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set team permissions on datasource&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-team-permissions-on-data-sources&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;team&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Set basic role permissions on datasource&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;set-basic-role-permissions-on-data-sources&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;builtin-role&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;user-management&#34;&gt;User management&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Create user&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update user&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete user&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Disable user&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;disable&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Enable user&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;enable&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update password&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update-password&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Send password reset email&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;send-reset-email&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Reset password&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;reset-password&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update permissions&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update-permissions&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Send signup email&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;signup-email&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Click signup link&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;signup&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Reload LDAP configuration&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;ldap-reload&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Get user in LDAP&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;ldap-search&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Sync user with LDAP&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;ldap-sync&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;team-and-organization-management&#34;&gt;Team and organization management&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Add team&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/teams&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update team&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/teams/TEAM-ID&amp;quot;}&lt;/code&gt;*&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete team&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/teams/TEAM-ID&amp;quot;}&lt;/code&gt;*&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Add external group for team&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/teams/TEAM-ID/groups&amp;quot;}&lt;/code&gt;*&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Remove external group for team&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/teams/TEAM-ID/groups/GROUP-ID&amp;quot;}&lt;/code&gt;*&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Add user to team&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;team&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update team member permissions&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;team&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Remove user from team&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;team&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create organization&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;org&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update organization&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;org&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete organization&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;org&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Add user to organization&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;org&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Change user role in organization&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;org&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Remove user from organization&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;org&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Invite external user to organization&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;org-invite&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;org&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;user&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Revoke invitation&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;revoke-org-invite&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;org&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;* Where &lt;code&gt;TEAM-ID&lt;/code&gt; is the ID of the affected team, and &lt;code&gt;GROUP-ID&lt;/code&gt; (if present) is the ID of the
external group.&lt;/p&gt;
&lt;h4 id=&#34;folder-and-dashboard-management&#34;&gt;Folder and dashboard management&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Create folder&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;folder&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update folder&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;folder&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update folder permissions&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;manage-permissions&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;folder&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete folder&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;folder&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create/update dashboard&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create-update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Import dashboard&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update dashboard permissions&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;manage-permissions&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Restore old dashboard version&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;restore&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete dashboard&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;library-elements-management&#34;&gt;Library elements management&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Create library element&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;library-element&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update library element&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;library-element&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete library element&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;library-element&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;data-sources-management&#34;&gt;Data sources management&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Create datasource&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update datasource&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete datasource&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Enable permissions for datasource&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;enable-permissions&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Disable permissions for datasource&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;disable-permissions&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Grant datasource permission to role, team, or user&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;dspermission&amp;quot;}]}&lt;/code&gt;*&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Remove datasource permission&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;dspermission&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Enable caching for datasource&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;enable-cache&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Disable caching for datasource&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;disable-cache&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update datasource caching configuration&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;datasource&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;* &lt;code&gt;resources&lt;/code&gt; may also contain a third item with &lt;code&gt;&amp;quot;type&amp;quot;:&lt;/code&gt; set to &lt;code&gt;&amp;quot;user&amp;quot;&lt;/code&gt; or &lt;code&gt;&amp;quot;team&amp;quot;&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;alerts-and-notification-channels-management&#34;&gt;Alerts and notification channels management&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Save alert manager configuration&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/alertmanager/RECIPIENT/config/api/v1/alerts&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Reset alert manager configuration&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/alertmanager/RECIPIENT/config/api/v1/alerts&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create silence&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/alertmanager/RECIPIENT/api/v2/silences&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete silence&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/alertmanager/RECIPIENT/api/v2/silences/SILENCE-ID&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create alert&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/ruler/RECIPIENT/api/v2/alerts&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create or update rule group&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create-update&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/ruler/RECIPIENT/api/v1/rules/NAMESPACE&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete rule group&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/ruler/RECIPIENT/api/v1/rules/NAMESPACE/GROUP-NAME&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete namespace&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/ruler/RECIPIENT/api/v1/rules/NAMESPACE&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Test Grafana managed receivers&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;test&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/alertmanager/RECIPIENT/config/api/v1/receivers/test&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create or update the NGalert configuration of the user&amp;rsquo;s organization&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create-update&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/v1/ngalert/admin_config&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete the NGalert configuration of the user&amp;rsquo;s organization&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/v1/ngalert/admin_config&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Where the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;RECIPIENT&lt;/code&gt; is &lt;code&gt;grafana&lt;/code&gt; for requests handled by Grafana or the data source UID for requests forwarded to a data source.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NAMESPACE&lt;/code&gt; is the string identifier for the rules namespace.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GROUP-NAME&lt;/code&gt; is the string identifier for the rules group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SILENCE-ID&lt;/code&gt; is the ID of the affected silence.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following legacy alerting actions are still supported:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Test alert rule&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;test&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;panel&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Pause alert&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;pause&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;alert&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Pause all alerts&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;pause-all&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Test alert notification channel&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;test&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;alert-notification&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create alert notification channel&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;alert-notification&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update alert notification channel&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;alert-notification&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete alert notification channel&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;alert-notification&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;reporting&#34;&gt;Reporting&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Create report&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update report&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete report&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Send report by email&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;email&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;report&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update reporting settings&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;change-settings&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;annotations-playlists-and-snapshots-management&#34;&gt;Annotations, playlists and snapshots management&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Create annotation&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;annotation&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create Graphite annotation&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create-graphite&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;annotation&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update annotation&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;annotation&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Patch annotation&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;patch&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;annotation&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete annotation&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;annotation&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete all annotations from panel&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;mass-delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;panel&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create playlist&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;playlist&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Update playlist&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;playlist&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete playlist&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;playlist&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Create a snapshot&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;dashboard&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;snapshot&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete a snapshot&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;snapshot&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Delete a snapshot by delete key&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;, &amp;quot;resources&amp;quot;: [{&amp;quot;type&amp;quot;: &amp;quot;snapshot&amp;quot;}]}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;provisioning&#34;&gt;Provisioning&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Reload provisioned dashboards&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;provisioning-dashboards&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Reload provisioned datasources&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;provisioning-datasources&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Reload provisioned plugins&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;provisioning-plugins&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Reload provisioned notifications&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;provisioning-notifications&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Reload provisioned alerts&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;provisioning-alerts&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Reload provisioned access control&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;provisioning-accesscontrol&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;plugins-management&#34;&gt;Plugins management&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Install plugin&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;install&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Uninstall plugin&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;uninstall&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;miscellaneous&#34;&gt;Miscellaneous&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Set licensing token&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;create&amp;quot;, &amp;quot;requestUri&amp;quot;: &amp;quot;/api/licensing/token&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Save billing information&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;billing-information&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;generic-actions&#34;&gt;Generic actions&lt;/h4&gt;
&lt;p&gt;In addition to the actions listed above, any HTTP request (&lt;code&gt;POST&lt;/code&gt;, &lt;code&gt;PATCH&lt;/code&gt;, &lt;code&gt;PUT&lt;/code&gt;, and &lt;code&gt;DELETE&lt;/code&gt;)
against the API is recorded with one of the following generic actions.&lt;/p&gt;
&lt;p&gt;Furthermore, you can also record &lt;code&gt;GET&lt;/code&gt; requests. See below how to configure it.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Action&lt;/th&gt;
              &lt;th&gt;Distinguishing fields&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;POST request&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;action&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;PATCH request&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;partial-update&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;PUT request&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;update&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;DELETE request&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;delete&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;GET request&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;{&amp;quot;action&amp;quot;: &amp;quot;retrieve&amp;quot;}&lt;/code&gt;&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;configuration&#34;&gt;Configuration&lt;/h2&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;The auditing feature is disabled by default.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Audit logs can be saved into files, sent to a Loki instance or sent to the Grafana default logger. By default, only the file exporter is enabled.
You can choose which exporter to use in the &lt;a href=&#34;../../configure-grafana/&#34;&gt;configuration file&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Options are &lt;code&gt;file&lt;/code&gt;, &lt;code&gt;loki&lt;/code&gt;, and &lt;code&gt;logger&lt;/code&gt;. Use spaces to separate multiple modes, such as &lt;code&gt;file loki&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;By default, when a user creates or updates a dashboard, its content will not appear in the logs as it can significantly increase the size of your logs. If this is important information for you and you can handle the amount of data generated, then you can enable this option in the configuration.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;ini&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-ini&#34;&gt;[auditing]
# Enable the auditing feature
enabled = false
# List of enabled loggers
loggers = file
# Keep dashboard content in the logs (request or response fields); this can significantly increase the size of your logs.
log_dashboard_content = false
# Keep requests and responses body; this can significantly increase the size of your logs.
verbose = false
# Write an audit log for every status code.
# By default it only logs the following ones: 2XX, 3XX, 401, 403 and 500.
log_all_status_codes = false
# Maximum response body (in bytes) to be audited; 500KiB by default.
# May help reducing the memory footprint caused by auditing.
max_response_size_bytes = 512000&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Each exporter has its own configuration fields.&lt;/p&gt;
&lt;h3 id=&#34;file-exporter&#34;&gt;File exporter&lt;/h3&gt;
&lt;p&gt;Audit logs are saved into files. You can configure the folder to use to save these files. Logs are rotated when the file size is exceeded and at the start of a new day.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;ini&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-ini&#34;&gt;[auditing.logs.file]
# Path to logs folder
path = data/log
# Maximum log files to keep
max_files = 5
# Max size in megabytes per log file
max_file_size_mb = 256&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;loki-exporter&#34;&gt;Loki exporter&lt;/h3&gt;
&lt;p&gt;Audit logs are sent to a &lt;a href=&#34;/oss/loki/&#34;&gt;Loki&lt;/a&gt; service, through HTTP or gRPC.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;The HTTP option for the Loki exporter is available only in Grafana Enterprise version 7.4 and later.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;


&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;ini&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-ini&#34;&gt;[auditing.logs.loki]
# Set the communication protocol to use with Loki (can be grpc or http)
type = grpc
# Set the address for writing logs to Loki (format must be host:port)
url = localhost:9095
# Defaults to true. If true, it establishes a secure connection to Loki
tls = true
# Set the tenant ID for Loki communication, which is disabled by default.
# The tenant ID is required to interact with Loki running in multi-tenant mode.
tenant_id =&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you have multiple Grafana instances sending logs to the same Loki service or if you are using Loki for non-audit logs, audit logs come with additional labels to help identifying them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;host&lt;/strong&gt; - OS hostname on which the Grafana instance is running.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;grafana_instance&lt;/strong&gt; - Application URL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kind&lt;/strong&gt; - &lt;code&gt;auditing&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;console-exporter&#34;&gt;Console exporter&lt;/h3&gt;
&lt;p&gt;Audit logs are sent to the Grafana default logger. The audit logs use the &lt;code&gt;auditing.console&lt;/code&gt; logger and are logged on &lt;code&gt;debug&lt;/code&gt;-level, learn how to enable debug logging in the &lt;a href=&#34;../../configure-grafana/#log&#34;&gt;log configuration&lt;/a&gt; section of the documentation. Accessing the audit logs in this way is not recommended for production use.&lt;/p&gt;
]]></content><description>&lt;h1 id="audit-a-grafana-instance">Audit a Grafana instance&lt;/h1>
&lt;p>Auditing allows you to track important changes to your Grafana instance. By default, audit logs are logged to file but the auditing feature also supports sending logs directly to Loki.&lt;/p></description></item><item><title>Export logs of usage insights</title><link>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/export-logs/</link><pubDate>Fri, 13 Mar 2026 14:43:40 -0400</pubDate><guid>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/export-logs/</guid><content><![CDATA[&lt;h1 id=&#34;export-logs-of-usage-insights&#34;&gt;Export logs of usage insights&lt;/h1&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Available in &lt;a href=&#34;../../../introduction/grafana-enterprise/&#34;&gt;Grafana Enterprise&lt;/a&gt; version 7.4 and later, and &lt;a href=&#34;/docs/grafana-cloud/&#34;&gt;Grafana Cloud Pro and Advanced&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;By exporting usage logs to Loki, you can directly query them and create dashboards of the information that matters to you most, such as dashboard errors, most active organizations, or your top-10 most-used queries. This configuration is done for you in Grafana Cloud, with provisioned dashboards. Read about them in the &lt;a href=&#34;/docs/grafana-cloud/usage-insights/&#34;&gt;Grafana Cloud documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;usage-insights-logs&#34;&gt;Usage insights logs&lt;/h2&gt;
&lt;p&gt;Usage insights logs are JSON objects that represent certain user activities, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A user opens a dashboard.&lt;/li&gt;
&lt;li&gt;A query is sent to a data source.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;scope&#34;&gt;Scope&lt;/h3&gt;
&lt;p&gt;A log is created every time a user opens a dashboard or when a query is sent to a data source in the dashboard view. A query that is performed via Explore does not generate a log.&lt;/p&gt;
&lt;h3 id=&#34;format&#34;&gt;Format&lt;/h3&gt;
&lt;p&gt;Logs of usage insights contain the following fields, where the fields followed by * are always available, and the others depend on the logged event:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Field name&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;eventName&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Type of the event, which can be either &lt;code&gt;data-request&lt;/code&gt; or &lt;code&gt;dashboard-view&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;folderName&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Name of the dashboard folder.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;dashboardName&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Name of the dashboard where the event happened.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;dashboardId&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;ID of the dashboard where the event happened.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;datasourceName&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Name of the data source that was queried.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;datasourceType&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Type of the data source that was queried. For example, &lt;code&gt;prometheus&lt;/code&gt;, &lt;code&gt;elasticsearch&lt;/code&gt;, or &lt;code&gt;loki&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;datasourceId&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;ID of the data source that was queried.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;panelId&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;ID of the panel of the query.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;panelName&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Name of the panel of the query.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;error&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Error returned by the query.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;duration&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;Duration of the query.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;source&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Source of the query. For example, &lt;code&gt;dashboard&lt;/code&gt; or &lt;code&gt;explore&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;orgId&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;ID of the user’s organization.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;orgName&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Name of the user’s organization.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;timestamp&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;The date and time that the request was made, in Coordinated Universal Time (UTC) in &lt;a href=&#34;https://tools.ietf.org/html/rfc3339#section-5.6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;RFC3339&lt;/a&gt; format.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;tokenId&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;ID of the user’s authentication token.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;username&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Name of the Grafana user that made the request.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;userId&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;ID of the Grafana user that made the request.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;totalQueries&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;Number of queries executed for the data request.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;cachedQueries&lt;/code&gt;*&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;Number of fetched queries that came from the cache.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;configuration&#34;&gt;Configuration&lt;/h2&gt;
&lt;p&gt;To export your logs, enable the usage insights feature and &lt;a href=&#34;../../configure-grafana/&#34;&gt;configure&lt;/a&gt; an export location in the configuration file:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;ini&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-ini&#34;&gt;[usage_insights.export]
# Enable the usage insights export feature
enabled = true
# Storage type
storage = loki&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The options for storage type are &lt;code&gt;loki&lt;/code&gt; and &lt;code&gt;logger&lt;/code&gt; (added in Grafana Enterprise 8.2).&lt;/p&gt;
&lt;p&gt;If the storage type is set to &lt;code&gt;loki&lt;/code&gt; you&amp;rsquo;ll need to also configure Grafana
to export to a Loki ingestion server. To do this, you&amp;rsquo;ll need Loki installed.
Refer to &lt;a href=&#34;/docs/loki/latest/installation/&#34;&gt;Install Loki&lt;/a&gt; for instructions
on how to install Loki.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;ini&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-ini&#34;&gt;[usage_insights.export.storage.loki]
# Set the communication protocol to use with Loki (can be grpc or http)
type = grpc
# Set the address for writing logs to Loki (format must be host:port)
url = localhost:9095
# Defaults to true. If true, it establishes a secure connection to Loki
tls = true
# Set the tenant ID for Loki communication, which is disabled by default.
# The tenant ID is required to interact with Loki running in multi-tenant mode.
tenant_id =&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Using &lt;code&gt;logger&lt;/code&gt; will print usage insights to your &lt;a href=&#34;../../configure-grafana/#log&#34;&gt;Grafana server log&lt;/a&gt;.
There is no option for configuring the &lt;code&gt;logger&lt;/code&gt; storage type.&lt;/p&gt;
&lt;h2 id=&#34;visualize-loki-usage-insights-in-grafana&#34;&gt;Visualize Loki usage insights in Grafana&lt;/h2&gt;
&lt;p&gt;If you export logs into Loki, you can build Grafana dashboards to understand your Grafana instance usage.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add Loki as a data source. Refer to &lt;a href=&#34;/tutorials/grafana-fundamentals/#6&#34;&gt;Grafana fundamentals tutorial&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Import one of the following dashboards:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/grafana/dashboards/13785&#34;&gt;Usage insights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/grafana/dashboards/13786&#34;&gt;Usage insights datasource details&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Play with usage insights to understand them:
&lt;ul&gt;
&lt;li&gt;In Explore, you can use the query &lt;code&gt;{datasource=&amp;quot;gdev-loki&amp;quot;,kind=&amp;quot;usage_insights&amp;quot;}&lt;/code&gt; to retrieve all logs related to your &lt;code&gt;gdev-loki&lt;/code&gt; data source.&lt;/li&gt;
&lt;li&gt;In a dashboard, you can build a table panel with the query &lt;code&gt;topk(10, sum by (error) (count_over_time({kind=&amp;quot;usage_insights&amp;quot;, datasource=&amp;quot;gdev-prometheus&amp;quot;} | json | error != &amp;quot;&amp;quot; [$__interval])))&lt;/code&gt; to display the 10 most common errors your users see using the &lt;code&gt;gdev-prometheus&lt;/code&gt; data source.&lt;/li&gt;
&lt;li&gt;In a dashboard, you can build a graph panel with the queries &lt;code&gt;sum by(host) (count_over_time({kind=&amp;quot;usage_insights&amp;quot;} | json | eventName=&amp;quot;data-request&amp;quot; | error != &amp;quot;&amp;quot; [$__interval]))&lt;/code&gt; and &lt;code&gt;sum by(host) (count_over_time({kind=&amp;quot;usage_insights&amp;quot;} | json | eventName=&amp;quot;data-request&amp;quot; | error = &amp;quot;&amp;quot; [$__interval]))&lt;/code&gt; to show the evolution of the data request count over time. Using &lt;code&gt;by (host)&lt;/code&gt; allows you to have more information for each Grafana server you have if you have set up Grafana for &lt;a href=&#34;../../set-up-for-high-availability/&#34;&gt;high availability&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
]]></content><description>&lt;h1 id="export-logs-of-usage-insights">Export logs of usage insights&lt;/h1>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>Available in &lt;a href="../../../introduction/grafana-enterprise/">Grafana Enterprise&lt;/a> version 7.4 and later, and &lt;a href="/docs/grafana-cloud/">Grafana Cloud Pro and Advanced&lt;/a>.&lt;/p>&lt;/blockquote>&lt;/div>
&lt;p>By exporting usage logs to Loki, you can directly query them and create dashboards of the information that matters to you most, such as dashboard errors, most active organizations, or your top-10 most-used queries. This configuration is done for you in Grafana Cloud, with provisioned dashboards. Read about them in the &lt;a href="/docs/grafana-cloud/usage-insights/">Grafana Cloud documentation&lt;/a>.&lt;/p></description></item><item><title>Configure Grafana secret scanning and notifications</title><link>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/secret-scan/</link><pubDate>Fri, 13 Mar 2026 14:43:40 -0400</pubDate><guid>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/secret-scan/</guid><content><![CDATA[&lt;h1 id=&#34;configure-grafana-secret-scanning-and-notifications&#34;&gt;Configure Grafana secret scanning and notifications&lt;/h1&gt;
&lt;p&gt;With Grafana, you can use the GitHub Secret Scanning service to determine if your &lt;a href=&#34;../../../administration/service-accounts/&#34;&gt;service account tokens&lt;/a&gt; have been leaked on GitHub.&lt;/p&gt;
&lt;p&gt;When GitHub Secret Scanning detects a Grafana secret, its hash is stored in Grafana Labs&amp;rsquo; secret scanning service.&lt;/p&gt;
&lt;p&gt;Grafana instances, whether on-premises or on the cloud, can use this service to verify if a token generated by the instance has been made public. This verification is done by comparing the token&amp;rsquo;s hash with the exposed token&amp;rsquo;s hash.&lt;/p&gt;
&lt;p&gt;If the service detects a leaked token, it immediately revokes it, making it useless, and logs the event.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;If the &lt;code&gt;revoke&lt;/code&gt; option is disabled, the service only sends a notification to the configured webhook URL and logs the event. The token is not automatically revoked.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;You can also configure the service to send an outgoing webhook notification to a webhook URL.&lt;/p&gt;
&lt;p&gt;The notification includes a JSON payload that contains the following data:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JSON&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-json&#34;&gt;{
  &amp;#34;alert_uid&amp;#34;: &amp;#34;c9ce50a1-d66b-45e4-9b5d-175766cfc026&amp;#34;,
  &amp;#34;link_to_upstream_details&amp;#34;: &amp;lt;URL to token leak&amp;gt;,
  &amp;#34;message&amp;#34;: &amp;#34;Token of type grafana_service_account_token with name
sa-the-toucans has been publicly exposed in &amp;lt;URL to token leak&amp;gt;.
Grafana has revoked this token&amp;#34;,
  &amp;#34;state&amp;#34;: &amp;#34;alerting&amp;#34;,
  &amp;#34;title&amp;#34;: &amp;#34;SecretScan Alert: Grafana Token leaked&amp;#34;
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Secret scanning is disabled by default. Outgoing connections are made once you enable it.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ensure all your API keys have been migrated to service accounts.
For more information about service account migration, refer to &lt;a href=&#34;../../../administration/api-keys/#migrate-api-keys-to-grafana-service-accounts&#34;&gt;Migrate API keys to Grafana service accounts&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configure-secret-scanning&#34;&gt;Configure secret scanning&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open the Grafana configuration file.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;code&gt;[secretscan]&lt;/code&gt; section, update the following parameters:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;ini&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-ini&#34;&gt;[secretscan]
# Enable secretscan feature
enabled = true

# Whether to revoke the token if a leak is detected or just send a notification
revoke = true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Save the configuration file and restart Grafana.&lt;/p&gt;
&lt;h2 id=&#34;configure-outgoing-webhook-notifications&#34;&gt;Configure outgoing webhook notifications&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create an oncall integration of the type &lt;strong&gt;Webhook&lt;/strong&gt; and set up alerts.
To learn how to create a Grafana OnCall integration, refer to &lt;a href=&#34;/docs/oncall/latest/integrations/webhook/&#34;&gt;Inbound Webhook integrations for Grafana OnCall&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy the webhook URL of the new integration.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the Grafana configuration file.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;code&gt;[secretscan]&lt;/code&gt; section, update the following parameters,
replacing the URL with the webhook URL you copied in step 2.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;ini&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-ini&#34;&gt;[secretscan]
# URL to send a webhook payload in oncall format
oncall_url = https://example.url/integrations/v1/webhook/3a359nib9eweAd9lAAAETVdOx/&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Save the configuration file and restart Grafana.&lt;/p&gt;
]]></content><description>&lt;h1 id="configure-grafana-secret-scanning-and-notifications">Configure Grafana secret scanning and notifications&lt;/h1>
&lt;p>With Grafana, you can use the GitHub Secret Scanning service to determine if your &lt;a href="../../../administration/service-accounts/">service account tokens&lt;/a> have been leaked on GitHub.&lt;/p></description></item><item><title>Configure Team Sync</title><link>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/configure-team-sync/</link><pubDate>Fri, 13 Mar 2026 14:43:40 -0400</pubDate><guid>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/configure-team-sync/</guid><content><![CDATA[&lt;h1 id=&#34;configure-team-sync&#34;&gt;Configure Team Sync&lt;/h1&gt;
&lt;p&gt;Team sync lets you set up synchronization between your auth providers teams and teams in Grafana. This enables LDAP, OAuth, or SAML users who are members of certain teams or groups to automatically be added or removed as members of certain teams in Grafana.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Available in &lt;a href=&#34;../../../introduction/grafana-enterprise/&#34;&gt;Grafana Enterprise&lt;/a&gt; and &lt;a href=&#34;/docs/grafana-cloud/&#34;&gt;Grafana Cloud Advanced&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Grafana keeps track of all synchronized users in teams, and you can see which users have been synchronized in the team members list, see &lt;code&gt;LDAP&lt;/code&gt; label in screenshot.
This mechanism allows Grafana to remove an existing synchronized user from a team when its group membership changes. This mechanism also enables you to manually add a user as member of a team, and it will not be removed when the user signs in. This gives you flexibility to combine LDAP group memberships and Grafana team memberships.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Currently the synchronization only happens when a user logs in, unless LDAP is used with the active background synchronization that was added in Grafana 6.3.&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;clearfix&#34;&gt;&lt;/div&gt;
&lt;h2 id=&#34;supported-providers&#34;&gt;Supported providers&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;../configure-authentication/auth-proxy/#team-sync-enterprise-only&#34;&gt;Auth Proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../configure-authentication/azuread/#team-sync-enterprise-only&#34;&gt;Azure AD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../configure-authentication/github/#configure-team-synchronization&#34;&gt;GitHub OAuth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../configure-authentication/gitlab/#configure-team-synchronization&#34;&gt;GitLab OAuth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../configure-authentication/enhanced-ldap/#ldap-group-synchronization-for-teams&#34;&gt;LDAP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../configure-authentication/okta/#configure-team-synchronization-enterprise-only&#34;&gt;Okta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../configure-authentication/saml/#configure-team-sync&#34;&gt;SAML&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;synchronize-a-grafana-team-with-an-external-group&#34;&gt;Synchronize a Grafana team with an external group&lt;/h2&gt;
&lt;p&gt;If you have already grouped some users into a team, then you can synchronize that team with an external group.&lt;/p&gt;
&lt;figure
    class=&#34;figure-wrapper figure-wrapper__lightbox w-100p docs-image--no-shadow docs-image--right&#34;
    style=&#34;max-width: 600px;&#34;
    itemprop=&#34;associatedMedia&#34;
    itemscope=&#34;&#34;
    itemtype=&#34;http://schema.org/ImageObject&#34;
  &gt;&lt;a
        class=&#34;lightbox-link&#34;
        href=&#34;/static/img/docs/enterprise/team_add_external_group.png&#34;
        itemprop=&#34;contentUrl&#34;
      &gt;&lt;div class=&#34;img-wrapper w-100p h-auto&#34;&gt;&lt;img
          class=&#34;lazyload &#34;
          data-src=&#34;/static/img/docs/enterprise/team_add_external_group.png&#34;data-srcset=&#34;/static/img/docs/enterprise/team_add_external_group.png?w=320 320w, /static/img/docs/enterprise/team_add_external_group.png?w=550 550w, /static/img/docs/enterprise/team_add_external_group.png?w=750 750w, /static/img/docs/enterprise/team_add_external_group.png?w=900 900w, /static/img/docs/enterprise/team_add_external_group.png?w=1040 1040w, /static/img/docs/enterprise/team_add_external_group.png?w=1240 1240w, /static/img/docs/enterprise/team_add_external_group.png?w=1920 1920w&#34;data-sizes=&#34;auto&#34;alt=&#34;&#34;width=&#34;966&#34;height=&#34;347&#34;/&gt;
        &lt;noscript&gt;
          &lt;img
            src=&#34;/static/img/docs/enterprise/team_add_external_group.png&#34;
            alt=&#34;&#34;width=&#34;966&#34;height=&#34;347&#34;class=&#34;docs-image--no-shadow docs-image--right&#34;/&gt;
        &lt;/noscript&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In Grafana, navigate to &lt;strong&gt;Administration &amp;gt; Teams&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select a team.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to the External group sync tab, and click &lt;strong&gt;Add group&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Insert the value of the group you want to sync with. This becomes the Grafana &lt;code&gt;GroupID&lt;/code&gt;.
Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For LDAP, this is the LDAP distinguished name (DN) of LDAP group you want to synchronize with the team.&lt;/li&gt;
&lt;li&gt;For Auth Proxy, this is the value we receive as part of the custom &lt;code&gt;Groups&lt;/code&gt; header.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Add group&lt;/strong&gt; to save.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Group matching is case insensitive.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;ldap-specific-wildcard-matching&#34;&gt;LDAP specific: wildcard matching&lt;/h2&gt;
&lt;p&gt;When using LDAP, you can use a wildcard (*) in the common name attribute (CN)
to match any group in the corresponding Organizational Unit (OU).&lt;/p&gt;
&lt;p&gt;Ex: &lt;code&gt;cn=*,ou=groups,dc=grafana,dc=org&lt;/code&gt; can be matched by &lt;code&gt;cn=users,ou=groups,dc=grafana,dc=org&lt;/code&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="configure-team-sync">Configure Team Sync&lt;/h1>
&lt;p>Team sync lets you set up synchronization between your auth providers teams and teams in Grafana. This enables LDAP, OAuth, or SAML users who are members of certain teams or groups to automatically be added or removed as members of certain teams in Grafana.&lt;/p></description></item><item><title>Configure request security</title><link>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/configure-request-security/</link><pubDate>Fri, 13 Mar 2026 14:43:40 -0400</pubDate><guid>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/configure-request-security/</guid><content><![CDATA[&lt;h1 id=&#34;configure-request-security&#34;&gt;Configure request security&lt;/h1&gt;
&lt;p&gt;Request security allows you to limit requests from the Grafana server by targeting requests generated by users, such as data source metric queries and alert notifications.&lt;/p&gt;
&lt;p&gt;This can be used to limit access to internal systems that the server Grafana runs on can access but that users of Grafana should not be able to access. This feature does not affect traffic from the Grafana users browser.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Available in &lt;a href=&#34;../../../introduction/grafana-enterprise/&#34;&gt;Grafana Enterprise&lt;/a&gt; version 7.4 and later, and &lt;a href=&#34;/docs/grafana-cloud/&#34;&gt;Grafana Cloud Pro and Advanced&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;



&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Although request security works with backend plugins, you can create a backend plugin that bypasses this security.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;ip-and-hostname-blocking&#34;&gt;IP and hostname blocking&lt;/h2&gt;
&lt;p&gt;You can limit requests based on a hostname, an IP address, or both.&lt;/p&gt;
&lt;h3 id=&#34;deny-list&#34;&gt;Deny list&lt;/h3&gt;
&lt;p&gt;Grafana blocks any request to a hostname or IP address on the deny list.&lt;/p&gt;
&lt;h3 id=&#34;allow-list&#34;&gt;Allow list&lt;/h3&gt;
&lt;p&gt;If there is at least one entry on the list, then any request to a hostname or IP address not on the list is denied.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;toml&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-toml&#34;&gt;[security.egress]
# A list of hostnames or IP addresses separated by spaces for which requests are blocked.
host_deny_list = supersecret.internal 192.168.1.10
# a list of hostnames or IP addresses separated by spaces for which requests will be allowed, all other requests will be blocked
host_allow_list = prometheus.internal&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;drop-headers-and-cookies&#34;&gt;Drop headers and cookies&lt;/h2&gt;
&lt;p&gt;You can set a list of cookies or headers that are to be dropped from outgoing requests.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;toml&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-toml&#34;&gt;[security.egress]
# a list of headers that will be stripped from outgoing datasource and alerting requests
header_drop_list = user
# a list of cookies that will be stripped from outgoing datasource requests (case sensitive)
cookie_drop_list = session_id&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="configure-request-security">Configure request security&lt;/h1>
&lt;p>Request security allows you to limit requests from the Grafana server by targeting requests generated by users, such as data source metric queries and alert notifications.&lt;/p></description></item><item><title>Configure security hardening</title><link>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/configure-security-hardening/</link><pubDate>Fri, 13 Mar 2026 14:43:40 -0400</pubDate><guid>https://grafana.com/docs/grafana/v10.0/setup-grafana/configure-security/configure-security-hardening/</guid><content><![CDATA[&lt;h1 id=&#34;configure-security-hardening&#34;&gt;Configure security hardening&lt;/h1&gt;
&lt;p&gt;Security hardening enables you to apply additional security, which can help stop certain vulnerabilities from being exploited by a malicious attacker.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;These settings are available in the &lt;a href=&#34;../../configure-grafana/#configuration-file-location&#34;&gt;grafana.ini configuration file&lt;/a&gt;. To apply changes to the configuration file, restart the Grafana server.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;additional-security-for-cookies&#34;&gt;Additional security for cookies&lt;/h2&gt;
&lt;p&gt;If Grafana uses HTTPS, you can further secure the cookie that the system uses to authenticate access to the web UI. By applying additional security to the cookie, you might mitigate certain attacks that result from an attacker obtaining the cookie value.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Grafana must use HTTPS for the following configurations to work properly.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;add-a-secure-attribute-to-cookies&#34;&gt;Add a secure attribute to cookies&lt;/h3&gt;
&lt;p&gt;To provide mitigation against some MITM attacks, add the &lt;code&gt;Secure&lt;/code&gt; attribute to the cookie that is used to authenticate users. This attribute forces users only to send the cookie over a valid HTTPS secure connection.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;toml&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-toml&#34;&gt;# Set to true if you host Grafana behind HTTPS. The default value is false.
cookie_secure = true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;add-a-samesite-attribute-to-cookies&#34;&gt;Add a SameSite attribute to cookies&lt;/h3&gt;
&lt;p&gt;To mitigate almost all CSRF-attacks, set the &lt;em&gt;cookie_samesite&lt;/em&gt; option to &lt;code&gt;strict&lt;/code&gt;. This setting prevents clients from sending the cookie in requests that are made cross-site, but only from the site that creates the cookie.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;toml&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-toml&#34;&gt;# set cookie SameSite attribute. defaults to `lax`. can be set to &amp;#34;lax&amp;#34;, &amp;#34;strict&amp;#34;, &amp;#34;none&amp;#34; and &amp;#34;disabled&amp;#34;
cookie_samesite = strict&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;By setting the SameSite attribute to &amp;ldquo;strict,&amp;rdquo; only the user clicks within a Grafana instance work. The default option, &amp;ldquo;lax,&amp;rdquo; does not produce this behavior.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;add-a-prefix-to-cookie-names&#34;&gt;Add a prefix to cookie names&lt;/h3&gt;
&lt;p&gt;You can further secure the cookie authentication by adding a &lt;a href=&#34;https://googlechrome.github.io/samples/cookie-prefixes/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Cookie Prefix&lt;/a&gt;. Cookies without a special prefix can be overwritten in a man-in-the-middle attack, even if the site uses HTTPS. A cookie prefix forces clients only to accept the cookie if certain criteria are met.
Add a prefix to the current cookie name with either &lt;code&gt;__Secure-&lt;/code&gt; or &lt;code&gt;__Host-&lt;/code&gt; where the latter provides additional protection by only allowing the cookie to be created from the host that sent the Set-Cookie header.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;toml&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-toml&#34;&gt;# Login cookie name
login_cookie_name = __Host-grafana_session&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;security-headers&#34;&gt;Security headers&lt;/h2&gt;
&lt;p&gt;Grafana includes a few additional headers that you can configure to help mitigate against certain attacks, such as XSS.&lt;/p&gt;
&lt;h3 id=&#34;add-a-content-security-policy&#34;&gt;Add a Content Security Policy&lt;/h3&gt;
&lt;p&gt;A content security policy (CSP) is an HTTP response header that controls how the web browser handles content, such as allowing inline scripts to execute or loading images from certain domains. The default CSP template is already configured to provide sufficient protection against some attacks. This makes it more difficult for attackers to execute arbitrary JavaScript if such a vulnerability is present.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;toml&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-toml&#34;&gt;# Enable adding the Content-Security-Policy header to your requests.
# CSP enables you to control the resources the user agent can load and helps prevent XSS attacks.
content_security_policy = true

# Set the Content Security Policy template that is used when the Content-Security-Policy header is added to your requests.
# $NONCE in the template includes a random nonce.
# $ROOT_PATH is server.root_url without the protocol.
content_security_policy_template = &amp;#34;&amp;#34;&amp;#34;script-src &amp;#39;self&amp;#39; &amp;#39;unsafe-eval&amp;#39; &amp;#39;unsafe-inline&amp;#39; &amp;#39;strict-dynamic&amp;#39; $NONCE;object-src &amp;#39;none&amp;#39;;font-src &amp;#39;self&amp;#39;;style-src &amp;#39;self&amp;#39; &amp;#39;unsafe-inline&amp;#39; blob:;img-src * data:;base-uri &amp;#39;self&amp;#39;;connect-src &amp;#39;self&amp;#39; grafana.com ws://$ROOT_PATH wss://$ROOT_PATH;manifest-src &amp;#39;self&amp;#39;;media-src &amp;#39;none&amp;#39;;form-action &amp;#39;self&amp;#39;;&amp;#34;&amp;#34;&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;enable-trusted-types&#34;&gt;Enable trusted types&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Currently in development. &lt;a href=&#34;https://github.com/w3c/trusted-types/blob/main/explainer.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Trusted types&lt;/a&gt; is an experimental Javascript API with &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types#browser_compatibility&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;limited browser support&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Trusted types reduce the risk of DOM XSS by enforcing developers to sanitize strings that are used in injection sinks, such as setting &lt;code&gt;innerHTML&lt;/code&gt; on an element. Furthermore, when enabling trusted types, these injection sinks need to go through a policy that will sanitize, or leave the string intact and return it as &amp;ldquo;safe&amp;rdquo;. This provides some protection from client side injection vulnerabilities in third party libraries, such as jQuery, Angular and even third party plugins.&lt;/p&gt;
&lt;p&gt;To enable trusted types in enforce mode, where injection sinks are automatically sanitized:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable &lt;code&gt;content_security_policy&lt;/code&gt; in the configuration.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;require-trusted-types-for &#39;script&#39;&lt;/code&gt; to the &lt;code&gt;content_security_policy_template&lt;/code&gt; in the configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To enable trusted types in report mode, where inputs that have not been sanitized with trusted types will be logged to the console:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable &lt;code&gt;content_security_policy_report_only&lt;/code&gt; in the configuration.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;require-trusted-types-for &#39;script&#39;&lt;/code&gt; to the &lt;code&gt;content_security_policy_report_only_template&lt;/code&gt; in the configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As this is a feature currently in development, things may break. If they do, or if you have any other feedback, feel free to &lt;a href=&#34;https://github.com/grafana/grafana/discussions/66823&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;leave a comment&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;additional-security-hardening&#34;&gt;Additional security hardening&lt;/h2&gt;
&lt;p&gt;The Grafana server has several built-in security features that you can opt-in to enhance security. This section describes additional techniques you can use to harden security.&lt;/p&gt;
&lt;h3 id=&#34;hide-the-version-number&#34;&gt;Hide the version number&lt;/h3&gt;
&lt;p&gt;If set to &lt;code&gt;true&lt;/code&gt;, the Grafana server hides the running version number for unauthenticated users. Version numbers might reveal if you are running an outdated and vulnerable version of Grafana.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;toml&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-toml&#34;&gt;# mask the Grafana version number for unauthenticated users
hide_version = true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;enforce-domain-verification&#34;&gt;Enforce domain verification&lt;/h3&gt;
&lt;p&gt;If set to &lt;code&gt;true&lt;/code&gt;, the Grafana server redirects requests that have a Host-header value that is mismatched to the actual domain. This might help to mitigate some DNS rebinding attacks.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;toml&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-toml&#34;&gt;# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
enforce_domain = true&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="configure-security-hardening">Configure security hardening&lt;/h1>
&lt;p>Security hardening enables you to apply additional security, which can help stop certain vulnerabilities from being exploited by a malicious attacker.&lt;/p>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p></description></item></channel></rss>