<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>tag:blogger.com,1999:blog-2627747309936375689</id><updated>2026-10-07T07:00:20.041-05:00</updated><category term="Adobe Experience Manager"/><category term="Oracle SOA Suite"/><category term="SOA"/><category term="CQ5"/><category term="Others"/><category term="Java"/><category term="Weblogic"/><category term="General"/><category term="OSB"/><category term="Oracle Service Bus"/><category term="WLST"/><category term="AEM"/><category term="Videos"/><category term="JDeveloper"/><category term="SOA Migration"/><category term="BAM"/><category term="Adobe S&amp;P"/><category term="DOJO"/><category term="Oracle"/><category term="SFDC-Integration"/><category term="ADF"/><category term="Adobe Target"/><category term="AI"/><category term="OSR"/><category term="SOA 12C"/><category term="Spring"/><category term="eclipse"/><category term="Adobe CQ5"/><category term="XSLT"/><category term="Hybris"/><category term="MDS"/><category term="Maven"/><category term="SOA-Adapters"/><category term="Apache"/><category term="BPEL"/><category term="Azure AI"/><category term="Azure AI Service"/><category term="Coveo"/><category term="Dispatcher"/><category term="Gen AI"/><category term="JSF"/><category term="Tomcat"/><category term="Web Development"/><category term="spring-ws"/><category term="AEP"/><category term="AWS"/><category term="Authentication"/><category term="AzureAD"/><category term="BPM"/><category term="CyberSecurity"/><category term="GenAI"/><category term="HTML"/><category term="HTTPD"/><category term="Hibernate"/><category term="IdentityManagement"/><category term="Indexing"/><category term="JAX-WS"/><category term="JSON"/><category term="MicrosoftEntra"/><category term="NodeJS"/><category term="OER"/><category term="OpenSSL"/><category term="REST"/><category term="SAML"/><category term="SSO"/><category term="Search"/><category term="Security"/><category term="Siebel"/><category term="Soap UI"/><category term="Website Testing"/><category term="XPath"/><category term="iBATIS"/><title type="text">Tech Mastery: Deep Dives into AEM, Cloud Technologies, AI Innovations, and Advanced Marketing Strate</title><subtitle type="html">Welcome to Tech Mastery, your expert source for insights into technology and digital strategy. Explore topics like Adobe Experience Manager, AWS, Azure, generative AI, and advanced marketing strategies. Delve into MACH architecture, Jamstack, modern software practices, DevOps, and SEO. Our blog is ideal for tech professionals and enthusiasts eager to stay ahead in digital innovations, from Content Management to Digital Asset Management and beyond.</subtitle><link href="http://www.albinsblog.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/2627747309936375689/posts/default?max-results=3&amp;redirect=false" rel="self" type="application/atom+xml"/><link href="http://www.albinsblog.com/" rel="alternate" type="text/html"/><link href="http://pubsubhubbub.appspot.com/" rel="hub"/><link href="http://www.blogger.com/feeds/2627747309936375689/posts/default?start-index=4&amp;max-results=3&amp;redirect=false" rel="next" type="application/atom+xml"/><author><name>Tech Forum</name><uri>http://www.blogger.com/profile/06872295047306188060</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><generator uri="http://www.blogger.com" version="7.00">Blogger</generator><openSearch:totalResults>681</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>3</openSearch:itemsPerPage><xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><entry><id>tag:blogger.com,1999:blog-2627747309936375689.post-1753777519236883806</id><published>2026-07-21T10:23:14.194-05:00</published><updated>2026-07-21T10:23:14.194-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Authentication"/><category scheme="http://www.blogger.com/atom/ns#" term="AzureAD"/><category scheme="http://www.blogger.com/atom/ns#" term="CyberSecurity"/><category scheme="http://www.blogger.com/atom/ns#" term="IdentityManagement"/><category scheme="http://www.blogger.com/atom/ns#" term="MicrosoftEntra"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenSSL"/><category scheme="http://www.blogger.com/atom/ns#" term="SAML"/><category scheme="http://www.blogger.com/atom/ns#" term="SSO"/><title type="text">Certificate vs. Certificate Fingerprint in SSO – A Common Point of Confusion</title><content type="html">&lt;p&gt;&amp;nbsp;While configuring SSO recently, I noticed a common question: &lt;strong data-end="290" data-start="193"&gt;Why do some applications ask for a certificate fingerprint instead of the actual certificate?&lt;/strong&gt;&lt;/p&gt;
&lt;p data-end="319" data-start="292"&gt;Here's a quick explanation:&lt;/p&gt;
&lt;p data-end="359" data-start="321"&gt;&#128313; &lt;strong data-end="359" data-start="324"&gt;Certificate (X.509 Certificate)&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-end="486" data-start="360"&gt;
&lt;li data-end="434" data-section-id="kfi2fj" data-start="360"&gt;
Contains the public key, issuer, validity period, and digital signature.
&lt;/li&gt;
&lt;li data-end="486" data-section-id="1l1pykk" data-start="435"&gt;
Used to verify SAML assertions or JWT signatures.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end="531" data-start="488"&gt;&#128313; &lt;strong data-end="531" data-start="491"&gt;Certificate Fingerprint (Thumbprint)&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-end="704" data-start="532"&gt;
&lt;li data-end="611" data-section-id="z0mhhi" data-start="532"&gt;
A cryptographic hash of the certificate (typically &lt;strong data-end="594" data-start="585"&gt;SHA-1&lt;/strong&gt; or &lt;strong data-end="609" data-start="598"&gt;SHA-256&lt;/strong&gt;).
&lt;/li&gt;
&lt;li data-end="660" data-section-id="1hw6jsd" data-start="612"&gt;
Used as a unique identifier for a certificate.
&lt;/li&gt;
&lt;li data-end="704" data-section-id="vfifib" data-start="661"&gt;
Much smaller than the certificate itself.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end="906" data-start="706"&gt;Some SSO applications require you to &lt;strong data-end="774" data-start="743"&gt;upload the full certificate&lt;/strong&gt;, while others only ask for the &lt;strong data-end="833" data-start="806"&gt;certificate fingerprint&lt;/strong&gt;. If a fingerprint is required, you can generate it from the certificate:&lt;/p&gt;
&lt;pre class="overflow-visible! px-0!" data-end="1058" data-start="908"&gt;&lt;div class="relative w-full mt-4 mb-1"&gt;&lt;div class=""&gt;&lt;div class="contents"&gt;&lt;div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"&gt;&lt;div class="relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback"&gt;&lt;div class="pointer-events-none absolute inset-x-4 top-12 bottom-4"&gt;&lt;div class="pointer-events-none sticky z-40 shrink-0 z-1!"&gt;&lt;div class="sticky bg-token-border-light"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="relative"&gt;&lt;div class="h-full min-h-0 min-w-0"&gt;&lt;div class="h-full min-h-0 min-w-0"&gt;&lt;div class=""&gt;&lt;div class="relative"&gt;&lt;div class=""&gt;&lt;div class="relative z-0 flex max-w-full"&gt;&lt;div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="code-block-viewer"&gt;&lt;div class="cm-scroller"&gt;&lt;pre class="cm-content q9tKkq_readonly m-0"&gt;&lt;code&gt;&lt;span class="ͼe"&gt;# SHA-1&lt;/span&gt;
&lt;span class="ͼl"&gt;openssl&lt;/span&gt; x509 &lt;span class="ͼn"&gt;-in&lt;/span&gt; certificate.pem &lt;span class="ͼn"&gt;-noout&lt;/span&gt; &lt;span class="ͼn"&gt;-fingerprint&lt;/span&gt; &lt;span class="ͼn"&gt;-sha1&lt;/span&gt;

