{"id":838,"date":"2025-09-07T14:16:17","date_gmt":"2025-09-07T14:16:17","guid":{"rendered":"https:\/\/dataopsschool.com\/blog\/?p=838"},"modified":"2025-09-07T14:16:19","modified_gmt":"2025-09-07T14:16:19","slug":"databricks-databricks-secret-management-secret-scopes","status":"publish","type":"post","link":"https:\/\/dataopsschool.com\/blog\/databricks-databricks-secret-management-secret-scopes\/","title":{"rendered":"Databricks: Databricks Secret Management &amp; Secret Scopes"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Introduction<\/h1>\n\n\n\n<p>Hard-coding credentials (DB passwords, API tokens, SAS keys, hosts) in notebooks or jobs is risky. In Databricks you store them as <strong>secrets<\/strong> inside a <strong>secret scope<\/strong>, then read them safely at runtime (not printed in plain text). Databricks supports two scope types: <strong>Azure Key Vault-backed<\/strong> and <strong>Databricks-backed<\/strong>. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">What is a Secret Scope in Databricks?<\/h1>\n\n\n\n<p><strong>Secret scope<\/strong> = a named container for secrets.<br>Types:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Azure Key Vault\u2013backed<\/strong>: the scope <em>references<\/em> an AKV; secrets live in AKV and are <strong>read-only<\/strong> from Databricks (you manage them in Azure).<\/li>\n\n\n\n<li><strong>Databricks-backed<\/strong>: secrets are stored in an encrypted store managed by Databricks.<br>You create scopes, set permissions (ACLs), add secrets, and reference them in notebooks\/jobs. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">01:04 \u2014 Azure Key Vault\u2013backed Secret Scope (AKV)<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">A) Prepare Azure Key Vault (one-time)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Create an AKV<\/strong> in your subscription (any resource group\/region reachable by your workspace).<\/li>\n\n\n\n<li>In <strong>Access configuration<\/strong>, set <strong>Permission model = Vault access policy<\/strong> (RBAC isn\u2019t supported for AKV-backed secret scopes). (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n\n\n\n<li>In <strong>Networking<\/strong>, allow access from your required VNets\/IPs and check <strong>Allow trusted Microsoft services to bypass this firewall<\/strong> if appropriate. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n\n\n\n<li>Ensure your user has <strong>Key Vault Contributor \/ Owner<\/strong> (as documented) to create the scope binding. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Tip: AKV-backed scopes grant Databricks <strong>Get\/List<\/strong> permissions to the workspace\u2019s service app so it can read secrets; you still <strong>manage the secrets in AKV<\/strong>. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">B) Add a secret to AKV (example)<\/h2>\n\n\n\n<p>Azure Portal \u2192 your Key Vault \u2192 <strong>Objects &gt; Secrets<\/strong> \u2192 <strong>Generate\/Import<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Name: <code>db-password<\/code><\/li>\n\n\n\n<li>Value: <code>S0m3Str0ngP@ss<\/code><\/li>\n\n\n\n<li>Enabled: Yes<\/li>\n<\/ul>\n\n\n\n<p>(You can also use Azure\u2019s <code>SetSecret<\/code> REST\/CLI.) (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Create the AKV-backed scope (Databricks UI)<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open: <code>https:\/\/&lt;your-workspace-url>#secrets\/createScope<\/code> (<strong>case-sensitive<\/strong>: <code>createScope<\/code> with capital <strong>S<\/strong>). (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n\n\n\n<li><strong>Scope name<\/strong>: <code>akv<\/code> (any name; case-insensitive).<\/li>\n\n\n\n<li><strong>Manage principal<\/strong>: choose <strong>Creator<\/strong> (Premium plan) or <strong>All workspace users<\/strong>. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n\n\n\n<li>Paste <strong>DNS Name<\/strong> (Vault URI, e.g., <code>https:\/\/mykv.vault.azure.net\/<\/code>) and <strong>Resource ID<\/strong> (from KV <strong>Properties<\/strong>). (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n\n\n\n<li><strong>Create<\/strong>. Verify: <code>databricks secrets list-scopes # expect to see: akv<\/code> (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Use <code>dbutils.secrets<\/code> (help, list, get)<\/h1>\n\n\n\n<p>In a Databricks notebook:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># What can I do?\ndbutils.secrets.help()\n\n# List all scopes\ndbutils.secrets.listScopes()\n\n# List secrets (metadata only) in a scope\ndbutils.secrets.list(\"akv\")\n\n# Read a secret (value is redacted in outputs)\npassword = dbutils.secrets.get(scope=\"akv\", key=\"db-password\")\n<\/code><\/pre>\n\n\n\n<p>Databricks <strong>redacts<\/strong> secret values printed to outputs as <code>[REDACTED]<\/code>. Use them directly in code instead of printing. (<a href=\"https:\/\/docs.databricks.com\/aws\/en\/dev-tools\/databricks-utils?utm_source=chatgpt.com\">Databricks Documentation<\/a>, <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Databricks-backed Secret Scopes<\/h1>\n\n\n\n<p>Use these when you don\u2019t need AKV, want quick setup, or are multi-cloud. Scopes &amp; secrets are managed in the workspace via <strong>CLI \/ API<\/strong>, and you can control access via <strong>secret scope ACLs<\/strong>. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Set up the Databricks CLI<\/h2>\n\n\n\n<p>Install the current CLI (0.205+). Verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>databricks --version\n<\/code><\/pre>\n\n\n\n<p>Docs: CLI commands overview. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/dev-tools\/cli\/commands?utm_source=chatgpt.com\">Microsoft Learn<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Authenticate the CLI with your workspace<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code># Creates\/updates a profile interactively (opens browser):\ndatabricks auth login\n\n# Or set env creds \/ profiles as needed.\n<\/code><\/pre>\n\n\n\n<p>(You can also auth with a service principal for automation.) (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/dev-tools\/cli\/commands?utm_source=chatgpt.com\">Microsoft Learn<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Manage Secret Scopes using the CLI<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Create a <strong>Databricks-backed<\/strong> scope<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>databricks secrets create-scope my-db-scope\n<\/code><\/pre>\n\n\n\n<p>List\/verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>databricks secrets list-scopes\n<\/code><\/pre>\n\n\n\n<p>(<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2) Put a secret into the scope<\/h3>\n\n\n\n<p><strong>CLI 0.205+ (\u2018put-secret\u2019):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Option A: JSON (string_value)\ndatabricks secrets put-secret --json '{\n  \"scope\": \"my-db-scope\",\n  \"key\": \"db-host\",\n  \"string_value\": \"xyz.example.com\"\n}'\n\n# Option B: via stdin (multi-line)\n( cat &lt;&lt; 'EOF'\nvery\nsecret\nvalue\nEOF\n) | databricks secrets put-secret my-db-scope db-password\n<\/code><\/pre>\n\n\n\n<p>List secrets (metadata only):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>databricks secrets list-secrets my-db-scope\n<\/code><\/pre>\n\n\n\n<p>Read (CLI returns base64; decode if you must read via CLI):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>databricks secrets get-secret my-db-scope db-password | jq -r .value | base64 --decode\n<\/code><\/pre>\n\n\n\n<p>(Usually you read secrets in notebooks with <code>dbutils.secrets.get<\/code>.) (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Compatibility: older CLI used <code>databricks secrets put --scope ... --key ... --string-value ...<\/code>. Prefer <code>put-secret<\/code> on new CLI. (<a href=\"https:\/\/docs.databricks.com\/aws\/en\/dev-tools\/cli\/reference\/secrets-commands?utm_source=chatgpt.com\">Databricks Documentation<\/a>)<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Use secrets in notebooks &amp; jobs (examples)<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">A) JDBC with Python<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>user = dbutils.secrets.get(\"my-db-scope\", \"db-user\")\npwd  = dbutils.secrets.get(\"my-db-scope\", \"db-password\")\njdbc_url = dbutils.secrets.get(\"my-db-scope\", \"jdbc-url\")\n\ndf = (spark.read.format(\"jdbc\")\n      .option(\"url\", jdbc_url)\n      .option(\"dbtable\", \"public.orders\")\n      .option(\"user\", user)\n      .option(\"password\", pwd)\n      .load())\n<\/code><\/pre>\n\n\n\n<p>End-to-end JDBC + secrets example: official tutorial. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/example-secret-workflow?utm_source=chatgpt.com\">Microsoft Learn<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">B) Reference secrets in <strong>Spark config<\/strong> (preview) or <strong>environment variables<\/strong><\/h2>\n\n\n\n<p>Cluster config supports <code>{{secrets\/&lt;scope&gt;\/&lt;key&gt;}}<\/code> placeholders:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Spark conf:<\/strong> <code>spark.password {{secrets\/my-db-scope\/db-password}}<\/code> Use later: <code>spark.conf.get(\"spark.password\")<\/code><\/li>\n\n\n\n<li><strong>Env var:<\/strong> <code>MY_DB_PWD={{secrets\/my-db-scope\/db-password}}<\/code> Then use <code>$MY_DB_PWD<\/code> in an init script or code.<br>(Mind the security considerations in that doc.) (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/secrets-spark-conf-env-var?utm_source=chatgpt.com\">Microsoft Learn<\/a>)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Redaction: Databricks replaces printed secret literals with <code>[REDACTED]<\/code> in notebook output (and attempts to redact in SQL too), but follow permission best practices\u2014redaction isn\u2019t a substitute for access control. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Permissions (ACLs) for secret scopes<\/h1>\n\n\n\n<p>Secret permissions are at <strong>scope<\/strong> level (READ \/ WRITE \/ MANAGE). Use the CLI to manage ACLs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Grant\ndatabricks secrets put-acl my-db-scope alice@example.com READ\ndatabricks secrets put-acl my-db-scope data-engineers MANAGE\n\n# View\ndatabricks secrets list-acls my-db-scope\ndatabricks secrets get-acl  my-db-scope alice@example.com\n\n# Revoke\ndatabricks secrets delete-acl my-db-scope alice@example.com\n<\/code><\/pre>\n\n\n\n<p>Notes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The scope creator has <strong>MANAGE<\/strong> by default.<\/li>\n\n\n\n<li>With AKV-backed scopes, anyone with access to the scope can access <strong>all<\/strong> secrets in that vault\u2014use separate vaults to isolate. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Use-cases<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Database credentials<\/strong> (JDBC\/ODBC\/SQL Warehouse apps).<\/li>\n\n\n\n<li><strong>API tokens<\/strong> (Salesforce, Stripe, Slack, ServiceNow, etc.).<\/li>\n\n\n\n<li><strong>Cloud keys<\/strong> (ADLS SAS, service principal client secrets).<\/li>\n\n\n\n<li><strong>Webhook endpoints \/ SMTP creds<\/strong> for alerting jobs.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices &amp; gotchas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Prefer AKV-backed<\/strong> scopes when your org standardizes on Azure-native secret lifecycle\/rotation; manage secrets in AKV. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n\n\n\n<li><strong>Use Databricks-backed<\/strong> scopes for quick start, PoCs, or multi-cloud teams without AKV.<\/li>\n\n\n\n<li><strong>Do not print<\/strong> secrets; rely on redaction only as a last line of defense. Lock down who can run notebooks on clusters that access secrets. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>, <a href=\"https:\/\/stackoverflow.com\/questions\/69925461\/printing-secret-value-in-databricks?utm_source=chatgpt.com\">Stack Overflow<\/a>)<\/li>\n\n\n\n<li>For Spark conf\/env-var secret refs, review the <strong>security considerations<\/strong> (who can read configs\/env vars, log visibility). (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/secrets-spark-conf-env-var?utm_source=chatgpt.com\">Microsoft Learn<\/a>)<\/li>\n\n\n\n<li><strong>Name scopes<\/strong> by app\/team (e.g., <code>etl-prod<\/code>, <code>bi-prod<\/code>) rather than individuals; rotate secrets regularly.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Quick \u201ccheat sheet\u201d<\/h2>\n\n\n\n<p><strong>AKV-backed scope (UI):<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>KV <strong>Permission model = Vault access policy<\/strong>; set Networking\/Firewall as needed. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n\n\n\n<li><code>https:\/\/&lt;workspace>#secrets\/createScope<\/code> \u2192 name scope \u2192 <strong>DNS Name<\/strong> + <strong>Resource ID<\/strong> \u2192 Create. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n<\/ol>\n\n\n\n<p><strong>Databricks-backed scope (CLI):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>databricks auth login\ndatabricks secrets create-scope my-db-scope\ndatabricks secrets put-secret --json '{\"scope\":\"my-db-scope\",\"key\":\"db-user\",\"string_value\":\"demo\"}'\ndatabricks secrets list-scopes\ndatabricks secrets list-secrets my-db-scope\n<\/code><\/pre>\n\n\n\n<p>(<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/p>\n\n\n\n<p><strong>Use in code:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pwd = dbutils.secrets.get(\"my-db-scope\",\"db-password\")\n<\/code><\/pre>\n\n\n\n<p>(<a href=\"https:\/\/docs.databricks.com\/aws\/en\/dev-tools\/databricks-utils?utm_source=chatgpt.com\">Databricks Documentation<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">References (key docs)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Secret management overview<\/strong> (types, AKV setup, create scopes, ACLs, redaction, CLI commands). (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/\">Microsoft Learn<\/a>)<\/li>\n\n\n\n<li><strong>CLI secrets command group<\/strong> (current syntax). (<a href=\"https:\/\/docs.databricks.com\/aws\/en\/dev-tools\/cli\/reference\/secrets-commands?utm_source=chatgpt.com\">Databricks Documentation<\/a>, <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/dev-tools\/cli\/commands?utm_source=chatgpt.com\">Microsoft Learn<\/a>)<\/li>\n\n\n\n<li><strong>dbutils.secrets reference<\/strong> (get\/list helpers). (<a href=\"https:\/\/docs.databricks.com\/aws\/en\/dev-tools\/databricks-utils?utm_source=chatgpt.com\">Databricks Documentation<\/a>)<\/li>\n\n\n\n<li><strong>Secrets in Spark conf \/ env vars<\/strong> (placeholders &amp; security considerations). (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/databricks\/security\/secrets\/secrets-spark-conf-env-var?utm_source=chatgpt.com\">Microsoft Learn<\/a>)<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Hard-coding credentials (DB passwords, API tokens, SAS keys, hosts) in notebooks or jobs is risky. In Databricks you store them as secrets inside a secret scope,&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-838","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/838","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=838"}],"version-history":[{"count":1,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/838\/revisions"}],"predecessor-version":[{"id":839,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/838\/revisions\/839"}],"wp:attachment":[{"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dataopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}