<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Best practice for application-level data segregation using Policy Boundaries in Gen3 in Dynatrace tips</title>
    <link>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304253#M2156</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.dynatrace.com/t5/user/viewprofilepage/user-id/47376"&gt;@Fin_Ubels&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for correction, I didint noticed that one,&amp;nbsp;&lt;/P&gt;&lt;P&gt;So RUM data (user sessions, user events) lives in Grail storage tables and is controlled the same way as logs, spans, and metrics&amp;nbsp; via storage-level policy statements with WHERE conditions.&lt;/P&gt;&lt;P&gt;The app-engine:apps:execute example I gave controls access to Dynatrace UI apps (e.g., who can open the Digital Experience app, Notebooks, etc.)&amp;nbsp; it has nothing to do with restricting which RUM data a user can see.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Correct policy for RUM Frontend Access Restriction&lt;BR /&gt;For SPORT-FE-coll frontend application, the correct policy statements are:&lt;/P&gt;&lt;P&gt;ALLOW storage:user.sessions:read WHERE storage:frontend.name = "SPORT-FE-coll";&lt;BR /&gt;ALLOW storage:user.events:read WHERE storage:frontend.name = "SPORT-FE-coll";&lt;/P&gt;&lt;P&gt;This restricts the user group to only see sessions and events from that specific frontend consistent with how I'd restrict logs by k8s.namespace.name or spans by dt.security_context.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Sujit&lt;/P&gt;</description>
    <pubDate>Thu, 10 Sep 2026 05:45:27 GMT</pubDate>
    <dc:creator>sujit_k_singh</dc:creator>
    <dc:date>2026-09-10T05:45:27Z</dc:date>
    <item>
      <title>Best practice for application-level data segregation using Policy Boundaries in Gen3</title>
      <link>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304213#M2150</link>
      <description>&lt;P&gt;Hi everyone,&lt;/P&gt;
