index.html 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537
  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <link rel="icon" href="../assets/images/favicon.png">
  7. <meta name="generator" content="mkdocs-1.1, mkdocs-material-7.1.8">
  8. <title>HashiCorp Vault - External Secrets Operator</title>
  9. <link rel="stylesheet" href="../assets/stylesheets/main.ca7ac06f.min.css">
  10. <link rel="stylesheet" href="../assets/stylesheets/palette.f1a3b89f.min.css">
  11. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  12. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
  13. <style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
  14. <script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-QP38TD8K7V"),document.addEventListener("DOMContentLoaded",function(){"undefined"!=typeof location$&&location$.subscribe(function(t){gtag("config","G-QP38TD8K7V",{page_path:t.pathname})})})</script>
  15. <script async src="https://www.googletagmanager.com/gtag/js?id=G-QP38TD8K7V"></script>
  16. </head>
  17. <body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
  18. <script>function __prefix(e){return new URL("..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
  19. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  20. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  21. <label class="md-overlay" for="__drawer"></label>
  22. <div data-md-component="skip">
  23. <a href="#hashicorp-vault" class="md-skip">
  24. Skip to content
  25. </a>
  26. </div>
  27. <div data-md-component="announce">
  28. </div>
  29. <header class="md-header" data-md-component="header">
  30. <nav class="md-header__inner md-grid" aria-label="Header">
  31. <a href=".." title="External Secrets Operator" class="md-header__button md-logo" aria-label="External Secrets Operator" data-md-component="logo">
  32. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
  33. </a>
  34. <label class="md-header__button md-icon" for="__drawer">
  35. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
  36. </label>
  37. <div class="md-header__title" data-md-component="header-title">
  38. <div class="md-header__ellipsis">
  39. <div class="md-header__topic">
  40. <span class="md-ellipsis">
  41. External Secrets Operator
  42. </span>
  43. </div>
  44. <div class="md-header__topic" data-md-component="header-topic">
  45. <span class="md-ellipsis">
  46. HashiCorp Vault
  47. </span>
  48. </div>
  49. </div>
  50. </div>
  51. <label class="md-header__button md-icon" for="__search">
  52. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
  53. </label>
  54. <div class="md-search" data-md-component="search" role="dialog">
  55. <label class="md-search__overlay" for="__search"></label>
  56. <div class="md-search__inner" role="search">
  57. <form class="md-search__form" name="search">
  58. <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
  59. <label class="md-search__icon md-icon" for="__search">
  60. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
  61. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
  62. </label>
  63. <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
  64. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
  65. </button>
  66. </form>
  67. <div class="md-search__output">
  68. <div class="md-search__scrollwrap" data-md-scrollfix>
  69. <div class="md-search-result" data-md-component="search-result">
  70. <div class="md-search-result__meta">
  71. Initializing search
  72. </div>
  73. <ol class="md-search-result__list"></ol>
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. </div>
  79. <div class="md-header__source">
  80. <a href="https://github.com/external-secrets/external-secrets/" title="Go to repository" class="md-source" data-md-component="source">
  81. <div class="md-source__icon md-icon">
  82. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
  83. </div>
  84. <div class="md-source__repository">
  85. External Secrets Operator
  86. </div>
  87. </a>
  88. </div>
  89. </nav>
  90. </header>
  91. <div class="md-container" data-md-component="container">
  92. <main class="md-main" data-md-component="main">
  93. <div class="md-main__inner md-grid">
  94. <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
  95. <div class="md-sidebar__scrollwrap">
  96. <div class="md-sidebar__inner">
  97. <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  98. <label class="md-nav__title" for="__drawer">
  99. <a href=".." title="External Secrets Operator" class="md-nav__button md-logo" aria-label="External Secrets Operator" data-md-component="logo">
  100. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
  101. </a>
  102. External Secrets Operator
  103. </label>
  104. <div class="md-nav__source">
  105. <a href="https://github.com/external-secrets/external-secrets/" title="Go to repository" class="md-source" data-md-component="source">
  106. <div class="md-source__icon md-icon">
  107. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
  108. </div>
  109. <div class="md-source__repository">
  110. External Secrets Operator
  111. </div>
  112. </a>
  113. </div>
  114. <ul class="md-nav__list" data-md-scrollfix>
  115. <li class="md-nav__item">
  116. <a href=".." class="md-nav__link">
  117. Introduction
  118. </a>
  119. </li>
  120. <li class="md-nav__item">
  121. <a href="../api-overview/" class="md-nav__link">
  122. Overview
  123. </a>
  124. </li>
  125. <li class="md-nav__item md-nav__item--nested">
  126. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
  127. <label class="md-nav__link" for="__nav_3">
  128. API Types
  129. <span class="md-nav__icon md-icon"></span>
  130. </label>
  131. <nav class="md-nav" aria-label="API Types" data-md-level="1">
  132. <label class="md-nav__title" for="__nav_3">
  133. <span class="md-nav__icon md-icon"></span>
  134. API Types
  135. </label>
  136. <ul class="md-nav__list" data-md-scrollfix>
  137. <li class="md-nav__item">
  138. <a href="../api-externalsecret/" class="md-nav__link">
  139. ExternalSecret
  140. </a>
  141. </li>
  142. <li class="md-nav__item">
  143. <a href="../api-secretstore/" class="md-nav__link">
  144. SecretStore
  145. </a>
  146. </li>
  147. <li class="md-nav__item">
  148. <a href="../api-clustersecretstore/" class="md-nav__link">
  149. ClusterSecretStore
  150. </a>
  151. </li>
  152. </ul>
  153. </nav>
  154. </li>
  155. <li class="md-nav__item md-nav__item--nested">
  156. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
  157. <label class="md-nav__link" for="__nav_4">
  158. Guides
  159. <span class="md-nav__icon md-icon"></span>
  160. </label>
  161. <nav class="md-nav" aria-label="Guides" data-md-level="1">
  162. <label class="md-nav__title" for="__nav_4">
  163. <span class="md-nav__icon md-icon"></span>
  164. Guides
  165. </label>
  166. <ul class="md-nav__list" data-md-scrollfix>
  167. <li class="md-nav__item">
  168. <a href="../guides-introduction/" class="md-nav__link">
  169. Introduction
  170. </a>
  171. </li>
  172. <li class="md-nav__item">
  173. <a href="../guides-getting-started/" class="md-nav__link">
  174. Getting started
  175. </a>
  176. </li>
  177. <li class="md-nav__item">
  178. <a href="../guides-templating/" class="md-nav__link">
  179. Advanced Templating
  180. </a>
  181. </li>
  182. <li class="md-nav__item">
  183. <a href="../guides-controller-class/" class="md-nav__link">
  184. Controller Classes
  185. </a>
  186. </li>
  187. <li class="md-nav__item">
  188. <a href="../guides-all-keys-one-secret/" class="md-nav__link">
  189. All keys, One secret
  190. </a>
  191. </li>
  192. <li class="md-nav__item">
  193. <a href="../guides-common-k8s-secret-types/" class="md-nav__link">
  194. Common K8S Secret Types
  195. </a>
  196. </li>
  197. <li class="md-nav__item">
  198. <a href="../guides-multi-tenancy/" class="md-nav__link">
  199. Multi Tenancy
  200. </a>
  201. </li>
  202. <li class="md-nav__item">
  203. <a href="../guides-metrics/" class="md-nav__link">
  204. Metrics
  205. </a>
  206. </li>
  207. <li class="md-nav__item">
  208. <a href="../guides-using-latest-image/" class="md-nav__link">
  209. Using Latest Image
  210. </a>
  211. </li>
  212. <li class="md-nav__item">
  213. <a href="../guides-gitops-using-fluxcd/" class="md-nav__link">
  214. GitOps using FluxCD
  215. </a>
  216. </li>
  217. </ul>
  218. </nav>
  219. </li>
  220. <li class="md-nav__item md-nav__item--active md-nav__item--nested">
  221. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" checked>
  222. <label class="md-nav__link" for="__nav_5">
  223. Provider
  224. <span class="md-nav__icon md-icon"></span>
  225. </label>
  226. <nav class="md-nav" aria-label="Provider" data-md-level="1">
  227. <label class="md-nav__title" for="__nav_5">
  228. <span class="md-nav__icon md-icon"></span>
  229. Provider
  230. </label>
  231. <ul class="md-nav__list" data-md-scrollfix>
  232. <li class="md-nav__item md-nav__item--nested">
  233. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_1" type="checkbox" id="__nav_5_1" >
  234. <label class="md-nav__link" for="__nav_5_1">
  235. AWS
  236. <span class="md-nav__icon md-icon"></span>
  237. </label>
  238. <nav class="md-nav" aria-label="AWS" data-md-level="2">
  239. <label class="md-nav__title" for="__nav_5_1">
  240. <span class="md-nav__icon md-icon"></span>
  241. AWS
  242. </label>
  243. <ul class="md-nav__list" data-md-scrollfix>
  244. <li class="md-nav__item">
  245. <a href="../provider-aws-secrets-manager/" class="md-nav__link">
  246. Secrets Manager
  247. </a>
  248. </li>
  249. <li class="md-nav__item">
  250. <a href="../provider-aws-parameter-store/" class="md-nav__link">
  251. Parameter Store
  252. </a>
  253. </li>
  254. </ul>
  255. </nav>
  256. </li>
  257. <li class="md-nav__item md-nav__item--nested">
  258. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" >
  259. <label class="md-nav__link" for="__nav_5_2">
  260. Azure
  261. <span class="md-nav__icon md-icon"></span>
  262. </label>
  263. <nav class="md-nav" aria-label="Azure" data-md-level="2">
  264. <label class="md-nav__title" for="__nav_5_2">
  265. <span class="md-nav__icon md-icon"></span>
  266. Azure
  267. </label>
  268. <ul class="md-nav__list" data-md-scrollfix>
  269. <li class="md-nav__item">
  270. <a href="../provider-azure-key-vault/" class="md-nav__link">
  271. Key Vault
  272. </a>
  273. </li>
  274. </ul>
  275. </nav>
  276. </li>
  277. <li class="md-nav__item md-nav__item--nested">
  278. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_3" type="checkbox" id="__nav_5_3" >
  279. <label class="md-nav__link" for="__nav_5_3">
  280. Google
  281. <span class="md-nav__icon md-icon"></span>
  282. </label>
  283. <nav class="md-nav" aria-label="Google" data-md-level="2">
  284. <label class="md-nav__title" for="__nav_5_3">
  285. <span class="md-nav__icon md-icon"></span>
  286. Google
  287. </label>
  288. <ul class="md-nav__list" data-md-scrollfix>
  289. <li class="md-nav__item">
  290. <a href="../provider-google-secrets-manager/" class="md-nav__link">
  291. Secrets Manager
  292. </a>
  293. </li>
  294. </ul>
  295. </nav>
  296. </li>
  297. <li class="md-nav__item md-nav__item--nested">
  298. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_4" type="checkbox" id="__nav_5_4" >
  299. <label class="md-nav__link" for="__nav_5_4">
  300. IBM
  301. <span class="md-nav__icon md-icon"></span>
  302. </label>
  303. <nav class="md-nav" aria-label="IBM" data-md-level="2">
  304. <label class="md-nav__title" for="__nav_5_4">
  305. <span class="md-nav__icon md-icon"></span>
  306. IBM
  307. </label>
  308. <ul class="md-nav__list" data-md-scrollfix>
  309. <li class="md-nav__item">
  310. <a href="../provider-ibm-secrets-manager/" class="md-nav__link">
  311. Secrets Manager
  312. </a>
  313. </li>
  314. </ul>
  315. </nav>
  316. </li>
  317. <li class="md-nav__item">
  318. <a href="../provider-akeyless/" class="md-nav__link">
  319. Akeyless
  320. </a>
  321. </li>
  322. <li class="md-nav__item md-nav__item--active">
  323. <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
  324. <label class="md-nav__link md-nav__link--active" for="__toc">
  325. HashiCorp Vault
  326. <span class="md-nav__icon md-icon"></span>
  327. </label>
  328. <a href="./" class="md-nav__link md-nav__link--active">
  329. HashiCorp Vault
  330. </a>
  331. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  332. <label class="md-nav__title" for="__toc">
  333. <span class="md-nav__icon md-icon"></span>
  334. Table of contents
  335. </label>
  336. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  337. <li class="md-nav__item">
  338. <a href="#hashicorp-vault" class="md-nav__link">
  339. Hashicorp Vault
  340. </a>
  341. <nav class="md-nav" aria-label="Hashicorp Vault">
  342. <ul class="md-nav__list">
  343. <li class="md-nav__item">
  344. <a href="#example" class="md-nav__link">
  345. Example
  346. </a>
  347. <nav class="md-nav" aria-label="Example">
  348. <ul class="md-nav__list">
  349. <li class="md-nav__item">
  350. <a href="#limitations" class="md-nav__link">
  351. Limitations
  352. </a>
  353. </li>
  354. </ul>
  355. </nav>
  356. </li>
  357. <li class="md-nav__item">
  358. <a href="#authentication" class="md-nav__link">
  359. Authentication
  360. </a>
  361. <nav class="md-nav" aria-label="Authentication">
  362. <ul class="md-nav__list">
  363. <li class="md-nav__item">
  364. <a href="#token-based-authentication" class="md-nav__link">
  365. Token-based authentication
  366. </a>
  367. </li>
  368. <li class="md-nav__item">
  369. <a href="#approle-authentication-example" class="md-nav__link">
  370. AppRole authentication example
  371. </a>
  372. </li>
  373. <li class="md-nav__item">
  374. <a href="#kubernetes-authentication" class="md-nav__link">
  375. Kubernetes authentication
  376. </a>
  377. </li>
  378. <li class="md-nav__item">
  379. <a href="#ldap-authentication" class="md-nav__link">
  380. LDAP authentication
  381. </a>
  382. </li>
  383. <li class="md-nav__item">
  384. <a href="#jwtoidc-authentication" class="md-nav__link">
  385. JWT/OIDC authentication
  386. </a>
  387. </li>
  388. </ul>
  389. </nav>
  390. </li>
  391. <li class="md-nav__item">
  392. <a href="#vault-enterprise-and-eventual-consistency" class="md-nav__link">
  393. Vault Enterprise and Eventual Consistency
  394. </a>
  395. <nav class="md-nav" aria-label="Vault Enterprise and Eventual Consistency">
  396. <ul class="md-nav__list">
  397. <li class="md-nav__item">
  398. <a href="#read-your-writes" class="md-nav__link">
  399. Read Your Writes
  400. </a>
  401. </li>
  402. <li class="md-nav__item">
  403. <a href="#forward-inconsistent" class="md-nav__link">
  404. Forward Inconsistent
  405. </a>
  406. </li>
  407. </ul>
  408. </nav>
  409. </li>
  410. </ul>
  411. </nav>
  412. </li>
  413. </ul>
  414. </nav>
  415. </li>
  416. <li class="md-nav__item md-nav__item--nested">
  417. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_7" type="checkbox" id="__nav_5_7" >
  418. <label class="md-nav__link" for="__nav_5_7">
  419. Yandex
  420. <span class="md-nav__icon md-icon"></span>
  421. </label>
  422. <nav class="md-nav" aria-label="Yandex" data-md-level="2">
  423. <label class="md-nav__title" for="__nav_5_7">
  424. <span class="md-nav__icon md-icon"></span>
  425. Yandex
  426. </label>
  427. <ul class="md-nav__list" data-md-scrollfix>
  428. <li class="md-nav__item">
  429. <a href="../provider-yandex-lockbox/" class="md-nav__link">
  430. Lockbox
  431. </a>
  432. </li>
  433. </ul>
  434. </nav>
  435. </li>
  436. <li class="md-nav__item md-nav__item--nested">
  437. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_8" type="checkbox" id="__nav_5_8" >
  438. <label class="md-nav__link" for="__nav_5_8">
  439. Gitlab
  440. <span class="md-nav__icon md-icon"></span>
  441. </label>
  442. <nav class="md-nav" aria-label="Gitlab" data-md-level="2">
  443. <label class="md-nav__title" for="__nav_5_8">
  444. <span class="md-nav__icon md-icon"></span>
  445. Gitlab
  446. </label>
  447. <ul class="md-nav__list" data-md-scrollfix>
  448. <li class="md-nav__item">
  449. <a href="../provider-gitlab-project-variables/" class="md-nav__link">
  450. Gitlab Project Variables
  451. </a>
  452. </li>
  453. </ul>
  454. </nav>
  455. </li>
  456. <li class="md-nav__item md-nav__item--nested">
  457. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_9" type="checkbox" id="__nav_5_9" >
  458. <label class="md-nav__link" for="__nav_5_9">
  459. Oracle
  460. <span class="md-nav__icon md-icon"></span>
  461. </label>
  462. <nav class="md-nav" aria-label="Oracle" data-md-level="2">
  463. <label class="md-nav__title" for="__nav_5_9">
  464. <span class="md-nav__icon md-icon"></span>
  465. Oracle
  466. </label>
  467. <ul class="md-nav__list" data-md-scrollfix>
  468. <li class="md-nav__item">
  469. <a href="../provider-oracle-vault/" class="md-nav__link">
  470. Oracle Vault
  471. </a>
  472. </li>
  473. </ul>
  474. </nav>
  475. </li>
  476. <li class="md-nav__item">
  477. <a href="../provider-webhook/" class="md-nav__link">
  478. Webhook
  479. </a>
  480. </li>
  481. </ul>
  482. </nav>
  483. </li>
  484. <li class="md-nav__item md-nav__item--nested">
  485. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
  486. <label class="md-nav__link" for="__nav_6">
  487. References
  488. <span class="md-nav__icon md-icon"></span>
  489. </label>
  490. <nav class="md-nav" aria-label="References" data-md-level="1">
  491. <label class="md-nav__title" for="__nav_6">
  492. <span class="md-nav__icon md-icon"></span>
  493. References
  494. </label>
  495. <ul class="md-nav__list" data-md-scrollfix>
  496. <li class="md-nav__item">
  497. <a href="../spec/" class="md-nav__link">
  498. API specification
  499. </a>
  500. </li>
  501. </ul>
  502. </nav>
  503. </li>
  504. <li class="md-nav__item md-nav__item--nested">
  505. <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
  506. <label class="md-nav__link" for="__nav_7">
  507. Contributing
  508. <span class="md-nav__icon md-icon"></span>
  509. </label>
  510. <nav class="md-nav" aria-label="Contributing" data-md-level="1">
  511. <label class="md-nav__title" for="__nav_7">
  512. <span class="md-nav__icon md-icon"></span>
  513. Contributing
  514. </label>
  515. <ul class="md-nav__list" data-md-scrollfix>
  516. <li class="md-nav__item">
  517. <a href="../contributing-devguide/" class="md-nav__link">
  518. Developer guide
  519. </a>
  520. </li>
  521. <li class="md-nav__item">
  522. <a href="../contributing-process/" class="md-nav__link">
  523. Contributing Process
  524. </a>
  525. </li>
  526. <li class="md-nav__item">
  527. <a href="../contributing-coc/" class="md-nav__link">
  528. Code of Conduct
  529. </a>
  530. </li>
  531. </ul>
  532. </nav>
  533. </li>
  534. <li class="md-nav__item">
  535. <a href="../deprecation-policy/" class="md-nav__link">
  536. Deprecation Policy
  537. </a>
  538. </li>
  539. </ul>
  540. </nav>
  541. </div>
  542. </div>
  543. </div>
  544. <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
  545. <div class="md-sidebar__scrollwrap">
  546. <div class="md-sidebar__inner">
  547. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  548. <label class="md-nav__title" for="__toc">
  549. <span class="md-nav__icon md-icon"></span>
  550. Table of contents
  551. </label>
  552. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  553. <li class="md-nav__item">
  554. <a href="#hashicorp-vault" class="md-nav__link">
  555. Hashicorp Vault
  556. </a>
  557. <nav class="md-nav" aria-label="Hashicorp Vault">
  558. <ul class="md-nav__list">
  559. <li class="md-nav__item">
  560. <a href="#example" class="md-nav__link">
  561. Example
  562. </a>
  563. <nav class="md-nav" aria-label="Example">
  564. <ul class="md-nav__list">
  565. <li class="md-nav__item">
  566. <a href="#limitations" class="md-nav__link">
  567. Limitations
  568. </a>
  569. </li>
  570. </ul>
  571. </nav>
  572. </li>
  573. <li class="md-nav__item">
  574. <a href="#authentication" class="md-nav__link">
  575. Authentication
  576. </a>
  577. <nav class="md-nav" aria-label="Authentication">
  578. <ul class="md-nav__list">
  579. <li class="md-nav__item">
  580. <a href="#token-based-authentication" class="md-nav__link">
  581. Token-based authentication
  582. </a>
  583. </li>
  584. <li class="md-nav__item">
  585. <a href="#approle-authentication-example" class="md-nav__link">
  586. AppRole authentication example
  587. </a>
  588. </li>
  589. <li class="md-nav__item">
  590. <a href="#kubernetes-authentication" class="md-nav__link">
  591. Kubernetes authentication
  592. </a>
  593. </li>
  594. <li class="md-nav__item">
  595. <a href="#ldap-authentication" class="md-nav__link">
  596. LDAP authentication
  597. </a>
  598. </li>
  599. <li class="md-nav__item">
  600. <a href="#jwtoidc-authentication" class="md-nav__link">
  601. JWT/OIDC authentication
  602. </a>
  603. </li>
  604. </ul>
  605. </nav>
  606. </li>
  607. <li class="md-nav__item">
  608. <a href="#vault-enterprise-and-eventual-consistency" class="md-nav__link">
  609. Vault Enterprise and Eventual Consistency
  610. </a>
  611. <nav class="md-nav" aria-label="Vault Enterprise and Eventual Consistency">
  612. <ul class="md-nav__list">
  613. <li class="md-nav__item">
  614. <a href="#read-your-writes" class="md-nav__link">
  615. Read Your Writes
  616. </a>
  617. </li>
  618. <li class="md-nav__item">
  619. <a href="#forward-inconsistent" class="md-nav__link">
  620. Forward Inconsistent
  621. </a>
  622. </li>
  623. </ul>
  624. </nav>
  625. </li>
  626. </ul>
  627. </nav>
  628. </li>
  629. </ul>
  630. </nav>
  631. </div>
  632. </div>
  633. </div>
  634. <div class="md-content" data-md-component="content">
  635. <article class="md-content__inner md-typeset">
  636. <a href="https://github.com/external-secrets/external-secrets/edit/master/docs/provider-hashicorp-vault.md" title="Edit this page" class="md-content__button md-icon">
  637. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
  638. </a>
  639. <h1>HashiCorp Vault</h1>
  640. <p><img alt="HCP Vault" src="../pictures/diagrams-provider-vault.png" /></p>
  641. <h2 id="hashicorp-vault">Hashicorp Vault</h2>
  642. <p>External Secrets Operator integrates with <a href="https://www.vaultproject.io/">HashiCorp Vault</a> for secret
  643. management. Vault itself implements lots of different secret engines, as of now we only support the
  644. <a href="https://www.vaultproject.io/docs/secrets/kv">KV Secrets Engine</a>.</p>
  645. <h3 id="example">Example</h3>
  646. <p>First, create a SecretStore with a vault backend. For the sake of simplicity we'll use a static token <code>root</code>:</p>
  647. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
  648. <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">SecretStore</span>
  649. <span class="nt">metadata</span><span class="p">:</span>
  650. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">vault-backend</span>
  651. <span class="nt">spec</span><span class="p">:</span>
  652. <span class="nt">provider</span><span class="p">:</span>
  653. <span class="nt">vault</span><span class="p">:</span>
  654. <span class="nt">server</span><span class="p">:</span> <span class="s">&quot;http://my.vault.server:8200&quot;</span>
  655. <span class="nt">path</span><span class="p">:</span> <span class="s">&quot;secret&quot;</span>
  656. <span class="nt">version</span><span class="p">:</span> <span class="s">&quot;v2&quot;</span>
  657. <span class="nt">auth</span><span class="p">:</span>
  658. <span class="c1"># points to a secret that contains a vault token</span>
  659. <span class="c1"># https://www.vaultproject.io/docs/auth/token</span>
  660. <span class="nt">tokenSecretRef</span><span class="p">:</span>
  661. <span class="nt">name</span><span class="p">:</span> <span class="s">&quot;vault-token&quot;</span>
  662. <span class="nt">namespace</span><span class="p">:</span> <span class="s">&quot;default&quot;</span>
  663. <span class="nt">key</span><span class="p">:</span> <span class="s">&quot;token&quot;</span>
  664. <span class="nn">---</span>
  665. <span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">v1</span>
  666. <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Secret</span>
  667. <span class="nt">metadata</span><span class="p">:</span>
  668. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">vault-token</span>
  669. <span class="nt">data</span><span class="p">:</span>
  670. <span class="nt">token</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">cm9vdA==</span> <span class="c1"># &quot;root&quot;</span>
  671. </code></pre></div>
  672. <p>Then create a simple k/v pair at path <code>secret/foo</code>:</p>
  673. <div class="highlight"><pre><span></span><code>vault kv put secret/foo my-value=s3cr3t
  674. </code></pre></div>
  675. <p>Now create a ExternalSecret that uses the above SecretStore:</p>
  676. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
  677. <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  678. <span class="nt">metadata</span><span class="p">:</span>
  679. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">vault-example</span>
  680. <span class="nt">spec</span><span class="p">:</span>
  681. <span class="nt">refreshInterval</span><span class="p">:</span> <span class="s">&quot;15s&quot;</span>
  682. <span class="nt">secretStoreRef</span><span class="p">:</span>
  683. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">vault-backend</span>
  684. <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">SecretStore</span>
  685. <span class="nt">target</span><span class="p">:</span>
  686. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">example-sync</span>
  687. <span class="nt">data</span><span class="p">:</span>
  688. <span class="p p-Indicator">-</span> <span class="nt">secretKey</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">foobar</span>
  689. <span class="nt">remoteRef</span><span class="p">:</span>
  690. <span class="nt">key</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">secret/foo</span>
  691. <span class="nt">property</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">my-value</span>
  692. <span class="nn">---</span>
  693. <span class="c1"># will create a secret with:</span>
  694. <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Secret</span>
  695. <span class="nt">metadata</span><span class="p">:</span>
  696. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">example-sync</span>
  697. <span class="nt">data</span><span class="p">:</span>
  698. <span class="nt">foobar</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">czNjcjN0</span>
  699. </code></pre></div>
  700. <h4 id="limitations">Limitations</h4>
  701. <p>Vault supports only simple key/value pairs - nested objects are not supported. Hence specifying <code>gjson</code> properties like other providers support it is not supported.</p>
  702. <h3 id="authentication">Authentication</h3>
  703. <p>We support five different modes for authentication:
  704. <a href="https://www.vaultproject.io/docs/auth/token">token-based</a>,
  705. <a href="https://www.vaultproject.io/docs/auth/approle">appRole</a>,
  706. <a href="https://www.vaultproject.io/docs/auth/kubernetes">kubernetes-native</a>,
  707. <a href="https://www.vaultproject.io/docs/auth/ldap">ldap</a> and
  708. <a href="https://www.vaultproject.io/docs/auth/jwt">jwt/odic</a>, each one comes with it's own
  709. trade-offs. Depending on the authentication method you need to adapt your environment.</p>
  710. <h4 id="token-based-authentication">Token-based authentication</h4>
  711. <p>A static token is stored in a <code>Kind=Secret</code> and is used to authenticate with vault.</p>
  712. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
  713. <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">SecretStore</span>
  714. <span class="nt">metadata</span><span class="p">:</span>
  715. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">vault-backend</span>
  716. <span class="nt">namespace</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">example</span>
  717. <span class="nt">spec</span><span class="p">:</span>
  718. <span class="nt">provider</span><span class="p">:</span>
  719. <span class="nt">vault</span><span class="p">:</span>
  720. <span class="nt">server</span><span class="p">:</span> <span class="s">&quot;https://vault.acme.org&quot;</span>
  721. <span class="nt">path</span><span class="p">:</span> <span class="s">&quot;secret&quot;</span>
  722. <span class="nt">version</span><span class="p">:</span> <span class="s">&quot;v2&quot;</span>
  723. <span class="nt">auth</span><span class="p">:</span>
  724. <span class="c1"># points to a secret that contains a vault token</span>
  725. <span class="c1"># https://www.vaultproject.io/docs/auth/token</span>
  726. <span class="nt">tokenSecretRef</span><span class="p">:</span>
  727. <span class="nt">name</span><span class="p">:</span> <span class="s">&quot;my-secret&quot;</span>
  728. <span class="nt">namespace</span><span class="p">:</span> <span class="s">&quot;secret-admin&quot;</span>
  729. <span class="nt">key</span><span class="p">:</span> <span class="s">&quot;vault-token&quot;</span>
  730. </code></pre></div>
  731. <h4 id="approle-authentication-example">AppRole authentication example</h4>
  732. <p><a href="https://www.vaultproject.io/docs/auth/approle">AppRole authentication</a> reads the secret id from a
  733. <code>Kind=Secret</code> and uses the specified <code>roleId</code> to aquire a temporary token to fetch secrets.</p>
  734. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
  735. <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">SecretStore</span>
  736. <span class="nt">metadata</span><span class="p">:</span>
  737. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">vault-backend</span>
  738. <span class="nt">namespace</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">example</span>
  739. <span class="nt">spec</span><span class="p">:</span>
  740. <span class="nt">provider</span><span class="p">:</span>
  741. <span class="nt">vault</span><span class="p">:</span>
  742. <span class="nt">server</span><span class="p">:</span> <span class="s">&quot;https://vault.acme.org&quot;</span>
  743. <span class="nt">path</span><span class="p">:</span> <span class="s">&quot;secret&quot;</span>
  744. <span class="nt">version</span><span class="p">:</span> <span class="s">&quot;v2&quot;</span>
  745. <span class="nt">auth</span><span class="p">:</span>
  746. <span class="c1"># VaultAppRole authenticates with Vault using the</span>
  747. <span class="c1"># App Role auth mechanism</span>
  748. <span class="c1"># https://www.vaultproject.io/docs/auth/approle</span>
  749. <span class="nt">appRole</span><span class="p">:</span>
  750. <span class="c1"># Path where the App Role authentication backend is mounted</span>
  751. <span class="nt">path</span><span class="p">:</span> <span class="s">&quot;approle&quot;</span>
  752. <span class="c1"># RoleID configured in the App Role authentication backend</span>
  753. <span class="nt">roleId</span><span class="p">:</span> <span class="s">&quot;db02de05-fa39-4855-059b-67221c5c2f63&quot;</span>
  754. <span class="c1"># Reference to a key in a K8 Secret that contains the App Role SecretId</span>
  755. <span class="nt">secretRef</span><span class="p">:</span>
  756. <span class="nt">name</span><span class="p">:</span> <span class="s">&quot;my-secret&quot;</span>
  757. <span class="nt">namespace</span><span class="p">:</span> <span class="s">&quot;secret-admin&quot;</span>
  758. <span class="nt">key</span><span class="p">:</span> <span class="s">&quot;secret-id&quot;</span>
  759. </code></pre></div>
  760. <h4 id="kubernetes-authentication">Kubernetes authentication</h4>
  761. <p><a href="https://www.vaultproject.io/docs/auth/kubernetes">Kubernetes-native authentication</a> has three
  762. options of optaining credentials for vault:</p>
  763. <ol>
  764. <li>by using a service account jwt referenced in <code>serviceAccountRef</code></li>
  765. <li>by using the jwt from a <code>Kind=Secret</code> referenced by the <code>secretRef</code></li>
  766. <li>by using transient credentials from the mounted service account token within the
  767. external-secrets operator</li>
  768. </ol>
  769. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
  770. <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">SecretStore</span>
  771. <span class="nt">metadata</span><span class="p">:</span>
  772. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">vault-backend</span>
  773. <span class="nt">namespace</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">example</span>
  774. <span class="nt">spec</span><span class="p">:</span>
  775. <span class="nt">provider</span><span class="p">:</span>
  776. <span class="nt">vault</span><span class="p">:</span>
  777. <span class="nt">server</span><span class="p">:</span> <span class="s">&quot;https://vault.acme.org&quot;</span>
  778. <span class="nt">path</span><span class="p">:</span> <span class="s">&quot;secret&quot;</span>
  779. <span class="nt">version</span><span class="p">:</span> <span class="s">&quot;v2&quot;</span>
  780. <span class="nt">auth</span><span class="p">:</span>
  781. <span class="c1"># Authenticate against Vault using a Kubernetes ServiceAccount</span>
  782. <span class="c1"># token stored in a Secret.</span>
  783. <span class="c1"># https://www.vaultproject.io/docs/auth/kubernetes</span>
  784. <span class="nt">kubernetes</span><span class="p">:</span>
  785. <span class="c1"># Path where the Kubernetes authentication backend is mounted in Vault</span>
  786. <span class="nt">mountPath</span><span class="p">:</span> <span class="s">&quot;kubernetes&quot;</span>
  787. <span class="c1"># A required field containing the Vault Role to assume.</span>
  788. <span class="nt">role</span><span class="p">:</span> <span class="s">&quot;demo&quot;</span>
  789. <span class="c1"># Optional service account field containing the name</span>
  790. <span class="c1"># of a kubernetes ServiceAccount</span>
  791. <span class="nt">serviceAccountRef</span><span class="p">:</span>
  792. <span class="nt">name</span><span class="p">:</span> <span class="s">&quot;my-sa&quot;</span>
  793. <span class="nt">namespace</span><span class="p">:</span> <span class="s">&quot;secret-admin&quot;</span>
  794. <span class="c1"># Optional secret field containing a Kubernetes ServiceAccount JWT</span>
  795. <span class="c1"># used for authenticating with Vault</span>
  796. <span class="nt">secretRef</span><span class="p">:</span>
  797. <span class="nt">name</span><span class="p">:</span> <span class="s">&quot;my-secret&quot;</span>
  798. <span class="nt">namespace</span><span class="p">:</span> <span class="s">&quot;secret-admin&quot;</span>
  799. <span class="nt">key</span><span class="p">:</span> <span class="s">&quot;vault&quot;</span>
  800. </code></pre></div>
  801. <h4 id="ldap-authentication">LDAP authentication</h4>
  802. <p><a href="https://www.vaultproject.io/docs/auth/ldap">LDAP authentication</a> uses
  803. username/password pair to get an access token. Username is stored directly in
  804. a <code>Kind=SecretStore</code> or <code>Kind=ClusterSecretStore</code> resource, password is stored
  805. in a <code>Kind=Secret</code> referenced by the <code>secretRef</code>.</p>
  806. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
  807. <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">SecretStore</span>
  808. <span class="nt">metadata</span><span class="p">:</span>
  809. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">vault-backend</span>
  810. <span class="nt">namespace</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">example</span>
  811. <span class="nt">spec</span><span class="p">:</span>
  812. <span class="nt">provider</span><span class="p">:</span>
  813. <span class="nt">vault</span><span class="p">:</span>
  814. <span class="nt">server</span><span class="p">:</span> <span class="s">&quot;https://vault.acme.org&quot;</span>
  815. <span class="nt">path</span><span class="p">:</span> <span class="s">&quot;secret&quot;</span>
  816. <span class="nt">version</span><span class="p">:</span> <span class="s">&quot;v2&quot;</span>
  817. <span class="nt">auth</span><span class="p">:</span>
  818. <span class="c1"># VaultLdap authenticates with Vault using the LDAP auth mechanism</span>
  819. <span class="c1"># https://www.vaultproject.io/docs/auth/ldap</span>
  820. <span class="nt">ldap</span><span class="p">:</span>
  821. <span class="c1"># Path where the LDAP authentication backend is mounted</span>
  822. <span class="nt">path</span><span class="p">:</span> <span class="s">&quot;ldap&quot;</span>
  823. <span class="c1"># LDAP username</span>
  824. <span class="nt">username</span><span class="p">:</span> <span class="s">&quot;username&quot;</span>
  825. <span class="nt">secretRef</span><span class="p">:</span>
  826. <span class="nt">name</span><span class="p">:</span> <span class="s">&quot;my-secret&quot;</span>
  827. <span class="nt">namespace</span><span class="p">:</span> <span class="s">&quot;secret-admin&quot;</span>
  828. <span class="nt">key</span><span class="p">:</span> <span class="s">&quot;ldap-password&quot;</span>
  829. </code></pre></div>
  830. <h4 id="jwtoidc-authentication">JWT/OIDC authentication</h4>
  831. <p><a href="https://www.vaultproject.io/docs/auth/jwt">JWT/OIDC</a> uses a
  832. <a href="https://jwt.io/">JWT</a> token stored in a <code>Kind=Secret</code> and referenced by the
  833. <code>secretRef</code>. Optionally a <code>role</code> field can be defined in a <code>Kind=SecretStore</code>
  834. or <code>Kind=ClusterSecretStore</code> resource.</p>
  835. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
  836. <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">SecretStore</span>
  837. <span class="nt">metadata</span><span class="p">:</span>
  838. <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">vault-backend</span>
  839. <span class="nt">namespace</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">example</span>
  840. <span class="nt">spec</span><span class="p">:</span>
  841. <span class="nt">provider</span><span class="p">:</span>
  842. <span class="nt">vault</span><span class="p">:</span>
  843. <span class="nt">server</span><span class="p">:</span> <span class="s">&quot;https://vault.acme.org&quot;</span>
  844. <span class="nt">path</span><span class="p">:</span> <span class="s">&quot;secret&quot;</span>
  845. <span class="nt">version</span><span class="p">:</span> <span class="s">&quot;v2&quot;</span>
  846. <span class="nt">auth</span><span class="p">:</span>
  847. <span class="c1"># VaultJwt authenticates with Vault using the JWT/OIDC auth mechanism</span>
  848. <span class="c1"># https://www.vaultproject.io/docs/auth/jwt</span>
  849. <span class="nt">jwt</span><span class="p">:</span>
  850. <span class="c1"># Path where the JWT authentication backend is mounted</span>
  851. <span class="nt">path</span><span class="p">:</span> <span class="s">&quot;jwt&quot;</span>
  852. <span class="c1"># JWT role configured in a Vault server, optional.</span>
  853. <span class="nt">role</span><span class="p">:</span> <span class="s">&quot;vault-jwt-role&quot;</span>
  854. <span class="nt">secretRef</span><span class="p">:</span>
  855. <span class="nt">name</span><span class="p">:</span> <span class="s">&quot;my-secret&quot;</span>
  856. <span class="nt">namespace</span><span class="p">:</span> <span class="s">&quot;secret-admin&quot;</span>
  857. <span class="nt">key</span><span class="p">:</span> <span class="s">&quot;jwt-token&quot;</span>
  858. </code></pre></div>
  859. <h3 id="vault-enterprise-and-eventual-consistency">Vault Enterprise and Eventual Consistency</h3>
  860. <p>When using Vault Enterprise with <a href="https://www.vaultproject.io/docs/enterprise/consistency#performance-standby-nodes">performance standby nodes</a>,
  861. any follower can handle read requests immediately after the provider has
  862. authenticated. Since Vault becomes eventually consistent in this mode, these
  863. requests can fail if the login has not yet propagated to each server's local
  864. state.</p>
  865. <p>Below are two different solutions to this scenario. You'll need to review them
  866. and pick the best fit for your environment and Vault configuration.</p>
  867. <h4 id="read-your-writes">Read Your Writes</h4>
  868. <p>The simplest method is simply utilizing the <code>X-Vault-Index</code> header returned on
  869. all write requests (including logins). Passing this header back on subsequent
  870. requests instructs the Vault client to retry the request until the server has an
  871. index greater than or equal to that returned with the last write.</p>
  872. <p>Obviously though, this has a performance hit because the read is blocked until
  873. the follower's local state has caught up.</p>
  874. <h4 id="forward-inconsistent">Forward Inconsistent</h4>
  875. <p>In addition to the aforementioned <code>X-Vault-Index</code> header, Vault also supports
  876. proxying inconsistent requests to the current cluster leader for immediate
  877. read-after-write consistency. This is achieved by setting the <code>X-Vault-Inconsistent</code>
  878. header to <code>forward-active-node</code>. By default, this behavior is disabled and must
  879. be explicitly enabled in the server's <a href="https://www.vaultproject.io/docs/configuration/replication#allow_forwarding_via_header">replication configuration</a>.</p>
  880. </article>
  881. </div>
  882. </div>
  883. </main>
  884. <footer class="md-footer">
  885. <nav class="md-footer__inner md-grid" aria-label="Footer">
  886. <a href="../provider-akeyless/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Akeyless" rel="prev">
  887. <div class="md-footer__button md-icon">
  888. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
  889. </div>
  890. <div class="md-footer__title">
  891. <div class="md-ellipsis">
  892. <span class="md-footer__direction">
  893. Previous
  894. </span>
  895. Akeyless
  896. </div>
  897. </div>
  898. </a>
  899. <a href="../provider-yandex-lockbox/" class="md-footer__link md-footer__link--next" aria-label="Next: Lockbox" rel="next">
  900. <div class="md-footer__title">
  901. <div class="md-ellipsis">
  902. <span class="md-footer__direction">
  903. Next
  904. </span>
  905. Lockbox
  906. </div>
  907. </div>
  908. <div class="md-footer__button md-icon">
  909. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
  910. </div>
  911. </a>
  912. </nav>
  913. <div class="md-footer-meta md-typeset">
  914. <div class="md-footer-meta__inner md-grid">
  915. <div class="md-footer-copyright">
  916. Made with
  917. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  918. Material for MkDocs
  919. </a>
  920. </div>
  921. </div>
  922. </div>
  923. </footer>
  924. </div>
  925. <div class="md-dialog" data-md-component="dialog">
  926. <div class="md-dialog__inner md-typeset"></div>
  927. </div>
  928. <script id="__config" type="application/json">{"base": "..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing", "select.version.title": "Select version"}, "search": "../assets/javascripts/workers/search.b0710199.min.js", "version": {"provider": "mike"}}</script>
  929. <script src="../assets/javascripts/bundle.76f349be.min.js"></script>
  930. </body>
  931. </html>