&lt;span class="ͼe"&gt;# SHA-256&lt;/span&gt;
&lt;span class="ͼl"&gt;openssl&lt;/span&gt; x509 &lt;span class="ͼn"&gt;-in&lt;/span&gt; certificate.pem &lt;span class="ͼn"&gt;-noout&lt;/span&gt; &lt;span class="ͼn"&gt;-fingerprint&lt;/span&gt; &lt;span class="ͼn"&gt;-sha256&lt;/span&gt;&lt;/code&gt;&lt;/pre&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 class=""&gt;&lt;div class=""&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;/pre&gt;
&lt;p data-end="1223" data-start="1060"&gt;If you're using &lt;strong data-end="1109" data-start="1076"&gt;Microsoft Entra ID (Azure AD)&lt;/strong&gt;, you can download the signing certificate from the Federation Metadata URL and generate the required fingerprint.&lt;/p&gt;
&lt;p data-end="1457" data-start="1225"&gt;&#128161; &lt;strong data-end="1245" data-start="1228"&gt;Key takeaway:&lt;/strong&gt; The fingerprint is &lt;strong data-end="1297" data-start="1265"&gt;derived from the certificate&lt;/strong&gt;—it isn't a different certificate. Whether you provide the certificate or its fingerprint depends on what the Service Provider expects during SSO configuration.&lt;/p&gt;
&lt;p data-end="1614" data-start="1459"&gt;Have you come across applications that still require only the SHA-1 fingerprint instead of the full certificate? I'd be interested to hear your experience.&lt;/p&gt;</content><link href="http://www.albinsblog.com/feeds/1753777519236883806/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.albinsblog.com/2026/07/certificate-vs-certificate-fingerprint.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/2627747309936375689/posts/default/1753777519236883806" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/2627747309936375689/posts/default/1753777519236883806" rel="self" type="application/atom+xml"/><link href="http://www.albinsblog.com/2026/07/certificate-vs-certificate-fingerprint.html" rel="alternate" title="Certificate vs. Certificate Fingerprint in SSO – A Common Point of Confusion" type="text/html"/><author><name>Tech Forum</name><uri>http://www.blogger.com/profile/06872295047306188060</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2627747309936375689.post-900639594069437669</id><published>2026-06-30T20:58:48.336-05:00</published><updated>2026-06-30T20:58:48.337-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AEP"/><title type="text">A Layered Access Management Model for Adobe Experience Platform (AEP)</title><content type="html">&lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;A Layered Access Management Model for Adobe Experience Platform (AEP)&lt;/h1&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;p style="color: #6b7280; font-size: 14px; font-weight: 400; margin: 0px 0px 28px;"&gt;Scalable, governable RBAC across AEP, Customer Journey Analytics, and Adobe Data Collection&lt;/p&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;As Adobe Experience Platform (AEP) implementations grow across business units, regions, and use cases, managing user access can quickly become complex. One of the most common challenges is providing the right level of access while maintaining governance, security, and operational simplicity.&lt;/p&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;During a recent AEP implementation, I adopted a layered access management model that leverages Adobe's native capabilities while keeping the architecture scalable and easy to maintain. Rather than creating numerous Product Profiles for every business role, the model separates &lt;strong&gt;identity&lt;/strong&gt;, &lt;strong&gt;product entitlement&lt;/strong&gt;, and &lt;strong&gt;platform authorization&lt;/strong&gt;.&lt;/p&gt;&lt;div style="background: rgb(245, 248, 255); border-radius: 10px; border: 1px solid rgb(219, 228, 240); color: #1a1a1a; font-size: medium; font-weight: 400; margin: 22px 0px; padding: 16px 20px;"&gt;&lt;div style="color: #0b1f3a; font-weight: 700; margin-bottom: 8px;"&gt;In short&lt;/div&gt;&lt;p style="margin: 0px 0px 10px;"&gt;Assign people to &lt;strong&gt;User Groups&lt;/strong&gt; (who they are). Each group grants access along two &lt;em&gt;parallel&lt;/em&gt; tracks: &lt;strong&gt;Product Profiles&lt;/strong&gt; (which Adobe apps — and these &lt;em&gt;fully&lt;/em&gt; govern Customer Journey Analytics and Data Collection) and &lt;strong&gt;AEP Roles&lt;/strong&gt; (what a user can do on platform resources, scoped by sandbox). The two tracks meet in only a couple of narrow spots — for example, a CJA administrator managing Data Management needs a minimal AEP Role. Keep each layer doing one job and you get least-privilege access without a sprawl of Product Profiles.&lt;/p&gt;&lt;p style="color: #6b7280; font-size: 14px; margin: 0px;"&gt;The group, profile, and role names below are &lt;em&gt;illustrative&lt;/em&gt; — swap in your own naming convention as you adapt the model.&lt;/p&gt;&lt;/div&gt;&lt;/h1&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;Access Management Architecture&lt;/h2&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/a/AVvXsEjUfEkOVIIkotssMQef-CQRrvSlGoFDWfmPg1rIV2dxJuJ1DJUHLb9-oplSlN1lmf6icI3p4wFCMkR0LQlbncUVaJYYPFueWQj9pb3e3q9MkRQzBsSLlWToOtJ-OYArgTpJMy29BEVQbGHELlhEZ0T_a7DOVfIWsSRAfvTc-Gsn-ulvD3X5Y2jq3p8fa6w2" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" data-original-height="587" data-original-width="810" height="464" src="https://blogger.googleusercontent.com/img/a/AVvXsEjUfEkOVIIkotssMQef-CQRrvSlGoFDWfmPg1rIV2dxJuJ1DJUHLb9-oplSlN1lmf6icI3p4wFCMkR0LQlbncUVaJYYPFueWQj9pb3e3q9MkRQzBsSLlWToOtJ-OYArgTpJMy29BEVQbGHELlhEZ0T_a7DOVfIWsSRAfvTc-Gsn-ulvD3X5Y2jq3p8fa6w2=w640-h464" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Access Management Principles&lt;/h2&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;Before diving into the layers, it helps to establish the ground rules the model operates by:&lt;/p&gt;&lt;ul style="color: #1a1a1a; font-size: medium; font-weight: 400; padding-left: 22px;"&gt;&lt;li style="margin-bottom: 6px;"&gt;User access is provisioned through &lt;strong&gt;Adobe User Groups&lt;/strong&gt; — the only object you assign people to.&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;Each User Group is mapped to one or more &lt;strong&gt;Product Profiles&lt;/strong&gt; and/or &lt;strong&gt;AEP Roles&lt;/strong&gt; based on business responsibilities.&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;Users may belong to &lt;strong&gt;multiple User Groups&lt;/strong&gt; as required by their job functions.&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;&lt;strong&gt;Product Profiles&lt;/strong&gt; govern access to Adobe applications and their capabilities. &lt;strong&gt;Customer Journey Analytics and Data Collection are managed almost entirely through Product Profiles&lt;/strong&gt; — they need an AEP Role only for the two capabilities that reach into platform resources (CJA Data Management and Data Collection datastreams).&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;&lt;strong&gt;AEP Roles&lt;/strong&gt; govern access to Adobe Experience Platform resources only — sandboxes, datasets, schemas, identities, and other platform capabilities.&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;&lt;strong&gt;Sandbox access is controlled through AEP Role assignments.&lt;/strong&gt; Administrative capabilities (Manage Sandboxes, Manage Packages, Reset Sandboxes) are restricted to designated platform administrator roles.&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;Access follows the &lt;strong&gt;principle of least privilege&lt;/strong&gt; — only the permissions required to perform a responsibility.&lt;/li&gt;&lt;li&gt;Production administrative access is restricted to authorized platform administrators, while development activities are performed within designated &lt;strong&gt;non-production sandboxes&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div style="background: rgb(255, 251, 235); border-left: 4px solid rgb(245, 158, 11); border-radius: 0px 8px 8px 0px; color: #1a1a1a; font-size: medium; font-weight: 400; margin: 18px 0px; padding: 14px 18px;"&gt;&lt;strong&gt;Permissions are additive.&lt;/strong&gt; When a user belongs to multiple User Groups, their effective access is the &lt;em&gt;union&lt;/em&gt; of all permissions granted through the associated Product Profiles and AEP Roles. Design groups so overlapping membership never accidentally escalates privilege.&lt;/div&gt;&lt;/h1&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;Layer 1 – Adobe Admin Console User Groups&lt;/h2&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;User Groups represent &lt;strong&gt;business personas&lt;/strong&gt;, not technical permissions. Examples include:&lt;/p&gt;&lt;ul style="color: #1a1a1a; font-size: medium; font-weight: 400; padding-left: 22px;"&gt;&lt;li&gt;Platform Administrators&lt;/li&gt;&lt;li&gt;Platform Developers&lt;/li&gt;&lt;li&gt;Data Engineers&lt;/li&gt;&lt;li&gt;Data Analysts&lt;/li&gt;&lt;li&gt;Customer Journey Analytics Administrators&lt;/li&gt;&lt;li&gt;Customer Journey Analytics Business Users&lt;/li&gt;&lt;li&gt;Data Collection Administrators&lt;/li&gt;&lt;li&gt;Data Collection Developers&lt;/li&gt;&lt;/ul&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;This simplifies onboarding and offboarding, since users are assigned to business groups instead of individual permissions.&lt;/p&gt;&lt;/h1&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;Layer 2 – Adobe Product Profiles&lt;/h2&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;Product Profiles determine which Adobe applications a user can access. Instead of creating Product Profiles for every business role, I recommend a &lt;strong&gt;hybrid approach&lt;/strong&gt;.&lt;/p&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;For &lt;strong&gt;Customer Journey Analytics&lt;/strong&gt; and &lt;strong&gt;Adobe Data Collection&lt;/strong&gt;, the Product Profile is almost the entire access model — capabilities within those applications (Connections, Data Views, tags, rules, and so on) are controlled by the profile itself.&lt;/p&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;There are two narrow exceptions: the capabilities that reach into AEP platform resources. Managing &lt;strong&gt;CJA Data Management&lt;/strong&gt; (Connections &amp;amp; Data Views) and creating &lt;strong&gt;Data Collection datastreams&lt;/strong&gt; each require a small, dedicated AEP Role &lt;em&gt;in addition to&lt;/em&gt; the Product Profile, because both write to or read from platform objects (datasets, schemas, sandboxes). Everything else in these two applications is profile-governed.&lt;/p&gt;&lt;table style="border-collapse: collapse; font-size: 15px; margin: 16px 0px; width: 800px;"&gt;&lt;thead&gt;&lt;tr style="background: rgb(11, 31, 58); color: white;"&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;Product&lt;/th&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;Product Profile&lt;/th&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;Type&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Adobe Experience Platform&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;AEP-Default-All-Users&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;OOTB&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Customer Journey Analytics&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;CJA Administrator&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Custom&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Customer Journey Analytics&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;CJA Business User&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Custom&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Adobe Data Collection&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Data Collection Administrator&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Custom&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Adobe Data Collection&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Data Collection Developer&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Custom&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/h1&gt;&lt;h3 style="color: #1d4ed8; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 18px; margin: 24px 0px 8px; text-align: start;"&gt;Why a Hybrid Approach?&lt;/h3&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;ul style="color: #1a1a1a; font-size: medium; font-weight: 400; padding-left: 22px;"&gt;&lt;li&gt;Use the OOTB &lt;strong&gt;AEP-Default-All-Users&lt;/strong&gt; Product Profile as the standard platform entitlement.&lt;/li&gt;&lt;li&gt;Create custom Product Profiles only where business segregation is required, such as Customer Journey Analytics and Adobe Data Collection.&lt;/li&gt;&lt;li&gt;Keep Product Profiles focused on application access, not detailed permissions.&lt;/li&gt;&lt;/ul&gt;&lt;/h1&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;Layer 3 – AEP Roles&lt;/h2&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;AEP Roles determine &lt;strong&gt;what&lt;/strong&gt; users can do inside Adobe Experience Platform. They apply &lt;em&gt;only&lt;/em&gt; to AEP platform resources — Customer Journey Analytics and Data Collection are otherwise handled through Product Profiles, apart from the two narrow crossovers noted earlier (CJA Data Management and Data Collection datastreams).&lt;/p&gt;&lt;/h1&gt;&lt;h3 style="color: #1d4ed8; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 18px; margin: 24px 0px 8px; text-align: start;"&gt;Sample AEP Roles&lt;/h3&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;table style="border-collapse: collapse; font-size: 15px; margin: 16px 0px; width: 800px;"&gt;&lt;thead&gt;&lt;tr style="background: rgb(11, 31, 58); color: white;"&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;Role&lt;/th&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;Example Permissions&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;&lt;strong&gt;Platform Administrator&lt;/strong&gt;&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Manage Sandboxes, Datasets, Schemas, Sources, Destinations, Identity, Governance, Query Service&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;&lt;strong&gt;Platform Developer&lt;/strong&gt;&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Create and modify Schemas, Datasets, Sources, Destinations, Queries (typically non-production)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;&lt;strong&gt;Data Engineer&lt;/strong&gt;&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Manage Data Ingestion, Schemas, Datasets, Monitoring&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;&lt;strong&gt;Data Analyst&lt;/strong&gt;&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Read Datasets, Execute Queries, View Schemas&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;&lt;strong&gt;CJA Data Management (minimal)&lt;/strong&gt;&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Minimal AEP access to the datasets and schemas that back CJA Connections and Data Views — the only place CJA touches an AEP Role&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;&lt;strong&gt;Data Collection Datastreams (minimal)&lt;/strong&gt;&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Manage Datastreams plus view access to the target sandbox, datasets, and schemas — the only place Data Collection touches an AEP Role&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;The key idea is to keep Product Profiles simple while using AEP Roles to enforce &lt;strong&gt;least-privilege access&lt;/strong&gt; on the platform.&lt;/p&gt;&lt;/h1&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;Example Access Mapping&lt;/h2&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;div style="color: #1a1a1a; font-size: medium; font-weight: 400; overflow-x: auto;"&gt;&lt;table style="border-collapse: collapse; font-size: 14px; margin: 16px 0px; min-width: 640px; width: 800px;"&gt;&lt;thead&gt;&lt;tr style="background: rgb(11, 31, 58); color: white;"&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;Business Persona&lt;/th&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;Admin Console User Group&lt;/th&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;Product Profile&lt;/th&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;AEP Role&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Platform Administrator&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Platform Admins&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;AEP-Default-All-Users (OOTB)&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Platform Administrator&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Platform Developer&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Platform Developers&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;AEP-Default-All-Users (OOTB)&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Platform Developer&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Engineer&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Engineering&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;AEP-Default-All-Users (OOTB)&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Engineer&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Analyst&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Analytics Team&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;AEP-Default-All-Users (OOTB)&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Analyst&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;CJA Administrator&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;CJA Administrators&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;CJA Administrator&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Minimal — Data Management only&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;CJA Business User&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;CJA Business Users&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;CJA Business User&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;None&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Collection Administrator&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Collection Admins&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Collection Administrator&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Collection Developer&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Collection Developers&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;Data Collection Developer&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 9px 12px;"&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style="color: #6b7280; font-size: 14px; font-weight: 400; margin-top: 4px;"&gt;Reading the table: each persona gets exactly one User Group, which carries the Product Profile and (where applicable) the AEP Role. &lt;strong&gt;None / N/A&lt;/strong&gt; means the persona needs no AEP Role — Customer Journey Analytics and Adobe Data Collection are otherwise governed by their Product Profiles, not by AEP RBAC. The two platform crossovers are handled explicitly: &lt;strong&gt;CJA Data Management&lt;/strong&gt; is granted here on the CJA Administrator (a minimal AEP Role for the underlying datasets and schemas), while &lt;strong&gt;Data Collection datastreams&lt;/strong&gt; are owned by the Platform Administrator in this example — which is why the Data Collection personas show N/A. If your Data Collection team owned datastreams instead, they would carry a minimal AEP Role too.&lt;/p&gt;&lt;/h1&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;Customer Journey Analytics Consideration&lt;/h2&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;Customer Journey Analytics access is normally governed &lt;strong&gt;entirely by its Product Profile&lt;/strong&gt;. There is one exception worth calling out.&lt;/p&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;If a user is responsible for managing &lt;strong&gt;Connections, Data Views, and Data Management&lt;/strong&gt; in CJA, the CJA Product Profile alone is not sufficient. In addition to it, the user should also:&lt;/p&gt;&lt;ul style="color: #1a1a1a; font-size: medium; font-weight: 400; padding-left: 22px;"&gt;&lt;li&gt;Hold the &lt;strong&gt;AEP application Product Profile&lt;/strong&gt; (e.g., AEP-Default-All-Users) so they can reach the Adobe Experience Platform interface, where Data Management lives.&lt;/li&gt;&lt;li&gt;Have a &lt;strong&gt;minimal AEP Role&lt;/strong&gt; that grants access to the datasets and schemas backing those Connections and Data Views. This is the only situation in which CJA relies on an AEP Role.&lt;/li&gt;&lt;li&gt;Be assigned as a &lt;strong&gt;Product Administrator&lt;/strong&gt; in the Adobe Admin Console when responsible for administering Customer Journey Analytics.&lt;/li&gt;&lt;/ul&gt;&lt;div style="background: rgb(255, 251, 235); border-left: 4px solid rgb(245, 158, 11); border-radius: 0px 8px 8px 0px; color: #1a1a1a; font-size: medium; font-weight: 400; margin: 18px 0px; padding: 14px 18px;"&gt;Understanding the distinction between &lt;strong&gt;Product Profiles&lt;/strong&gt;, &lt;strong&gt;Product Administrators&lt;/strong&gt;, and &lt;strong&gt;AEP Roles&lt;/strong&gt; is critical when designing access for CJA administrators.&lt;/div&gt;&lt;/h1&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;Separation of Responsibilities&lt;/h2&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;One of the biggest advantages of this model is that every layer has a clear purpose.&lt;/p&gt;&lt;table style="border-collapse: collapse; font-size: 15px; margin: 16px 0px; width: 800px;"&gt;&lt;thead&gt;&lt;tr style="background: rgb(11, 31, 58); color: white;"&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;Layer&lt;/th&gt;&lt;th style="border: 1px solid rgb(209, 213, 219); padding: 10px 12px; text-align: left;"&gt;Responsibility&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;&lt;strong&gt;Admin Console User Group&lt;/strong&gt;&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Represents the user's business function&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;&lt;strong&gt;Product Profile&lt;/strong&gt;&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Determines which Adobe products the user can access&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;&lt;strong&gt;AEP Role&lt;/strong&gt;&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Determines what the user can do within AEP&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background: rgb(248, 250, 252);"&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;&lt;strong&gt;Sandbox Permissions&lt;/strong&gt;&lt;/td&gt;&lt;td style="border: 1px solid rgb(229, 231, 235); padding: 10px 12px;"&gt;Determines where the user can perform those actions&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;Keeping these responsibilities separate results in a cleaner and more maintainable access model.&lt;/p&gt;&lt;/h1&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;Benefits&lt;/h2&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;This approach provides several advantages:&lt;/p&gt;&lt;ul style="color: #1a1a1a; font-size: medium; font-weight: 400; padding-left: 22px;"&gt;&lt;li&gt;Reduced number of Product Profiles&lt;/li&gt;&lt;li&gt;Simplified onboarding and offboarding&lt;/li&gt;&lt;li&gt;Better governance and auditability&lt;/li&gt;&lt;li&gt;Clear separation of business and technical responsibilities&lt;/li&gt;&lt;li&gt;Easier administration&lt;/li&gt;&lt;li&gt;Scalable role-based access control (RBAC)&lt;/li&gt;&lt;li&gt;Improved security through the Principle of Least Privilege&lt;/li&gt;&lt;/ul&gt;&lt;/h1&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;How to Apply This Model&lt;/h2&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;If you want to adapt this in your own tenant, a practical order of operations is:&lt;/p&gt;&lt;ol style="color: #1a1a1a; font-size: medium; font-weight: 400; padding-left: 22px;"&gt;&lt;li style="margin-bottom: 6px;"&gt;&lt;strong&gt;List your business personas.&lt;/strong&gt; Start from what people actually do (administer, develop, engineer, analyze, report) — not from Adobe's technical objects.&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;&lt;strong&gt;Create one User Group per persona&lt;/strong&gt; in the Admin Console. This is the only thing you'll assign people to.&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;&lt;strong&gt;Default to the OOTB AEP Product Profile.&lt;/strong&gt; Add custom Product Profiles only where you need product-level segregation (e.g., CJA, Data Collection).&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;&lt;strong&gt;Define AEP Roles for least privilege&lt;/strong&gt; and map each &lt;em&gt;platform&lt;/em&gt; User Group to the role that matches its persona. Groups that only need CJA or Data Collection generally require no AEP Role — the exceptions are the two crossovers (CJA Data Management, and Data Collection datastreams if that team owns them).&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;&lt;strong&gt;Scope with sandbox permissions&lt;/strong&gt; so non-production personas can't touch production.&lt;/li&gt;&lt;li style="margin-bottom: 6px;"&gt;&lt;strong&gt;Handle CJA administration separately&lt;/strong&gt; — remember the Product Administrator assignment for anyone managing Connections and Data Views (see the note above).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Document the mapping&lt;/strong&gt; (a table like the one above) and make it the single source of truth for onboarding and audits.&lt;/li&gt;&lt;/ol&gt;&lt;div style="background: rgb(236, 253, 245); border-left: 4px solid rgb(16, 185, 129); border-radius: 0px 8px 8px 0px; color: #1a1a1a; font-size: medium; font-weight: 400; margin: 18px 0px; padding: 14px 18px;"&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; if you're about to create a new Product Profile, first ask whether an AEP Role or sandbox permission can express the same intent. Reserve Product Profiles for &lt;em&gt;product access&lt;/em&gt;, and let Roles handle &lt;em&gt;what&lt;/em&gt; and &lt;em&gt;where&lt;/em&gt;.&lt;/div&gt;&lt;/h1&gt;&lt;h2 style="border-bottom: 2px solid rgb(229, 231, 235); color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 23px; margin: 36px 0px 14px; padding-bottom: 8px; text-align: start;"&gt;Final Thoughts&lt;/h2&gt;&lt;h1 style="color: #0b1f3a; font-family: -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 30px; line-height: 1.25; margin: 0px 0px 8px; text-align: start;"&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;As AEP deployments mature, access management becomes a critical success factor. Rather than treating User Groups, Product Profiles, and AEP Roles as interchangeable, defining a clear responsibility for each layer results in a governance model that is scalable, maintainable, and easier to operate.&lt;/p&gt;&lt;p style="color: #1a1a1a; font-size: medium; font-weight: 400;"&gt;This layered approach has worked well in practice by reducing administrative overhead while maintaining flexibility for different Adobe products such as AEP, Customer Journey Analytics, and Adobe Data Collection.&lt;/p&gt;&lt;div style="background: rgb(239, 246, 255); border-left: 4px solid rgb(29, 78, 216); border-radius: 0px 8px 8px 0px; color: #1a1a1a; font-size: medium; font-weight: 400; margin: 22px 0px; padding: 16px 18px;"&gt;I'd be interested to hear how others are designing their AEP access models. Are you using mostly OOTB Product Profiles, creating custom Product Profiles, or adopting a layered RBAC strategy similar to this?&lt;/div&gt;&lt;/h1&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link href="http://www.albinsblog.com/feeds/900639594069437669/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.albinsblog.com/2026/06/a-layered-access-management-model-for.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/2627747309936375689/posts/default/900639594069437669" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/2627747309936375689/posts/default/900639594069437669" rel="self" type="application/atom+xml"/><link href="http://www.albinsblog.com/2026/06/a-layered-access-management-model-for.html" rel="alternate" title="A Layered Access Management Model for Adobe Experience Platform (AEP)" type="text/html"/><author><name>Tech Forum</name><uri>http://www.blogger.com/profile/06872295047306188060</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/a/AVvXsEjUfEkOVIIkotssMQef-CQRrvSlGoFDWfmPg1rIV2dxJuJ1DJUHLb9-oplSlN1lmf6icI3p4wFCMkR0LQlbncUVaJYYPFueWQj9pb3e3q9MkRQzBsSLlWToOtJ-OYArgTpJMy29BEVQbGHELlhEZ0T_a7DOVfIWsSRAfvTc-Gsn-ulvD3X5Y2jq3p8fa6w2=s72-w640-h464-c" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2627747309936375689.post-9178586378039657952</id><published>2026-06-23T15:49:21.764-05:00</published><updated>2026-08-11T15:38:43.338-05:00</updated><title type="text">   Troubleshooting Snowflake Source Connection Issues in Adobe Experience Platform (AEP)</title><content type="html">&lt;p&gt;While configuring Snowflake as a source in Adobe Experience Platform (AEP), I encountered a generic authentication error that initially appeared to be related to credentials or key-pair authentication. However, as with many integration issues, the root cause was not immediately obvious.&lt;/p&gt;&lt;p&gt;This experience highlighted several areas worth validating whenever a Snowflake-to-AEP connection fails.&lt;/p&gt;&lt;h2&gt;Common Areas to Investigate&lt;/h2&gt;&lt;h3&gt;1. Verify Snowflake Credentials and Permissions&lt;/h3&gt;&lt;p&gt;Before diving into advanced troubleshooting, confirm:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Username is correct&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Assigned role has access to the warehouse, database, schema, and objects&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Warehouse is active&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Account identifier is configured correctly&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Many connection failures originate from simple configuration issues.&lt;/p&gt;&lt;h3&gt;2. Validate Key-Pair Authentication&lt;/h3&gt;&lt;p&gt;If you're using key-pair authentication, ensure:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;The private key is in a supported format (typically PKCS#8)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The corresponding public key is registered against the Snowflake user&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The correct private key is being supplied to the connector&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;A common point of confusion is the distinction between:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;code inline=""&gt;.p8&lt;/code&gt; files&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code inline=""&gt;.pem&lt;/code&gt; files&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Base64-encoded private keys&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The file extension itself is less important than the underlying content. Both &lt;code inline=""&gt;.p8&lt;/code&gt; and &lt;code inline=""&gt;.pem&lt;/code&gt; files can contain valid PEM-formatted private keys.&lt;/p&gt;&lt;p&gt;AEP integrations require the private key to be single line and supplied as a Base64-encoded string&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;3. Generating a Base64-Encoded Private Key&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Linux:&lt;/strong&gt; Run the first command to convert the key to a single line, then run the second command to generate the Base64-encoded value.&lt;/p&gt;&lt;p&gt;awk '&lt;/p&gt;&lt;pre&gt;&lt;code class="language-bash"&gt;/BEGIN PRIVATE KEY/ {gsub(/\r/,""); print; next}
/END PRIVATE KEY/   {gsub(/\r/,""); print ""; print; next}
{gsub(/\r/,""); printf "%s",$0}
' private_key_prod.p8 &amp;gt; private_key_single_line.p8