&lt;P&gt;We're currently reviewing our governance model on Dynatrace Platform (Gen3) and I'd be interested to understand how others are handling application-level data segregation.&lt;/P&gt;
&lt;P&gt;Our goal is to allow different teams to access only the observability data related to their own application perimeter, including:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Logs&lt;/LI&gt;
&lt;LI&gt;Metrics&lt;/LI&gt;
&lt;LI&gt;Traces&lt;/LI&gt;
&lt;LI&gt;Events&lt;/LI&gt;
&lt;LI&gt;Topology entities (services, process groups, hosts, Kubernetes workloads, clusters, etc.)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;In the past, with Management Zones, we were able to build a fairly complete segregation model by combining MZs, permissions, and settings scoping. Since we're now moving towards Gen3 capabilities only, that approach is no longer available and we're looking for the recommended replacement pattern.&lt;/P&gt;
&lt;P&gt;Some of the questions we're trying to answer are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;What is the recommended attribute to build Policy Boundaries on?&lt;/LI&gt;
&lt;LI&gt;Are you using tags, custom attributes, security context, Kubernetes metadata, or something else?&lt;/LI&gt;
&lt;LI&gt;How do you ensure a consistent restriction across logs, traces, metrics, and entities?&lt;/LI&gt;
&lt;LI&gt;Are Segments part of your access-control strategy, or do you use them only for navigation and filtering?&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Ideally, we'd like to achieve a user experience similar to what Management Zones provided in the past: users belonging to a specific application domain should only be able to see data related to that domain, regardless of whether they are looking at logs, traces, metrics, Smartscape, dashboards, investigations, etc.&lt;/P&gt;
&lt;P&gt;I'd be interested to hear how other customers have implemented this and what Dynatrace currently recommends for large shared environments.&lt;/P&gt;
&lt;P&gt;Thanks in advance for any suggestions or real-world examples!&lt;/P&gt;</description>
      <pubDate>Wed, 09 Sep 2026 06:59:28 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304213#M2150</guid>
      <dc:creator>andreaCaria</dc:creator>
      <dc:date>2026-09-09T06:59:28Z</dc:date>
    </item>
    <item>
      <title>Re: Best practice for application-level data segregation using Policy Boundaries in Gen3</title>
      <link>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304231#M2151</link>
      <description>&lt;P&gt;I'd recommend building access control on grail fields and primary tags. This, of course, needs a proper tagging strategy first. Tagging is quite easy with new platforms, but it gets much more complicated for legacy systems, especially shared ones (for example host running multiple different applications for multiple teams, for example a docker swarm cluster). New features such as&amp;nbsp;&lt;A href="https://docs.dynatrace.com/docs/shortlink/ingest-enrichment-settings" target="_blank"&gt;https://docs.dynatrace.com/docs/shortlink/ingest-enrichment-settings&lt;/A&gt;&amp;nbsp;have been introduced recently, which will hopefully make it easier.&amp;nbsp; Nevertheless, the tagging strategy (what to have in the primary tags/fields) highly depends on your organisation. I recommend reusing existing metadata as much as possible (like k8s labels, for example).&lt;BR /&gt;&lt;BR /&gt;Segments are only for data filtering, you can't really build any access restrictions with them. Boundaries are the way (or policies including conditions).&lt;BR /&gt;&lt;BR /&gt;Some further improvements are being developed, especially for segregation of settings.&lt;/P&gt;</description>
      <pubDate>Wed, 09 Sep 2026 06:50:09 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304231#M2151</guid>
      <dc:creator>Julius_Loman</dc:creator>
      <dc:date>2026-09-09T06:50:09Z</dc:date>
    </item>
    <item>
      <title>Re: Best practice for application-level data segregation using Policy Boundaries in Gen3</title>
      <link>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304236#M2152</link>
      <description>&lt;P&gt;Thanks for the explanation.&lt;/P&gt;&lt;P&gt;However, I'm still struggling to see how this would work in practice.&lt;/P&gt;&lt;P&gt;From my tests, Grail tags do not seem to behave like classic auto-tags. For example, I created the following rule:&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;matchesPhrase(k8s.namespace.name, "sport-coll")&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SportColl.png"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/34236i08F47E92AB5245A3/image-size/large?v=v2&amp;amp;px=999" alt="SportColl.png" title="SportColl.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;but nothing appears to have been tagged afterwards: neither the namespace itself, nor traces, logs, or events generated from that namespace.&lt;/P&gt;&lt;P&gt;In addition, as far as I can see, &lt;STRONG&gt;Boundary policies cannot currentl&lt;/STRONG&gt;y be filtered using Grail tags, so I'm not sure this would help us implement access segregation.&lt;/P&gt;&lt;P&gt;Could you share a few practical examples of the approach you described?&lt;/P&gt;&lt;P&gt;Our main requirement is to segregate access based on:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;the monitored Kubernetes namespace (for example sport-coll)&lt;/LI&gt;&lt;LI&gt;the related frontend application, which should be selected by name (for example SPORT-FE-coll)&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;In the classic Management Zone model, it was possible to define a perimeter and automatically include the related entities. In the current Gen3 model, we're trying to understand what the recommended equivalent approach is for ensuring consistent access restrictions across logs, traces, metrics, events, Smartscape entities, and frontend monitoring data.&lt;/P&gt;&lt;P&gt;Any example of Boundary policies, primary fields, or tagging strategies used to achieve this would be very helpful.&lt;/P&gt;</description>
      <pubDate>Wed, 09 Sep 2026 08:30:17 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304236#M2152</guid>
      <dc:creator>andreaCaria</dc:creator>
      <dc:date>2026-09-09T08:30:17Z</dc:date>
    </item>
    <item>
      <title>Re: Best practice for application-level data segregation using Policy Boundaries in Gen3</title>
      <link>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304245#M2153</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://community.dynatrace.com/t5/user/viewprofilepage/user-id/63636"&gt;@andreaCaria&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The recommendation by&amp;nbsp;&lt;a href="https://community.dynatrace.com/t5/user/viewprofilepage/user-id/3364"&gt;@Julius_Loman&lt;/a&gt;&amp;nbsp; to use Grail fields + primary tags + boundaries is the right direction. But&amp;nbsp;&lt;a href="https://community.dynatrace.com/t5/user/viewprofilepage/user-id/63636"&gt;@andreaCaria&lt;/a&gt;&amp;nbsp;your confusion is also valid&amp;nbsp;there's a crucial distinction that explains why your test didn't work.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;STRONG&gt;Why matchesPhrase(k8s.namespace.name, "sport-coll") didn't tag anything&lt;/STRONG&gt;. Grail tags are not classic auto-tags. They work completely differently&lt;BR /&gt;matchesPhrase(k8s.namespace.name, "sport-coll") is DQL query syntax it's for filtering data you're reading, not for creating tags. There is no "tag rule" equivalent in Gen3 that evaluates and stamps entities. Instead, k8s.namespace.name is already present on every log, span, metric, and event that originates from that namespace automatically, with no rule needed.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I would recommend this Segregation Architecture&lt;/P&gt;&lt;P&gt;1. &lt;STRONG&gt;Use k8s.namespace.name directly (Already works, No config needed) -&lt;/STRONG&gt; For Kubernetes-based workloads, k8s.namespace.name is a primary Grail field that is automatically populated on all telemetry. You don't need to create any tagging rule. It's already there.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;STRONG&gt;2.&lt;/STRONG&gt; &lt;STRONG&gt;Build Policy Boundaries on k8s.namespace.name -&lt;/STRONG&gt; for your sport-coll namespace example, create a boundary:storage:k8s.namespace.name = "sport-coll"&lt;BR /&gt;Then attach it to the relevant policies for the team's user group:&lt;BR /&gt;ALLOW storage:logs:read WHERE storage:k8s.namespace.name = "sport-coll";&lt;BR /&gt;ALLOW storage:spans:read WHERE storage:k8s.namespace.name = "sport-coll";&lt;BR /&gt;ALLOW storage:metrics:read WHERE storage:k8s.namespace.name = "sport-coll";&lt;BR /&gt;ALLOW storage:events:read WHERE storage:k8s.namespace.name = "sport-coll";&lt;BR /&gt;ALLOW storage:entities:read WHERE storage:dt.security_context = "sport-coll";&lt;/P&gt;&lt;P&gt;One thing important here,&amp;nbsp; k8s.namespace.name works for logs/spans/metrics/events. For entities/topology, you need dt.security_context&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;STRONG&gt;3. dt.security_context for Entities and shared Infrastructure - &lt;/STRONG&gt;You can do this via Dynakube annotation but i am adding steps here through UI&lt;BR /&gt;OpenPipeline for logs or spans where you need to derive it from content:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Settings → OpenPipeline → Logs → your pipeline&lt;/LI&gt;&lt;LI&gt;Add processor: Set Security Context&lt;/LI&gt;&lt;LI&gt;Condition: matchesValue(k8s.namespace.name, "sport-coll")&lt;/LI&gt;&lt;LI&gt;Value: sport-coll&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Then the entity boundary condition becomes: storage:dt.security_context = "sport-coll"&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;4. If you are planning for frontend application example Frontend Application (SPORT-FE-coll)&lt;/STRONG&gt;&lt;BR /&gt;For RUM/frontend applications, access is controlled at the resource level, not the storage level. The policy statement uses:ALLOW app-engine:apps:execute WHERE app-engine:app-id = "APPLICATION-XXXXXXXX";&lt;/P&gt;&lt;P&gt;Or scope the user group to only see specific application entities via dt.security_context set on the application's underlying process group.&lt;/P&gt;&lt;P&gt;I hope this would help.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Sujit&lt;/P&gt;</description>
      <pubDate>Wed, 09 Sep 2026 22:43:47 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304245#M2153</guid>
      <dc:creator>sujit_k_singh</dc:creator>
      <dc:date>2026-09-09T22:43:47Z</dc:date>
    </item>
    <item>
      <title>Re: Best practice for application-level data segregation using Policy Boundaries in Gen3</title>
      <link>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304246#M2154</link>
      <description>&lt;P&gt;For the purposes of this post, when I'm talking about granting access with the new IAM capabilities I'm going to focus only on the new platform capability. So things like classic cloud integrations or extensions that haven't been updated to a Smartscape on Grail compatible version don't apply here.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Management zones are dead, long live management zones?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;While it is true that management zones are not the way we manage access in the new Dynatrace platform, the way we think about access does not have to change too much. With a management zone, if you included an entity in one you would give access to all data effectively coming from that entity. With the new IAM boundaries, you can achieve a very similar thing.&lt;/P&gt;&lt;P&gt;Lets say you want to give access to everything within a specific K8s namespace.&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;With a management zone, you would create rules that included all entities in that namespace.&lt;/LI&gt;&lt;LI&gt;With the new IAM boundaries, you would create a boundary that restricts storage access to a specific namespace.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The 2 approaches sound very similar, so what is actually different? Management zones as mentioned were entity focused. You would give access to an entity and by extension the data associated with it. New IAM boundaries are record focused. You give access to individual records based on fields attached to them.&lt;/P&gt;&lt;P&gt;With the IAM boundary example above, that boundary would look as simple as:&lt;/P&gt;&lt;P&gt;storage:k8s.namespace.name MATCH ('NamespaceNameHere');&lt;/P&gt;&lt;P&gt;Combine this with a policy that provides access to all tables and this boundary would restrict access to only data where the k8s.namespace.name fields equals&amp;nbsp;NamespaceNameHere.&amp;nbsp;&lt;/P&gt;&lt;P&gt;The last thing to mention here is that you may be thinking "but when I look in the data explorer, none of my metrics have these fields so how will this work?!" and you'd be right! In the classic Dynatrace, things like Service metrics had 1 dimension, the Service entity. However if you hop into a notebook and query the same metric you'll find an explosion of dimensions, and you'll also start to see a pattern of dimensions consistent across many different metrics.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Grail Primary Fields&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;In the new Dynatrace platform there are what we call "&lt;A href="https://docs.dynatrace.com/docs/manage/tags/primary-tags" target="_self"&gt;Primary Grail Fields&lt;/A&gt;" and these are a set of fields consistent across all data ingested into Dynatrace. The best way I like to view them is through the IAM policy reference doc&amp;nbsp;&lt;A href="https://docs.dynatrace.com/docs/shortlink/iam-policystatements#storage" target="_blank" rel="noopener"&gt;https://docs.dynatrace.com/docs/shortlink/iam-policystatements#storage&lt;/A&gt;&amp;nbsp;which is a very very dry read. It is however my best friend when it comes to navigating the murky IAM waters. The link I provided takes you to the section specific to storage, and what you will find there is that the conditions you can apply to access all of the different storage tables are very similar. Some have different fields you can use but most, if not all, share a base set of fields. They are:&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;storage:bucket-name,&amp;nbsp;storage:k8s.namespace.name,&amp;nbsp;storage:k8s.cluster.name,&amp;nbsp;storage:host.name,&amp;nbsp;storage:dt.host_group.id,&amp;nbsp;storage:dt.security_context,&amp;nbsp;storage:gcp.project.id,&amp;nbsp;storage:aws.account.id,&amp;nbsp;storage:azure.subscription,&amp;nbsp;storage:azure.resource.group,&amp;nbsp;storage:frontend.name&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Where possible Dynatrace will attempt to enrich all data ingested with these fields. This means that you can use these fields to build out your boundaries. These fields are great for building out boundaries as they often already represent boundaries within an environment.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Now, there are some exceptions, for example Extensions don't just magically get these fields filled in, however when setting up an extension configuration you are prompted with the ability to provide values for these fields. And with synthetics, they rely on the security context field.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;How I approach IAM&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;The first thing I do when building out an IAM approach is nail down a host group and &lt;A href="https://docs.dynatrace.com/docs/manage/tags/tags-security-context" target="_self"&gt;security context&lt;/A&gt; naming structure. If you can develop a solid security context structure, this can solve 99% of access problems. For example, if I build a security context structure that is something like:&lt;/P&gt;&lt;P&gt;{app}-{stage}-{function}&lt;/P&gt;&lt;P&gt;When filled in that might look like:&lt;/P&gt;&lt;P&gt;Store-Production-Cart&lt;BR /&gt;Store-Staging-Database&lt;BR /&gt;API-Dev-Gateway&lt;/P&gt;&lt;P&gt;So if this security context is applied on my OneAgents, in my Kubernetes environments, in my cloud, I can build boundaries such as:&lt;/P&gt;&lt;P&gt;storage:dt.security_context MATCH ('API-*'); This gives access to the whole API app&lt;BR /&gt;storage:dt.security_context MATCH ('Store-Production-*'); This gives access to the Store Production environment&lt;/P&gt;&lt;P&gt;For small environments, or ones that aren't very complex, you can get away with not using the security context field at all and instead rely solely on primary grail fields. Regardless, once I have that naming convention set the approach I currently use is to build a matrix of the teams and their boundaries. It looks something like:&lt;/P&gt;&lt;TABLE border="1" width="100.00000000000001%"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="14.285714285714286%"&gt;Team Name&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;Azure Sub&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;AWS account&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;Host group&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;K8s cluster&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;K8s namespace&lt;/TD&gt;&lt;TD width="7.142857142857143%"&gt;SecurityContext&lt;/TD&gt;&lt;TD width="7.142857142857143%"&gt;Frontend&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="14.285714285714286%"&gt;Store Ops&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;12345&lt;BR /&gt;67890&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;N/A&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;Store-*&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;Store-Cluster-*&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;N/A&lt;/TD&gt;&lt;TD width="7.142857142857143%"&gt;Store-*&lt;/TD&gt;&lt;TD width="7.142857142857143%"&gt;Store-*&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="14.285714285714286%"&gt;Store Dev&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;67890&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;N/A&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;Store-Dev-*&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;Store-Cluster-Dev&lt;/TD&gt;&lt;TD width="14.285714285714286%"&gt;N/A&lt;/TD&gt;&lt;TD width="7.142857142857143%"&gt;Store-Dev-*&lt;/TD&gt;&lt;TD width="7.142857142857143%"&gt;Store-Dev&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;You may not need to list out all teams, as some may have overlap, or the access restrictions may not need to be so strict. The point of this matrix though is to very simply go through and define what it is each team is allowed to see. We can then very simply turn each of these columns into a boundary.&lt;/P&gt;&lt;P&gt;If we take Store Ops as an example we would create 5 boundaries, one for their subscriptions, one for their host groups, one for their clusters, one for their security contexts and one for their frontend.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;The original questions&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;What is the recommended attribute to build Policy Boundaries on?&lt;BR /&gt;&lt;STRONG&gt;Grail primary fields&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;Are you using tags, custom attributes, security context, Kubernetes metadata, or something else?&lt;BR /&gt;&lt;STRONG&gt;If you look at the IAM policy reference doc I shared, at the moment only the fields listed there can be used for access control. So tags and custom attributes can not. However they are incredibly useful for segments so don't abandon them.&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;How do you ensure a consistent restriction across logs, traces, metrics, and entities?&lt;BR /&gt;&lt;STRONG&gt;Since Grail primary fields are consistent across all data types, this is how I ensure consistency&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;Are Segments part of your access-control strategy, or do you use them only for navigation and filtering?&lt;BR /&gt;&lt;STRONG&gt;They are not part of my access control strategies as they cannot be used for access control. However if you build out solid naming conventions and consistently apply primary grail tags across the environment, segments can be a much more powerful way of doing filtering vs management zones. There are default set based on the primary grail fields to get you started!&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I think the above is a great way to approach IAM. You may find you need to control access to specific metrics, or all data except spans, or even limit access to specific fields. These are also all possible now, but before diving into the crazy convoluted topics, building that foundation is so important. It prevents things from getting out of hand.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hopefully the above helps!&lt;/P&gt;</description>
      <pubDate>Thu, 10 Sep 2026 06:15:44 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304246#M2154</guid>
      <dc:creator>Fin_Ubels</dc:creator>
      <dc:date>2026-09-10T06:15:44Z</dc:date>
    </item>
    <item>
      <title>Re: Best practice for application-level data segregation using Policy Boundaries in Gen3</title>
      <link>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304251#M2155</link>
      <description>&lt;P&gt;Hey&amp;nbsp;&lt;a href="https://community.dynatrace.com/t5/user/viewprofilepage/user-id/67382"&gt;@sujit_k_singh&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regarding your point 4, for RUM access it is still controlled at the storage level. You can find out more in these docs&amp;nbsp;&lt;A href="https://docs.dynatrace.com/docs/shortlink/rum-on-grail-permissions" target="_blank"&gt;https://docs.dynatrace.com/docs/shortlink/rum-on-grail-permissions&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The example you provided is for controlling access to the different "apps" or views we have in the Dynatrace platform, such as the infra and ops app, or the notebooks app.&lt;/P&gt;</description>
      <pubDate>Thu, 10 Sep 2026 04:23:15 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304251#M2155</guid>
      <dc:creator>Fin_Ubels</dc:creator>
      <dc:date>2026-09-10T04:23:15Z</dc:date>
    </item>
    <item>
      <title>Re: Best practice for application-level data segregation using Policy Boundaries in Gen3</title>
      <link>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304253#M2156</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.dynatrace.com/t5/user/viewprofilepage/user-id/47376"&gt;@Fin_Ubels&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for correction, I didint noticed that one,&amp;nbsp;&lt;/P&gt;&lt;P&gt;So RUM data (user sessions, user events) lives in Grail storage tables and is controlled the same way as logs, spans, and metrics&amp;nbsp; via storage-level policy statements with WHERE conditions.&lt;/P&gt;&lt;P&gt;The app-engine:apps:execute example I gave controls access to Dynatrace UI apps (e.g., who can open the Digital Experience app, Notebooks, etc.)&amp;nbsp; it has nothing to do with restricting which RUM data a user can see.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Correct policy for RUM Frontend Access Restriction&lt;BR /&gt;For SPORT-FE-coll frontend application, the correct policy statements are:&lt;/P&gt;&lt;P&gt;ALLOW storage:user.sessions:read WHERE storage:frontend.name = "SPORT-FE-coll";&lt;BR /&gt;ALLOW storage:user.events:read WHERE storage:frontend.name = "SPORT-FE-coll";&lt;/P&gt;&lt;P&gt;This restricts the user group to only see sessions and events from that specific frontend consistent with how I'd restrict logs by k8s.namespace.name or spans by dt.security_context.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Sujit&lt;/P&gt;</description>
      <pubDate>Thu, 10 Sep 2026 05:45:27 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304253#M2156</guid>
      <dc:creator>sujit_k_singh</dc:creator>
      <dc:date>2026-09-10T05:45:27Z</dc:date>
    </item>
    <item>
      <title>Re: Best practice for application-level data segregation using Policy Boundaries in Gen3</title>
      <link>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304265#M2157</link>
      <description>&lt;P&gt;Thanks for the clarification. I did some additional testing and I'm still struggling to understand how boundaries are evaluated when multiple boundaries are assigned to the same policy.&lt;/P&gt;&lt;H3&gt;Scenario 1: Boundary based on dt.security_context&lt;/H3&gt;&lt;P&gt;I created a boundary using:&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;storage:dt.security_context = "crm-noprod";&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="BolicySecurity.png"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/34238iC5122DF1C7D48B97/image-size/medium?v=v2&amp;amp;px=400" alt="BolicySecurity.png" title="BolicySecurity.png" /&gt;&lt;/span&gt;&lt;P&gt; &lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;This seems to work correctly in some areas. For example, in &lt;STRONG&gt;Explorer Classic&lt;/STRONG&gt; I only see the 4 hosts belonging to the crm-noprod host group.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CRM-4Host.png"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/34241i881DF3CF5A3EC427/image-size/medium?v=v2&amp;amp;px=400" alt="CRM-4Host.png" title="CRM-4Host.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;However, the behavior is not consistent across the platform:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;In &lt;STRONG&gt;Explorer New&lt;/STRONG&gt;, the same user cannot see those hosts at all.&lt;/LI&gt;&lt;LI&gt;A similar inconsistency can be observed on the Services pages.&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NoHostExplorerNew.png"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/34239i1605C3FBDBAC3719/image-size/medium?v=v2&amp;amp;px=400" alt="NoHostExplorerNew.png" title="NoHostExplorerNew.png" /&gt;&lt;/span&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;This makes me wonder whether dt.security_context is supported differently depending on the application/view being used.&lt;/P&gt;&lt;H3&gt;Scenario 2: Combining Host and Frontend boundaries&lt;/H3&gt;&lt;P&gt;To allow visibility of specific Frontend applications, I added a second boundary:&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;storage:frontend.name in ('crmha.test.siae', 'crm-coll');&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;and assigned both boundaries to the same policy.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PolicyFE.png"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/34242i918A02B8334B0D1E/image-size/medium?v=v2&amp;amp;px=400" alt="PolicyFE.png" title="PolicyFE.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PolicyBoundary.png"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/34243iA97FFA4EBB4FF4DB/image-size/medium?v=v2&amp;amp;px=400" alt="PolicyBoundary.png" title="PolicyBoundary.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;At this point the host filtering breaks completely:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Frontend visibility works as expected.&lt;/LI&gt;&lt;LI&gt;Host visibility no longer remains restricted to the crm-noprod scope.&lt;/LI&gt;&lt;LI&gt;The user can see all hosts in the environment instead of only the hosts matching the dt.security_context.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="HostFilterNotWorking.png"&gt;&lt;img src="https://community.dynatrace.com/t5/image/serverpage/image-id/34244i643092AEA7C16B9B/image-size/medium?v=v2&amp;amp;px=400" alt="HostFilterNotWorking.png" title="HostFilterNotWorking.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;Based on this behavior, I am not sure whether multiple boundaries are evaluated as a union (OR), an intersection (AND), or whether entity type specific rules are applied behind the scenes.&lt;/P&gt;&lt;P&gt;Could you clarify:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Is the different behavior between Explorer Classic and Explorer New expected when using dt.security_context?&lt;/LI&gt;&lt;LI&gt;How are multiple boundaries actually evaluated when they target different entity types (Hosts vs Frontends)?&lt;/LI&gt;&lt;LI&gt;Is the observed host visibility expansion expected when combining these two boundaries, or could this indicate a limitation/bug in the current implementation?&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 10 Sep 2026 08:24:23 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304265#M2157</guid>
      <dc:creator>andreaCaria</dc:creator>
      <dc:date>2026-09-10T08:24:23Z</dc:date>
    </item>
    <item>
      <title>Re: Best practice for application-level data segregation using Policy Boundaries in Gen3</title>
      <link>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304268#M2158</link>
      <description>&lt;OL&gt;&lt;LI&gt;Yes, explorer classic relies on the classic Smartscape and combines it with metrics, logs and events on Grail. This makes it a bit funny when managing access.&lt;/LI&gt;&lt;LI&gt;If you have 2 boundaries, they are effectively combined together using OR. You can find more info here&amp;nbsp;&lt;A href="https://docs.dynatrace.com/docs/manage/identity-access-management/permission-management/manage-user-permissions-policies/iam-policy-boundaries#apply-boundary" target="_blank"&gt;Policy boundaries — Dynatrace Docs&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;What you are seeing is an unfortunate side effect of managing access to the storage:entities:read permission which is for the classic Smartscape. If you attempt to use a boundary that is incompatible with that permission, it produces the result you see where people can see all entities. It is mentioned in the above doc.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;To resolve the first part of the above and allow your boundary to work in the new explorers I would ALWAYS (I can't think of a scenario where I have deviated from this personally) use the MATCH operator instead of = IN or STARTSWITH. This is because these primary fields are in fact often arrays! A record can have multiple security contexts. So = IN and STARTSWITH can have issues as they don't work with an array (maybe IN does but MATCH is just a better IN).&amp;nbsp;&lt;/P&gt;&lt;P&gt;In your example:&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;storage:dt.security_context = "crm-noprod";&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;becomes&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;storage:dt.security_context MATCH ("crm-noprod");&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;MATCH also supports wild cards, so you could do:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;storage:dt.security_context MATCH ("crm-*");&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;to give access to everything that has a security context starting with crm-&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;If you want to continue managing access to the classic Smartscape, the solution I have found is creating a sperate policy for&amp;nbsp;storage:entities:read and creating specific boundaries that DON'T use the MATCH operator for it. As is mentioned in the IAM reference, it only supports = IN and STARTSWITH and ONLY supports security context.&amp;nbsp;&lt;A href="https://docs.dynatrace.com/docs/shortlink/iam-policystatements#storage-entities-read" target="_blank"&gt;https://docs.dynatrace.com/docs/shortlink/iam-policystatements#storage-entities-read&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 10 Sep 2026 08:54:21 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Dynatrace-tips/Best-practice-for-application-level-data-segregation-using/m-p/304268#M2158</guid>
      <dc:creator>Fin_Ubels</dc:creator>
      <dc:date>2026-09-10T08:54:21Z</dc:date>
    </item>
  </channel>
</rss>

