{"id":38154,"date":"2025-08-07T07:00:00","date_gmt":"2025-08-07T14:00:00","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=38154"},"modified":"2025-11-26T17:04:32","modified_gmt":"2025-11-27T01:04:32","slug":"access-control-sensitive-confidential-assets","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets","title":{"rendered":"Using Cloudinary&#8217;s Access Control for Sensitive or Confidential Assets"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>In many use cases, assets uploaded to Cloudinary should be publicly accessible. However, there are situations where assets are sensitive or confidential (for example, scans of legal documents, in-house guides, etc.). If you need to distribute these sensitive materials to another party or system through Cloudinary, it\u2019s important to ensure that only authorized individuals can access them.<\/p>\n<p>This blog post focuses on the <a href=\"https:\/\/cloudinary.com\/documentation\/control_access_to_media#access_controlled_media_assets\">Access Control<\/a> feature of Cloudinary, which enables the management of sensitive assets. We will be using the <a href=\"https:\/\/cloudinary.com\/documentation\/node_integration\">Node SDK<\/a> for the code examples, although this feature is also supported on <a href=\"https:\/\/cloudinary.com\/documentation\/backend_sdks\">other SDKs<\/a>.<\/p>\n<h2>Changing Access Control<\/h2>\n<p>Access Control can be managed on any asset through the Cloudinary DAM dashboard or the Cloudinary API. In the dashboard, one of the ways this can be done is by clicking the asset and then clicking the <strong>Access control<\/strong> dropdown on the right sidebar:<\/p>\n<img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1764205298\/blog-Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets-1.png\" alt=\"Asset sidebar\" style=\"zoom:50%;\" \/>\n<p>This opens a small dialog where you can choose between two options: <strong>Public<\/strong> and <strong>Restricted<\/strong>:<\/p>\n<img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1764205301\/blog-Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets-2.pn\" alt=\"Access control dialog\" style=\"zoom:50%;\" \/>\n<p>The <strong>Public<\/strong> option is selected by default, which means that anyone can view the asset. Selecting the <strong>Restricted<\/strong> option only allows access with a specialized token (we\u2019ll come back to this in a bit), while there\u2019s an additional option that also allows public access within a given period:<\/p>\n<img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1764205306\/blog-Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets-3.png\" alt=\"Restricted option\" style=\"zoom:50%;\" \/>\n<p>If <strong>Time-limited access<\/strong> is checked, we can choose a period and set a start date, an end date, or both. If any of these options are selected, the asset will be publicly available during the specified period.<\/p>\n<img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1764205304\/blog-Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets-4.png\" alt=\"Time-limited access\" style=\"zoom:50%;\" \/>\n<p>The dashboard also allows you to perform this in bulk. To do that, all you need to do is multiple-select the assets, click the three-dot menu in the top-right corner, and click <strong>Set Access Control<\/strong>:<\/p>\n<img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/v1764205305\/blog-Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets-5.png\" alt=\"Three-dot menu options\" style=\"zoom:50%;\" \/>\n<h3>In the Cloudinary SDK<\/h3>\n<p>To accomplish the same using the Cloudinary SDK, you can use the <code>access_control<\/code> property when uploading or updating an image. The parameter accepts an array of access types, determining how the asset is accessible. Supported types include: <code>token<\/code>  and <code>anonymous<\/code> (allowing public access with optional ISO 8601 date ranges, with only one <code>anonymous<\/code> type allowed). The following example effectively makes the asset restricted to token-based access, except between June 10th and July 20th of 2025, when it\u2019s publicly available:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-comment\">\/\/ Cloudinary setup<\/span>\n<span class=\"hljs-keyword\">const<\/span> cloudinary = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'cloudinary'<\/span>).v2;\n\ncloudinary.config({ \n  <span class=\"hljs-attr\">cloud_name<\/span>: <span class=\"hljs-string\">'your-cloud-name'<\/span>, \n  <span class=\"hljs-attr\">api_key<\/span>: <span class=\"hljs-string\">'your-api-key'<\/span>, \n  <span class=\"hljs-attr\">api_secret<\/span>: <span class=\"hljs-string\">'your-api-secret'<\/span> \n});\n\n<span class=\"hljs-comment\">\/\/ Upload with access control settings<\/span>\ncloudinary.uploader.upload(<span class=\"hljs-string\">\"sample.jpg\"<\/span>, \n  { <span class=\"hljs-attr\">access_control<\/span>: &#91;\n    { <span class=\"hljs-attr\">access_type<\/span>: <span class=\"hljs-string\">\"token\"<\/span> }, \n    { \n      <span class=\"hljs-attr\">access_type<\/span>: <span class=\"hljs-string\">\"anonymous\"<\/span>, \n      <span class=\"hljs-attr\">start<\/span>: <span class=\"hljs-string\">\"2025-06-10T12:00Z\"<\/span>, \n      <span class=\"hljs-attr\">end<\/span>: <span class=\"hljs-string\">\"2025-07-20T12:00Z\"<\/span> \n    } \n  ]}\n)\n.then(<span class=\"hljs-function\"><span class=\"hljs-params\">result<\/span> =&gt;<\/span> <span class=\"hljs-built_in\">console<\/span>.log(result))\n.catch(<span class=\"hljs-function\"><span class=\"hljs-params\">error<\/span> =&gt;<\/span> <span class=\"hljs-built_in\">console<\/span>.error(error));\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h2>Generating Tokens<\/h2>\n<p>If you have set a token-based access type (either by setting <strong>Restricted<\/strong> in the dashboard without time-based access or with <code>access_type<\/code> of the <code>token<\/code> through the SDK), you also need to generate a token for external parties to access the asset. However, please note that this is only possible if you have enabled this feature by submitting a request to Cloudinary. This is needed because setting up token-based access also requires some additional configuration on the CDN. Once you\u2019ve gained access to the feature, you will also be provided with an <strong>encryption key<\/strong>, which is then used to generate an access token.<\/p>\n<p>A token is simply a cryptographic string generated through the SDK. While generating it, you can also control the token\u2019s validity by:<\/p>\n<ul>\n<li>Setting an expiration date or time frame.<\/li>\n<li>Restricting access to specific IP addresses.<\/li>\n<li>Applying predefined Access Control Lists (ACLs), which are essentially URL patterns like <code>\/video\/authenticated\/*<\/code>.<\/li>\n<li>Limiting access to authenticated users or sessions.<\/li>\n<\/ul>\n<p>Tokens can be used in either token-based URLs or cookies. The first option is helpful if you want to use it in shareable URLs (such as in emails, documents shared externally, or users that may not be authenticated to your site). In contrast, the second option is useful when you want to restrict access based on user authentication or session (e.g., a user logged in to your site). The methods for generating the token differ slightly for these two cases, and they also have different requirements. Both methods are available only for accounts on the <a href=\"https:\/\/cloudinary.com\/pricing\">Advanced plan<\/a> or higher, while the token-based URL method also requires using a <a href=\"https:\/\/cloudinary.com\/documentation\/advanced_url_delivery_options#private_cdns_and_custom_delivery_hostnames_cnames\">Custom delivery hostname (CNAME)<\/a>.<\/p>\n<p>To generate a token-based URL, you can call <code>cloudinary.image<\/code> with the source image as well as an options object that needs to have the encryption key at a minimum and a few other optional properties, such as:<\/p>\n<ul>\n<li>\n<strong><code>acl<\/code>.<\/strong> An optional Access Control List (ACL) for path restrictions (e.g., <code>\/video\/authenticated\/*<\/code>).<\/li>\n<li>\n<strong><code>ip<\/code>.<\/strong> Optional IP address restriction.<\/li>\n<li>\n<strong><code>start_time<\/code> &amp; <code>duration<\/code> \/ <code>expiration<\/code>.<\/strong> Control URL validity with a start time and either a duration or an expiration timestamp.<\/li>\n<\/ul>\n<p>For example:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">const<\/span> imageTag = cloudinary.image(<span class=\"hljs-string\">\"sample.jpg\"<\/span>, { \n  <span class=\"hljs-attr\">type<\/span>: <span class=\"hljs-string\">\"authenticated\"<\/span>,  \n  <span class=\"hljs-attr\">auth_token<\/span>: {\n    <span class=\"hljs-attr\">key<\/span>: <span class=\"hljs-string\">\"MyKey\"<\/span>, <span class=\"hljs-comment\">\/\/ Your encryption key<\/span>\n    <span class=\"hljs-attr\">duration<\/span>: <span class=\"hljs-number\">300<\/span> <span class=\"hljs-comment\">\/\/ Token valid for 300 seconds (5 minutes)<\/span>\n  },\n  <span class=\"hljs-attr\">sign_url<\/span>: <span class=\"hljs-literal\">true<\/span> <span class=\"hljs-comment\">\/\/ Sign the URL for security<\/span>\n});\n\n<span class=\"hljs-built_in\">console<\/span>.log(imageTag);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>To use the cookie method, you need to call the <code>cloudinary.utils.generate_auth_token<\/code> function. This function also accepts a configuration object but has two mandatory properties: the key, which is the encryption key, and ACL, which is a URL pattern restricting the allowed URL path to a specified pattern. Other optional properties include:<\/p>\n<ul>\n<li>\n<strong><code>ip<\/code>.<\/strong> Optional IP address restriction.<\/li>\n<li>\n<strong><code>start_time<\/code> &amp; <code>duration<\/code> \/ <code>expiration<\/code>.<\/strong> Control cookie validity with a start time and either a duration or an expiration timestamp.<\/li>\n<\/ul>\n<p>For example:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-keyword\">const<\/span> cookie_token = cloudinary.utils.generate_auth_token({\n  duration: <span class=\"hljs-number\">300<\/span>, <span class=\"hljs-comment\">\/\/ Token valid for 300 seconds (5 minutes)<\/span>\n  acl: <span class=\"hljs-string\">'*\/image\/authenticated\/*'<\/span>, <span class=\"hljs-comment\">\/\/ Access Control List path<\/span>\n  key: <span class=\"hljs-string\">'MY_KEY'<\/span> <span class=\"hljs-comment\">\/\/ Your encryption key<\/span>\n});\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h2>Conclusion<\/h2>\n<p>Cloudinary\u2019s Access Control is a simple-to-use feature that allows you to safeguard sensitive assets, whether you need to restrict access to a specific timeframe or share them only with certain groups. We hope this blog post was a helpful introduction to this feature. As always, we encourage you to <a href=\"https:\/\/cloudinary.com\/documentation\">browse our documentation<\/a> for more advanced configurations, and to <a href=\"https:\/\/cloudinary.com\/users\/register_free\">sign up for a free Cloudinary<\/a>.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":87,"featured_media":38155,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[25],"class_list":["post-38154","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-asset-management"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Protect Sensitive Assets with Cloudinary Access Control<\/title>\n<meta name=\"description\" content=\"Learn to safeguard sensitive and confidential media using Cloudinary&#039;s Access Control. This guide covers how to restrict assets via the dashboard, API, and specialized tokens.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Cloudinary&#039;s Access Control for Sensitive or Confidential Assets\" \/>\n<meta property=\"og:description\" content=\"Learn to safeguard sensitive and confidential media using Cloudinary&#039;s Access Control. This guide covers how to restrict assets via the dashboard, API, and specialized tokens.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-07T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-27T01:04:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"melindapham\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets\"},\"author\":{\"name\":\"melindapham\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\"},\"headline\":\"Using Cloudinary&#8217;s Access Control for Sensitive or Confidential Assets\",\"datePublished\":\"2025-08-07T14:00:00+00:00\",\"dateModified\":\"2025-11-27T01:04:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets\"},\"wordCount\":10,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA\",\"keywords\":[\"Asset Management\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets\",\"url\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets\",\"name\":\"Protect Sensitive Assets with Cloudinary Access Control\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA\",\"datePublished\":\"2025-08-07T14:00:00+00:00\",\"dateModified\":\"2025-11-27T01:04:32+00:00\",\"description\":\"Learn to safeguard sensitive and confidential media using Cloudinary's Access Control. This guide covers how to restrict assets via the dashboard, API, and specialized tokens.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Cloudinary&#8217;s Access Control for Sensitive or Confidential Assets\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\",\"name\":\"melindapham\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"caption\":\"melindapham\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Protect Sensitive Assets with Cloudinary Access Control","description":"Learn to safeguard sensitive and confidential media using Cloudinary's Access Control. This guide covers how to restrict assets via the dashboard, API, and specialized tokens.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets","og_locale":"en_US","og_type":"article","og_title":"Using Cloudinary's Access Control for Sensitive or Confidential Assets","og_description":"Learn to safeguard sensitive and confidential media using Cloudinary's Access Control. This guide covers how to restrict assets via the dashboard, API, and specialized tokens.","og_url":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets","og_site_name":"Cloudinary Blog","article_published_time":"2025-08-07T14:00:00+00:00","article_modified_time":"2025-11-27T01:04:32+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA","type":"image\/jpeg"}],"author":"melindapham","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets"},"author":{"name":"melindapham","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9"},"headline":"Using Cloudinary&#8217;s Access Control for Sensitive or Confidential Assets","datePublished":"2025-08-07T14:00:00+00:00","dateModified":"2025-11-27T01:04:32+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets"},"wordCount":10,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA","keywords":["Asset Management"],"inLanguage":"en-US","copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets","url":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets","name":"Protect Sensitive Assets with Cloudinary Access Control","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA","datePublished":"2025-08-07T14:00:00+00:00","dateModified":"2025-11-27T01:04:32+00:00","description":"Learn to safeguard sensitive and confidential media using Cloudinary's Access Control. This guide covers how to restrict assets via the dashboard, API, and specialized tokens.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/access-control-sensitive-confidential-assets#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using Cloudinary&#8217;s Access Control for Sensitive or Confidential Assets"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9","name":"melindapham","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","caption":"melindapham"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1754088754\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets\/Blog_Using_Cloudinary_s_Access_Control_for_Sensitive_or_Confidential_Assets.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/38154","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/87"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=38154"}],"version-history":[{"count":2,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/38154\/revisions"}],"predecessor-version":[{"id":39431,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/38154\/revisions\/39431"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/38155"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=38154"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=38154"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=38154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}