cat private_key_single_line.p8 | base64 -w0 &amp;gt; private_key_base64.txt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The equivalent Python script is:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-python"&gt;&lt;blockquote&gt;import base64

input_file = "snowflake_private_key_prod.p8"
output_file = "snowflake_private_key_base64.txt"

# Read as text
with open(input_file, "r") as f:
    lines = f.readlines()

# Remove newlines while preserving PEM header/footer structure
cleaned_lines = [line.strip() for line in lines if line.strip()]

header = cleaned_lines[0]
footer = cleaned_lines[-1]
key_body = "".join(cleaned_lines[1:-1])

cleaned_key = "{}\n{}\n{}".format(
    header,
    key_body,
    footer
)

# Base64 encode the cleaned PEM content
encoded_key = base64.b64encode(
    cleaned_key.encode("utf-8")
).decode("utf-8")

with open(output_file, "w") as f:
    f.write(encoded_key)

print("Base64-encoded key saved to {}".format(output_file))
print(f"Base64-encoded key saved to {output_file}")
&lt;/blockquote&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This produces the same output as the Linux command and works across Windows, macOS, and Linux.&lt;/p&gt;&lt;h3&gt;4. Check Network Policies and IP Whitelisting&lt;/h3&gt;&lt;p&gt;One of the most overlooked causes of authentication failures is network access.&lt;/p&gt;&lt;p&gt;Even when credentials and keys are configured correctly, Snowflake may reject incoming connections if:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Network policies are enabled&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;IP allowlists are configured&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Corporate firewalls restrict outbound traffic&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Adobe Experience Platform IP ranges are not permitted&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In these cases, the error may still appear as a generic authentication failure.&lt;/p&gt;&lt;p&gt;A useful question to ask is:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Is there a Snowflake Network Policy or IP allowlist that could be blocking connections from Adobe Experience Platform?&lt;/p&gt;&lt;/blockquote&gt;&lt;h3&gt;5. Verify Source Configuration&lt;/h3&gt;&lt;p&gt;Review:&lt;/p&gt;&lt;ul&gt;&lt;li data-end="605" data-section-id="1f354sq" data-start="585"&gt;Account identifier
&lt;/li&gt;&lt;li data-end="629" data-section-id="f0ltrr" data-start="606"&gt;
Authentication method
&lt;/li&gt;&lt;li data-end="650" data-section-id="4ygwh5" data-start="630"&gt;
User configuration
&lt;/li&gt;&lt;li data-end="691" data-section-id="1ltkt9y" data-start="651"&gt;
Warehouse, database, and schema access&lt;/li&gt;&lt;li data-end="691" data-section-id="1ltkt9y" data-start="651"&gt;Source object selection (table/view)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Small configuration inconsistencies can prevent successful authentication.&lt;/p&gt;&lt;h2&gt;Validating Connectivity Outside AEP&lt;/h2&gt;&lt;p class="isSelectedEnd"&gt;Before spending too much time troubleshooting the AEP connector, it can be helpful to validate the Snowflake connection directly from your local machine. This helps isolate whether the issue is related to Snowflake authentication and connectivity or specific to the AEP source configuration.&lt;/p&gt;&lt;p class="isSelectedEnd"&gt;Use the Python script below to validate connectivity from your local environment outside of AEP.&lt;/p&gt;&lt;p class="isSelectedEnd"&gt;&lt;strong&gt;Note:&lt;/strong&gt; If Snowflake Network Policies or IP whitelisting are enabled, ensure your local IP address is allowed. For initial testing, you may consider temporarily relaxing or disabling the network policy (following your organization's security guidelines) to eliminate IP restrictions as a potential cause.&lt;/p&gt;&lt;p&gt;In my case, the issue was not related to Snowflake connectivity or IP whitelisting. The root cause was an improperly encoded private key value being supplied to the connector. Running this local validation helped quickly narrow down the troubleshooting scope and confirm that key-pair authentication was working correctly outside of AEP.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
import snowflake.connector
from cryptography.hazmat.primitives import serialization

USER = "user"
ACCOUNT = "organization-accountname"
DATABASE = "DATABASE"
WAREHOUSE = "WAREHOUSE"

PRIVATE_KEY_FILE = "snowflake_private_key.p8"

# Read private key from file
with open(PRIVATE_KEY_FILE, "rb") as key_file:
    private_key = serialization.load_pem_private_key(
        key_file.read(),
        password=None,
    )

# Convert to DER format required by Snowflake connector
private_key_der = private_key.private_bytes(
    encoding=serialization.Encoding.DER,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption(),
)

conn = snowflake.connector.connect(
    user=USER,
    account=ACCOUNT,
    private_key=private_key_der,
    warehouse=WAREHOUSE,
    database=DATABASE,
)

try:
    cur = conn.cursor()
    cur.execute("""
        SELECT
            CURRENT_ORGANIZATION_NAME(),
            CURRENT_ACCOUNT_NAME(),
            CURRENT_ACCOUNT(),
            CURRENT_USER()
    """)
    print(cur.fetchone())

finally:
    cur.close()
    conn.close()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;h2&gt;Key Takeaways&lt;/h2&gt;&lt;p&gt;When troubleshooting Snowflake source connections in AEP:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Validate credentials and permissions.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Confirm key-pair authentication is configured correctly.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Ensure private keys are encoded in the expected format.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Check Snowflake network policies and IP allowlists.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Review connector configuration details carefully.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Most importantly, don't assume every authentication error is caused by bad credentials. In many enterprise environments, network restrictions and key-formatting issues are equally likely root causes.&lt;/p&gt;&lt;p&gt;By methodically validating each layer, you can significantly reduce troubleshooting time and get your Snowflake source connected successfully.&lt;/p&gt;</content><link href="http://www.albinsblog.com/feeds/9178586378039657952/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://www.albinsblog.com/2026/06/troubleshooting-snowflake-source.html#comment-form" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/2627747309936375689/posts/default/9178586378039657952" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/2627747309936375689/posts/default/9178586378039657952" rel="self" type="application/atom+xml"/><link href="http://www.albinsblog.com/2026/06/troubleshooting-snowflake-source.html" rel="alternate" title="   Troubleshooting Snowflake Source Connection Issues in Adobe Experience Platform (AEP)" type="text/html"/><author><name>Tech Forum</name><uri>http://www.blogger.com/profile/06872295047306188060</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry></feed>