index.html 146 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991
  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="prev" href="../datafrom-rewrite/">
  7. <link rel="next" href="../templating-v1/">
  8. <link rel="icon" href="../../pictures/eso-round-logo.svg">
  9. <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
  10. <title>v2 - External Secrets Operator</title>
  11. <link rel="stylesheet" href="../../assets/stylesheets/main.484c7ddc.min.css">
  12. <link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
  13. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  14. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
  15. <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
  16. <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
  17. <script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-QP38TD8K7V"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-QP38TD8K7V",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-QP38TD8K7V",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script>
  18. <script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
  19. </head>
  20. <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
  21. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  22. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  23. <label class="md-overlay" for="__drawer"></label>
  24. <div data-md-component="skip">
  25. <a href="#advanced-templating-v2" class="md-skip">
  26. Skip to content
  27. </a>
  28. </div>
  29. <div data-md-component="announce">
  30. </div>
  31. <div data-md-color-scheme="default" data-md-component="outdated" hidden>
  32. <aside class="md-banner md-banner--warning">
  33. <div class="md-banner__inner md-grid md-typeset">
  34. You're not viewing the latest version.
  35. <a href="../../..">
  36. <strong>Click here to go to latest.</strong>
  37. </a>
  38. </div>
  39. <script>var el=document.querySelector("[data-md-component=outdated]"),base=new URL("../.."),outdated=__md_get("__outdated",sessionStorage,base);!0===outdated&&el&&(el.hidden=!1)</script>
  40. </aside>
  41. </div>
  42. <header class="md-header" data-md-component="header">
  43. <nav class="md-header__inner md-grid" aria-label="Header">
  44. <a href="../.." title="External Secrets Operator" class="md-header__button md-logo" aria-label="External Secrets Operator" data-md-component="logo">
  45. <img src="../../pictures/eso-round-logo.svg" alt="logo">
  46. </a>
  47. <label class="md-header__button md-icon" for="__drawer">
  48. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
  49. </label>
  50. <div class="md-header__title" data-md-component="header-title">
  51. <div class="md-header__ellipsis">
  52. <div class="md-header__topic">
  53. <span class="md-ellipsis">
  54. External Secrets Operator
  55. </span>
  56. </div>
  57. <div class="md-header__topic" data-md-component="header-topic">
  58. <span class="md-ellipsis">
  59. v2
  60. </span>
  61. </div>
  62. </div>
  63. </div>
  64. <form class="md-header__option" data-md-component="palette">
  65. <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
  66. <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
  67. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
  68. </label>
  69. <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
  70. <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
  71. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
  72. </label>
  73. </form>
  74. <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
  75. <label class="md-header__button md-icon" for="__search">
  76. <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.52 6.52 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 5"/></svg>
  77. </label>
  78. <div class="md-search" data-md-component="search" role="dialog">
  79. <label class="md-search__overlay" for="__search"></label>
  80. <div class="md-search__inner" role="search">
  81. <form class="md-search__form" name="search">
  82. <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" required>
  83. <label class="md-search__icon md-icon" for="__search">
  84. <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.52 6.52 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 5"/></svg>
  85. <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 11z"/></svg>
  86. </label>
  87. <nav class="md-search__options" aria-label="Search">
  88. <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
  89. <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 12z"/></svg>
  90. </button>
  91. </nav>
  92. </form>
  93. <div class="md-search__output">
  94. <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
  95. <div class="md-search-result" data-md-component="search-result">
  96. <div class="md-search-result__meta">
  97. Initializing search
  98. </div>
  99. <ol class="md-search-result__list" role="presentation"></ol>
  100. </div>
  101. </div>
  102. </div>
  103. </div>
  104. </div>
  105. <div class="md-header__source">
  106. <a href="https://github.com/external-secrets/external-secrets" title="Go to repository" class="md-source" data-md-component="source">
  107. <div class="md-source__icon md-icon">
  108. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
  109. </div>
  110. <div class="md-source__repository">
  111. External Secrets Operator
  112. </div>
  113. </a>
  114. </div>
  115. </nav>
  116. </header>
  117. <div class="md-container" data-md-component="container">
  118. <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
  119. <div class="md-grid">
  120. <ul class="md-tabs__list">
  121. <li class="md-tabs__item">
  122. <a href="../.." class="md-tabs__link">
  123. Introduction
  124. </a>
  125. </li>
  126. <li class="md-tabs__item">
  127. <a href="../../api/components/" class="md-tabs__link">
  128. API
  129. </a>
  130. </li>
  131. <li class="md-tabs__item md-tabs__item--active">
  132. <a href="../introduction/" class="md-tabs__link">
  133. Guides
  134. </a>
  135. </li>
  136. <li class="md-tabs__item">
  137. <a href="../../provider/aws-secrets-manager/" class="md-tabs__link">
  138. Provider
  139. </a>
  140. </li>
  141. <li class="md-tabs__item">
  142. <a href="../../examples/gitops-using-fluxcd/" class="md-tabs__link">
  143. Examples
  144. </a>
  145. </li>
  146. <li class="md-tabs__item">
  147. <a href="../../contributing/devguide/" class="md-tabs__link">
  148. Community
  149. </a>
  150. </li>
  151. </ul>
  152. </div>
  153. </nav>
  154. <main class="md-main" data-md-component="main">
  155. <div class="md-main__inner md-grid">
  156. <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
  157. <div class="md-sidebar__scrollwrap">
  158. <div class="md-sidebar__inner">
  159. <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
  160. <label class="md-nav__title" for="__drawer">
  161. <a href="../.." title="External Secrets Operator" class="md-nav__button md-logo" aria-label="External Secrets Operator" data-md-component="logo">
  162. <img src="../../pictures/eso-round-logo.svg" alt="logo">
  163. </a>
  164. External Secrets Operator
  165. </label>
  166. <div class="md-nav__source">
  167. <a href="https://github.com/external-secrets/external-secrets" title="Go to repository" class="md-source" data-md-component="source">
  168. <div class="md-source__icon md-icon">
  169. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
  170. </div>
  171. <div class="md-source__repository">
  172. External Secrets Operator
  173. </div>
  174. </a>
  175. </div>
  176. <ul class="md-nav__list" data-md-scrollfix>
  177. <li class="md-nav__item md-nav__item--nested">
  178. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_1" >
  179. <div class="md-nav__link md-nav__container">
  180. <a href="../.." class="md-nav__link ">
  181. <span class="md-ellipsis">
  182. Introduction
  183. </span>
  184. </a>
  185. <label class="md-nav__link " for="__nav_1" id="__nav_1_label" tabindex="0">
  186. <span class="md-nav__icon md-icon"></span>
  187. </label>
  188. </div>
  189. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
  190. <label class="md-nav__title" for="__nav_1">
  191. <span class="md-nav__icon md-icon"></span>
  192. Introduction
  193. </label>
  194. <ul class="md-nav__list" data-md-scrollfix>
  195. <li class="md-nav__item">
  196. <a href="../../introduction/overview/" class="md-nav__link">
  197. <span class="md-ellipsis">
  198. Overview
  199. </span>
  200. </a>
  201. </li>
  202. <li class="md-nav__item">
  203. <a href="../../introduction/glossary/" class="md-nav__link">
  204. <span class="md-ellipsis">
  205. Glossary
  206. </span>
  207. </a>
  208. </li>
  209. <li class="md-nav__item">
  210. <a href="../../introduction/prerequisites/" class="md-nav__link">
  211. <span class="md-ellipsis">
  212. Prerequisites
  213. </span>
  214. </a>
  215. </li>
  216. <li class="md-nav__item">
  217. <a href="../../introduction/getting-started/" class="md-nav__link">
  218. <span class="md-ellipsis">
  219. Getting started
  220. </span>
  221. </a>
  222. </li>
  223. <li class="md-nav__item">
  224. <a href="../../introduction/faq/" class="md-nav__link">
  225. <span class="md-ellipsis">
  226. FAQ
  227. </span>
  228. </a>
  229. </li>
  230. <li class="md-nav__item">
  231. <a href="../../introduction/stability-support/" class="md-nav__link">
  232. <span class="md-ellipsis">
  233. Stability and Support
  234. </span>
  235. </a>
  236. </li>
  237. <li class="md-nav__item">
  238. <a href="../../introduction/deprecation-policy/" class="md-nav__link">
  239. <span class="md-ellipsis">
  240. Deprecation Policy
  241. </span>
  242. </a>
  243. </li>
  244. </ul>
  245. </nav>
  246. </li>
  247. <li class="md-nav__item md-nav__item--nested">
  248. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
  249. <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
  250. <span class="md-ellipsis">
  251. API
  252. </span>
  253. <span class="md-nav__icon md-icon"></span>
  254. </label>
  255. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
  256. <label class="md-nav__title" for="__nav_2">
  257. <span class="md-nav__icon md-icon"></span>
  258. API
  259. </label>
  260. <ul class="md-nav__list" data-md-scrollfix>
  261. <li class="md-nav__item">
  262. <a href="../../api/components/" class="md-nav__link">
  263. <span class="md-ellipsis">
  264. Components
  265. </span>
  266. </a>
  267. </li>
  268. <li class="md-nav__item md-nav__item--nested">
  269. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2_2" >
  270. <label class="md-nav__link" for="__nav_2_2" id="__nav_2_2_label" tabindex="0">
  271. <span class="md-ellipsis">
  272. Core Resources
  273. </span>
  274. <span class="md-nav__icon md-icon"></span>
  275. </label>
  276. <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_2_label" aria-expanded="false">
  277. <label class="md-nav__title" for="__nav_2_2">
  278. <span class="md-nav__icon md-icon"></span>
  279. Core Resources
  280. </label>
  281. <ul class="md-nav__list" data-md-scrollfix>
  282. <li class="md-nav__item">
  283. <a href="../../api/externalsecret/" class="md-nav__link">
  284. <span class="md-ellipsis">
  285. ExternalSecret
  286. </span>
  287. </a>
  288. </li>
  289. <li class="md-nav__item">
  290. <a href="../../api/secretstore/" class="md-nav__link">
  291. <span class="md-ellipsis">
  292. SecretStore
  293. </span>
  294. </a>
  295. </li>
  296. <li class="md-nav__item">
  297. <a href="../../api/clustersecretstore/" class="md-nav__link">
  298. <span class="md-ellipsis">
  299. ClusterSecretStore
  300. </span>
  301. </a>
  302. </li>
  303. <li class="md-nav__item">
  304. <a href="../../api/clusterexternalsecret/" class="md-nav__link">
  305. <span class="md-ellipsis">
  306. ClusterExternalSecret
  307. </span>
  308. </a>
  309. </li>
  310. <li class="md-nav__item">
  311. <a href="../../api/clusterpushsecret/" class="md-nav__link">
  312. <span class="md-ellipsis">
  313. ClusterPushSecret
  314. </span>
  315. </a>
  316. </li>
  317. <li class="md-nav__item">
  318. <a href="../../api/pushsecret/" class="md-nav__link">
  319. <span class="md-ellipsis">
  320. PushSecret
  321. </span>
  322. </a>
  323. </li>
  324. </ul>
  325. </nav>
  326. </li>
  327. <li class="md-nav__item md-nav__item--nested">
  328. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2_3" >
  329. <div class="md-nav__link md-nav__container">
  330. <a href="../../api/generator/" class="md-nav__link ">
  331. <span class="md-ellipsis">
  332. Generators
  333. </span>
  334. </a>
  335. <label class="md-nav__link " for="__nav_2_3" id="__nav_2_3_label" tabindex="0">
  336. <span class="md-nav__icon md-icon"></span>
  337. </label>
  338. </div>
  339. <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false">
  340. <label class="md-nav__title" for="__nav_2_3">
  341. <span class="md-nav__icon md-icon"></span>
  342. Generators
  343. </label>
  344. <ul class="md-nav__list" data-md-scrollfix>
  345. <li class="md-nav__item">
  346. <a href="../../api/generator/acr/" class="md-nav__link">
  347. <span class="md-ellipsis">
  348. Azure Container Registry
  349. </span>
  350. </a>
  351. </li>
  352. <li class="md-nav__item">
  353. <a href="../../api/generator/ecr/" class="md-nav__link">
  354. <span class="md-ellipsis">
  355. AWS Elastic Container Registry
  356. </span>
  357. </a>
  358. </li>
  359. <li class="md-nav__item">
  360. <a href="../../api/generator/sts/" class="md-nav__link">
  361. <span class="md-ellipsis">
  362. AWS STS Session Token
  363. </span>
  364. </a>
  365. </li>
  366. <li class="md-nav__item">
  367. <a href="../../api/generator/cloudsmith/" class="md-nav__link">
  368. <span class="md-ellipsis">
  369. Cloudsmith
  370. </span>
  371. </a>
  372. </li>
  373. <li class="md-nav__item">
  374. <a href="../../api/generator/cluster/" class="md-nav__link">
  375. <span class="md-ellipsis">
  376. Cluster Generator
  377. </span>
  378. </a>
  379. </li>
  380. <li class="md-nav__item">
  381. <a href="../../api/generator/gcr/" class="md-nav__link">
  382. <span class="md-ellipsis">
  383. Google Container Registry
  384. </span>
  385. </a>
  386. </li>
  387. <li class="md-nav__item">
  388. <a href="../../api/generator/grafana/" class="md-nav__link">
  389. <span class="md-ellipsis">
  390. Grafana
  391. </span>
  392. </a>
  393. </li>
  394. <li class="md-nav__item">
  395. <a href="../../api/generator/quay/" class="md-nav__link">
  396. <span class="md-ellipsis">
  397. Quay
  398. </span>
  399. </a>
  400. </li>
  401. <li class="md-nav__item">
  402. <a href="../../api/generator/vault/" class="md-nav__link">
  403. <span class="md-ellipsis">
  404. Vault Dynamic Secret
  405. </span>
  406. </a>
  407. </li>
  408. <li class="md-nav__item">
  409. <a href="../../api/generator/password/" class="md-nav__link">
  410. <span class="md-ellipsis">
  411. Password
  412. </span>
  413. </a>
  414. </li>
  415. <li class="md-nav__item">
  416. <a href="../../api/generator/fake/" class="md-nav__link">
  417. <span class="md-ellipsis">
  418. Fake
  419. </span>
  420. </a>
  421. </li>
  422. <li class="md-nav__item">
  423. <a href="../../api/generator/webhook/" class="md-nav__link">
  424. <span class="md-ellipsis">
  425. Webhook
  426. </span>
  427. </a>
  428. </li>
  429. <li class="md-nav__item">
  430. <a href="../../api/generator/github/" class="md-nav__link">
  431. <span class="md-ellipsis">
  432. Github
  433. </span>
  434. </a>
  435. </li>
  436. <li class="md-nav__item">
  437. <a href="../../api/generator/uuid/" class="md-nav__link">
  438. <span class="md-ellipsis">
  439. UUID
  440. </span>
  441. </a>
  442. </li>
  443. <li class="md-nav__item">
  444. <a href="../../api/generator/mfa/" class="md-nav__link">
  445. <span class="md-ellipsis">
  446. MFA
  447. </span>
  448. </a>
  449. </li>
  450. <li class="md-nav__item">
  451. <a href="../../api/generator/sshkey/" class="md-nav__link">
  452. <span class="md-ellipsis">
  453. SSHKey
  454. </span>
  455. </a>
  456. </li>
  457. </ul>
  458. </nav>
  459. </li>
  460. <li class="md-nav__item md-nav__item--nested">
  461. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2_4" >
  462. <label class="md-nav__link" for="__nav_2_4" id="__nav_2_4_label" tabindex="0">
  463. <span class="md-ellipsis">
  464. Reference Docs
  465. </span>
  466. <span class="md-nav__icon md-icon"></span>
  467. </label>
  468. <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_4_label" aria-expanded="false">
  469. <label class="md-nav__title" for="__nav_2_4">
  470. <span class="md-nav__icon md-icon"></span>
  471. Reference Docs
  472. </label>
  473. <ul class="md-nav__list" data-md-scrollfix>
  474. <li class="md-nav__item">
  475. <a href="../../api/spec/" class="md-nav__link">
  476. <span class="md-ellipsis">
  477. API specification
  478. </span>
  479. </a>
  480. </li>
  481. <li class="md-nav__item">
  482. <a href="../../api/controller-options/" class="md-nav__link">
  483. <span class="md-ellipsis">
  484. Controller Options
  485. </span>
  486. </a>
  487. </li>
  488. <li class="md-nav__item">
  489. <a href="../../api/metrics/" class="md-nav__link">
  490. <span class="md-ellipsis">
  491. Metrics
  492. </span>
  493. </a>
  494. </li>
  495. <li class="md-nav__item">
  496. <a href="../../api/selectable-fields/" class="md-nav__link">
  497. <span class="md-ellipsis">
  498. Selectable Fields
  499. </span>
  500. </a>
  501. </li>
  502. </ul>
  503. </nav>
  504. </li>
  505. </ul>
  506. </nav>
  507. </li>
  508. <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
  509. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
  510. <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
  511. <span class="md-ellipsis">
  512. Guides
  513. </span>
  514. <span class="md-nav__icon md-icon"></span>
  515. </label>
  516. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
  517. <label class="md-nav__title" for="__nav_3">
  518. <span class="md-nav__icon md-icon"></span>
  519. Guides
  520. </label>
  521. <ul class="md-nav__list" data-md-scrollfix>
  522. <li class="md-nav__item">
  523. <a href="../introduction/" class="md-nav__link">
  524. <span class="md-ellipsis">
  525. Introduction
  526. </span>
  527. </a>
  528. </li>
  529. <li class="md-nav__item md-nav__item--active md-nav__item--nested">
  530. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" checked>
  531. <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
  532. <span class="md-ellipsis">
  533. External Secrets
  534. </span>
  535. <span class="md-nav__icon md-icon"></span>
  536. </label>
  537. <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="true">
  538. <label class="md-nav__title" for="__nav_3_2">
  539. <span class="md-nav__icon md-icon"></span>
  540. External Secrets
  541. </label>
  542. <ul class="md-nav__list" data-md-scrollfix>
  543. <li class="md-nav__item">
  544. <a href="../all-keys-one-secret/" class="md-nav__link">
  545. <span class="md-ellipsis">
  546. Extract structured data
  547. </span>
  548. </a>
  549. </li>
  550. <li class="md-nav__item">
  551. <a href="../getallsecrets/" class="md-nav__link">
  552. <span class="md-ellipsis">
  553. Find Secrets by Name or Metadata
  554. </span>
  555. </a>
  556. </li>
  557. <li class="md-nav__item">
  558. <a href="../datafrom-rewrite/" class="md-nav__link">
  559. <span class="md-ellipsis">
  560. Rewriting Keys
  561. </span>
  562. </a>
  563. </li>
  564. <li class="md-nav__item md-nav__item--active md-nav__item--nested">
  565. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_4" checked>
  566. <label class="md-nav__link" for="__nav_3_2_4" id="__nav_3_2_4_label" tabindex="0">
  567. <span class="md-ellipsis">
  568. Advanced Templating
  569. </span>
  570. <span class="md-nav__icon md-icon"></span>
  571. </label>
  572. <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_4_label" aria-expanded="true">
  573. <label class="md-nav__title" for="__nav_3_2_4">
  574. <span class="md-nav__icon md-icon"></span>
  575. Advanced Templating
  576. </label>
  577. <ul class="md-nav__list" data-md-scrollfix>
  578. <li class="md-nav__item md-nav__item--active">
  579. <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
  580. <label class="md-nav__link md-nav__link--active" for="__toc">
  581. <span class="md-ellipsis">
  582. v2
  583. </span>
  584. <span class="md-nav__icon md-icon"></span>
  585. </label>
  586. <a href="./" class="md-nav__link md-nav__link--active">
  587. <span class="md-ellipsis">
  588. v2
  589. </span>
  590. </a>
  591. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  592. <label class="md-nav__title" for="__toc">
  593. <span class="md-nav__icon md-icon"></span>
  594. Table of contents
  595. </label>
  596. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  597. <li class="md-nav__item">
  598. <a href="#helm" class="md-nav__link">
  599. <span class="md-ellipsis">
  600. Helm
  601. </span>
  602. </a>
  603. </li>
  604. <li class="md-nav__item">
  605. <a href="#examples" class="md-nav__link">
  606. <span class="md-ellipsis">
  607. Examples
  608. </span>
  609. </a>
  610. <nav class="md-nav" aria-label="Examples">
  611. <ul class="md-nav__list">
  612. <li class="md-nav__item">
  613. <a href="#mergepolicy" class="md-nav__link">
  614. <span class="md-ellipsis">
  615. MergePolicy
  616. </span>
  617. </a>
  618. </li>
  619. <li class="md-nav__item">
  620. <a href="#templatefrom" class="md-nav__link">
  621. <span class="md-ellipsis">
  622. TemplateFrom
  623. </span>
  624. </a>
  625. <nav class="md-nav" aria-label="TemplateFrom">
  626. <ul class="md-nav__list">
  627. <li class="md-nav__item">
  628. <a href="#valuesdecodingstrategy-example" class="md-nav__link">
  629. <span class="md-ellipsis">
  630. ValuesDecodingStrategy example
  631. </span>
  632. </a>
  633. </li>
  634. <li class="md-nav__item">
  635. <a href="#htpasswd-example" class="md-nav__link">
  636. <span class="md-ellipsis">
  637. htpasswd example
  638. </span>
  639. </a>
  640. </li>
  641. </ul>
  642. </nav>
  643. </li>
  644. <li class="md-nav__item">
  645. <a href="#extract-keys-and-certificates-from-pkcs12-archive" class="md-nav__link">
  646. <span class="md-ellipsis">
  647. Extract Keys and Certificates from PKCS#12 Archive
  648. </span>
  649. </a>
  650. </li>
  651. <li class="md-nav__item">
  652. <a href="#extract-from-jwk" class="md-nav__link">
  653. <span class="md-ellipsis">
  654. Extract from JWK
  655. </span>
  656. </a>
  657. </li>
  658. <li class="md-nav__item">
  659. <a href="#filter-pem-blocks" class="md-nav__link">
  660. <span class="md-ellipsis">
  661. Filter PEM blocks
  662. </span>
  663. </a>
  664. </li>
  665. <li class="md-nav__item">
  666. <a href="#extract-subject-alternative-names-sans-from-certificate" class="md-nav__link">
  667. <span class="md-ellipsis">
  668. Extract Subject Alternative Names (SANs) from Certificate
  669. </span>
  670. </a>
  671. </li>
  672. <li class="md-nav__item">
  673. <a href="#rsa-decryption-data-from-provider" class="md-nav__link">
  674. <span class="md-ellipsis">
  675. RSA Decryption Data From Provider
  676. </span>
  677. </a>
  678. </li>
  679. </ul>
  680. </nav>
  681. </li>
  682. <li class="md-nav__item">
  683. <a href="#templating-with-pushsecret" class="md-nav__link">
  684. <span class="md-ellipsis">
  685. Templating with PushSecret
  686. </span>
  687. </a>
  688. </li>
  689. <li class="md-nav__item">
  690. <a href="#helper-functions" class="md-nav__link">
  691. <span class="md-ellipsis">
  692. Helper functions
  693. </span>
  694. </a>
  695. </li>
  696. <li class="md-nav__item">
  697. <a href="#migrating-from-v1" class="md-nav__link">
  698. <span class="md-ellipsis">
  699. Migrating from v1
  700. </span>
  701. </a>
  702. <nav class="md-nav" aria-label="Migrating from v1">
  703. <ul class="md-nav__list">
  704. <li class="md-nav__item">
  705. <a href="#functions-removedreplaced" class="md-nav__link">
  706. <span class="md-ellipsis">
  707. Functions removed/replaced
  708. </span>
  709. </a>
  710. </li>
  711. </ul>
  712. </nav>
  713. </li>
  714. </ul>
  715. </nav>
  716. </li>
  717. <li class="md-nav__item">
  718. <a href="../templating-v1/" class="md-nav__link">
  719. <span class="md-ellipsis">
  720. v1
  721. </span>
  722. </a>
  723. </li>
  724. </ul>
  725. </nav>
  726. </li>
  727. <li class="md-nav__item">
  728. <a href="../common-k8s-secret-types/" class="md-nav__link">
  729. <span class="md-ellipsis">
  730. Kubernetes Secret Types
  731. </span>
  732. </a>
  733. </li>
  734. <li class="md-nav__item">
  735. <a href="../ownership-deletion-policy/" class="md-nav__link">
  736. <span class="md-ellipsis">
  737. Lifecycle: ownership & deletion
  738. </span>
  739. </a>
  740. </li>
  741. <li class="md-nav__item">
  742. <a href="../decoding-strategy/" class="md-nav__link">
  743. <span class="md-ellipsis">
  744. Decoding Strategies
  745. </span>
  746. </a>
  747. </li>
  748. <li class="md-nav__item">
  749. <a href="../controller-class/" class="md-nav__link">
  750. <span class="md-ellipsis">
  751. Controller Classes
  752. </span>
  753. </a>
  754. </li>
  755. </ul>
  756. </nav>
  757. </li>
  758. <li class="md-nav__item">
  759. <a href="../targeting-custom-resources/" class="md-nav__link">
  760. <span class="md-ellipsis">
  761. Targeting Custom Resources
  762. </span>
  763. </a>
  764. </li>
  765. <li class="md-nav__item">
  766. <a href="../generator/" class="md-nav__link">
  767. <span class="md-ellipsis">
  768. Generators
  769. </span>
  770. </a>
  771. </li>
  772. <li class="md-nav__item">
  773. <a href="../pushsecrets/" class="md-nav__link">
  774. <span class="md-ellipsis">
  775. Push Secrets
  776. </span>
  777. </a>
  778. </li>
  779. <li class="md-nav__item md-nav__item--nested">
  780. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3_6" >
  781. <label class="md-nav__link" for="__nav_3_6" id="__nav_3_6_label" tabindex="0">
  782. <span class="md-ellipsis">
  783. Operations
  784. </span>
  785. <span class="md-nav__icon md-icon"></span>
  786. </label>
  787. <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_6_label" aria-expanded="false">
  788. <label class="md-nav__title" for="__nav_3_6">
  789. <span class="md-nav__icon md-icon"></span>
  790. Operations
  791. </label>
  792. <ul class="md-nav__list" data-md-scrollfix>
  793. <li class="md-nav__item">
  794. <a href="../multi-tenancy/" class="md-nav__link">
  795. <span class="md-ellipsis">
  796. Multi Tenancy
  797. </span>
  798. </a>
  799. </li>
  800. <li class="md-nav__item">
  801. <a href="../security-best-practices/" class="md-nav__link">
  802. <span class="md-ellipsis">
  803. Security Best Practices
  804. </span>
  805. </a>
  806. </li>
  807. <li class="md-nav__item">
  808. <a href="../threat-model/" class="md-nav__link">
  809. <span class="md-ellipsis">
  810. Threat Model
  811. </span>
  812. </a>
  813. </li>
  814. <li class="md-nav__item">
  815. <a href="../v1beta1/" class="md-nav__link">
  816. <span class="md-ellipsis">
  817. Upgrading to v1beta1
  818. </span>
  819. </a>
  820. </li>
  821. <li class="md-nav__item">
  822. <a href="../using-latest-image/" class="md-nav__link">
  823. <span class="md-ellipsis">
  824. Using Latest Image
  825. </span>
  826. </a>
  827. </li>
  828. <li class="md-nav__item">
  829. <a href="../disable-cluster-features/" class="md-nav__link">
  830. <span class="md-ellipsis">
  831. Disable Cluster Features
  832. </span>
  833. </a>
  834. </li>
  835. </ul>
  836. </nav>
  837. </li>
  838. <li class="md-nav__item md-nav__item--nested">
  839. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3_7" >
  840. <label class="md-nav__link" for="__nav_3_7" id="__nav_3_7_label" tabindex="0">
  841. <span class="md-ellipsis">
  842. Tooling
  843. </span>
  844. <span class="md-nav__icon md-icon"></span>
  845. </label>
  846. <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_7_label" aria-expanded="false">
  847. <label class="md-nav__title" for="__nav_3_7">
  848. <span class="md-nav__icon md-icon"></span>
  849. Tooling
  850. </label>
  851. <ul class="md-nav__list" data-md-scrollfix>
  852. <li class="md-nav__item">
  853. <a href="../using-esoctl-tool/" class="md-nav__link">
  854. <span class="md-ellipsis">
  855. Using the esoctl tool
  856. </span>
  857. </a>
  858. </li>
  859. </ul>
  860. </nav>
  861. </li>
  862. </ul>
  863. </nav>
  864. </li>
  865. <li class="md-nav__item md-nav__item--nested">
  866. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
  867. <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
  868. <span class="md-ellipsis">
  869. Provider
  870. </span>
  871. <span class="md-nav__icon md-icon"></span>
  872. </label>
  873. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
  874. <label class="md-nav__title" for="__nav_4">
  875. <span class="md-nav__icon md-icon"></span>
  876. Provider
  877. </label>
  878. <ul class="md-nav__list" data-md-scrollfix>
  879. <li class="md-nav__item">
  880. <a href="../../provider/aws-secrets-manager/" class="md-nav__link">
  881. <span class="md-ellipsis">
  882. AWS Secrets Manager
  883. </span>
  884. </a>
  885. </li>
  886. <li class="md-nav__item">
  887. <a href="../../provider/aws-parameter-store/" class="md-nav__link">
  888. <span class="md-ellipsis">
  889. AWS Parameter Store
  890. </span>
  891. </a>
  892. </li>
  893. <li class="md-nav__item">
  894. <a href="../../provider/aws-access/" class="md-nav__link">
  895. <span class="md-ellipsis">
  896. AWS Access
  897. </span>
  898. </a>
  899. </li>
  900. <li class="md-nav__item">
  901. <a href="../../provider/azure-key-vault/" class="md-nav__link">
  902. <span class="md-ellipsis">
  903. Azure Key Vault
  904. </span>
  905. </a>
  906. </li>
  907. <li class="md-nav__item">
  908. <a href="../../provider/barbican/" class="md-nav__link">
  909. <span class="md-ellipsis">
  910. Barbican
  911. </span>
  912. </a>
  913. </li>
  914. <li class="md-nav__item">
  915. <a href="../../provider/beyondtrust/" class="md-nav__link">
  916. <span class="md-ellipsis">
  917. BeyondTrust
  918. </span>
  919. </a>
  920. </li>
  921. <li class="md-nav__item">
  922. <a href="../../provider/bitwarden-secrets-manager/" class="md-nav__link">
  923. <span class="md-ellipsis">
  924. Bitwarden Secrets Manager
  925. </span>
  926. </a>
  927. </li>
  928. <li class="md-nav__item">
  929. <a href="../../provider/chef/" class="md-nav__link">
  930. <span class="md-ellipsis">
  931. Chef
  932. </span>
  933. </a>
  934. </li>
  935. <li class="md-nav__item">
  936. <a href="../../provider/cloudru/" class="md-nav__link">
  937. <span class="md-ellipsis">
  938. Cloud.ru Secret Manager
  939. </span>
  940. </a>
  941. </li>
  942. <li class="md-nav__item">
  943. <a href="../../provider/conjur/" class="md-nav__link">
  944. <span class="md-ellipsis">
  945. CyberArk Conjur
  946. </span>
  947. </a>
  948. </li>
  949. <li class="md-nav__item">
  950. <a href="../../provider/google-secrets-manager/" class="md-nav__link">
  951. <span class="md-ellipsis">
  952. Google Cloud Secret Manager
  953. </span>
  954. </a>
  955. </li>
  956. <li class="md-nav__item">
  957. <a href="../../provider/hashicorp-vault/" class="md-nav__link">
  958. <span class="md-ellipsis">
  959. HashiCorp Vault
  960. </span>
  961. </a>
  962. </li>
  963. <li class="md-nav__item">
  964. <a href="../../provider/kubernetes/" class="md-nav__link">
  965. <span class="md-ellipsis">
  966. Kubernetes
  967. </span>
  968. </a>
  969. </li>
  970. <li class="md-nav__item">
  971. <a href="../../provider/ibm-secrets-manager/" class="md-nav__link">
  972. <span class="md-ellipsis">
  973. IBM Secrets Manager
  974. </span>
  975. </a>
  976. </li>
  977. <li class="md-nav__item">
  978. <a href="../../provider/akeyless/" class="md-nav__link">
  979. <span class="md-ellipsis">
  980. Akeyless
  981. </span>
  982. </a>
  983. </li>
  984. <li class="md-nav__item">
  985. <a href="../../provider/yandex-certificate-manager/" class="md-nav__link">
  986. <span class="md-ellipsis">
  987. Yandex Certificate Manager
  988. </span>
  989. </a>
  990. </li>
  991. <li class="md-nav__item">
  992. <a href="../../provider/yandex-lockbox/" class="md-nav__link">
  993. <span class="md-ellipsis">
  994. Yandex Lockbox
  995. </span>
  996. </a>
  997. </li>
  998. <li class="md-nav__item">
  999. <a href="../../provider/gitlab-variables/" class="md-nav__link">
  1000. <span class="md-ellipsis">
  1001. GitLab Variables
  1002. </span>
  1003. </a>
  1004. </li>
  1005. <li class="md-nav__item">
  1006. <a href="../../provider/github/" class="md-nav__link">
  1007. <span class="md-ellipsis">
  1008. Github Actions Secrets
  1009. </span>
  1010. </a>
  1011. </li>
  1012. <li class="md-nav__item">
  1013. <a href="../../provider/oracle-vault/" class="md-nav__link">
  1014. <span class="md-ellipsis">
  1015. Oracle Vault
  1016. </span>
  1017. </a>
  1018. </li>
  1019. <li class="md-nav__item">
  1020. <a href="../../provider/ovhcloud/" class="md-nav__link">
  1021. <span class="md-ellipsis">
  1022. OVHcloud
  1023. </span>
  1024. </a>
  1025. </li>
  1026. <li class="md-nav__item">
  1027. <a href="../../provider/1password-automation/" class="md-nav__link">
  1028. <span class="md-ellipsis">
  1029. 1Password Connect Server
  1030. </span>
  1031. </a>
  1032. </li>
  1033. <li class="md-nav__item">
  1034. <a href="../../provider/1password-sdk/" class="md-nav__link">
  1035. <span class="md-ellipsis">
  1036. 1Password SDK
  1037. </span>
  1038. </a>
  1039. </li>
  1040. <li class="md-nav__item">
  1041. <a href="../../provider/webhook/" class="md-nav__link">
  1042. <span class="md-ellipsis">
  1043. Webhook
  1044. </span>
  1045. </a>
  1046. </li>
  1047. <li class="md-nav__item">
  1048. <a href="../../provider/fake/" class="md-nav__link">
  1049. <span class="md-ellipsis">
  1050. Fake
  1051. </span>
  1052. </a>
  1053. </li>
  1054. <li class="md-nav__item">
  1055. <a href="../../provider/senhasegura-dsm/" class="md-nav__link">
  1056. <span class="md-ellipsis">
  1057. senhasegura DevOps Secrets Management (DSM)
  1058. </span>
  1059. </a>
  1060. </li>
  1061. <li class="md-nav__item">
  1062. <a href="../../provider/doppler/" class="md-nav__link">
  1063. <span class="md-ellipsis">
  1064. Doppler
  1065. </span>
  1066. </a>
  1067. </li>
  1068. <li class="md-nav__item">
  1069. <a href="../../provider/keeper-security/" class="md-nav__link">
  1070. <span class="md-ellipsis">
  1071. Keeper Security
  1072. </span>
  1073. </a>
  1074. </li>
  1075. <li class="md-nav__item">
  1076. <a href="../../provider/cloak/" class="md-nav__link">
  1077. <span class="md-ellipsis">
  1078. Cloak End 2 End Encrypted Secrets
  1079. </span>
  1080. </a>
  1081. </li>
  1082. <li class="md-nav__item">
  1083. <a href="../../provider/scaleway/" class="md-nav__link">
  1084. <span class="md-ellipsis">
  1085. Scaleway
  1086. </span>
  1087. </a>
  1088. </li>
  1089. <li class="md-nav__item">
  1090. <a href="../../provider/delinea/" class="md-nav__link">
  1091. <span class="md-ellipsis">
  1092. Delinea
  1093. </span>
  1094. </a>
  1095. </li>
  1096. <li class="md-nav__item">
  1097. <a href="../../provider/secretserver/" class="md-nav__link">
  1098. <span class="md-ellipsis">
  1099. Secret Server
  1100. </span>
  1101. </a>
  1102. </li>
  1103. <li class="md-nav__item">
  1104. <a href="../../provider/passbolt/" class="md-nav__link">
  1105. <span class="md-ellipsis">
  1106. Passbolt
  1107. </span>
  1108. </a>
  1109. </li>
  1110. <li class="md-nav__item">
  1111. <a href="../../provider/pulumi/" class="md-nav__link">
  1112. <span class="md-ellipsis">
  1113. Pulumi ESC
  1114. </span>
  1115. </a>
  1116. </li>
  1117. <li class="md-nav__item">
  1118. <a href="../../provider/onboardbase/" class="md-nav__link">
  1119. <span class="md-ellipsis">
  1120. Onboardbase
  1121. </span>
  1122. </a>
  1123. </li>
  1124. <li class="md-nav__item">
  1125. <a href="../../provider-passworddepot/" class="md-nav__link">
  1126. <span class="md-ellipsis">
  1127. Password Depot
  1128. </span>
  1129. </a>
  1130. </li>
  1131. <li class="md-nav__item">
  1132. <a href="../../provider/fortanix/" class="md-nav__link">
  1133. <span class="md-ellipsis">
  1134. Fortanix
  1135. </span>
  1136. </a>
  1137. </li>
  1138. <li class="md-nav__item">
  1139. <a href="../../provider/infisical/" class="md-nav__link">
  1140. <span class="md-ellipsis">
  1141. Infisical
  1142. </span>
  1143. </a>
  1144. </li>
  1145. <li class="md-nav__item">
  1146. <a href="../../provider/previder/" class="md-nav__link">
  1147. <span class="md-ellipsis">
  1148. Previder
  1149. </span>
  1150. </a>
  1151. </li>
  1152. <li class="md-nav__item">
  1153. <a href="../../provider/openbao/" class="md-nav__link">
  1154. <span class="md-ellipsis">
  1155. OpenBao
  1156. </span>
  1157. </a>
  1158. </li>
  1159. <li class="md-nav__item">
  1160. <a href="../../provider/volcengine/" class="md-nav__link">
  1161. <span class="md-ellipsis">
  1162. Volcengine
  1163. </span>
  1164. </a>
  1165. </li>
  1166. <li class="md-nav__item">
  1167. <a href="../../provider/ngrok/" class="md-nav__link">
  1168. <span class="md-ellipsis">
  1169. ngrok
  1170. </span>
  1171. </a>
  1172. </li>
  1173. <li class="md-nav__item">
  1174. <a href="../../provider/devolutions-server/" class="md-nav__link">
  1175. <span class="md-ellipsis">
  1176. Devolutions Server
  1177. </span>
  1178. </a>
  1179. </li>
  1180. <li class="md-nav__item">
  1181. <a href="../../provider/nebius-mysterybox/" class="md-nav__link">
  1182. <span class="md-ellipsis">
  1183. Nebius MysteryBox
  1184. </span>
  1185. </a>
  1186. </li>
  1187. </ul>
  1188. </nav>
  1189. </li>
  1190. <li class="md-nav__item md-nav__item--nested">
  1191. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
  1192. <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
  1193. <span class="md-ellipsis">
  1194. Examples
  1195. </span>
  1196. <span class="md-nav__icon md-icon"></span>
  1197. </label>
  1198. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
  1199. <label class="md-nav__title" for="__nav_5">
  1200. <span class="md-nav__icon md-icon"></span>
  1201. Examples
  1202. </label>
  1203. <ul class="md-nav__list" data-md-scrollfix>
  1204. <li class="md-nav__item">
  1205. <a href="../../examples/gitops-using-fluxcd/" class="md-nav__link">
  1206. <span class="md-ellipsis">
  1207. FluxCD
  1208. </span>
  1209. </a>
  1210. </li>
  1211. <li class="md-nav__item">
  1212. <a href="../../examples/anchore-engine-credentials/" class="md-nav__link">
  1213. <span class="md-ellipsis">
  1214. Anchore Engine
  1215. </span>
  1216. </a>
  1217. </li>
  1218. <li class="md-nav__item">
  1219. <a href="../../examples/jenkins-kubernetes-credentials/" class="md-nav__link">
  1220. <span class="md-ellipsis">
  1221. Jenkins
  1222. </span>
  1223. </a>
  1224. </li>
  1225. <li class="md-nav__item">
  1226. <a href="../../examples/bitwarden/" class="md-nav__link">
  1227. <span class="md-ellipsis">
  1228. Bitwarden
  1229. </span>
  1230. </a>
  1231. </li>
  1232. </ul>
  1233. </nav>
  1234. </li>
  1235. <li class="md-nav__item md-nav__item--nested">
  1236. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
  1237. <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
  1238. <span class="md-ellipsis">
  1239. Community
  1240. </span>
  1241. <span class="md-nav__icon md-icon"></span>
  1242. </label>
  1243. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
  1244. <label class="md-nav__title" for="__nav_6">
  1245. <span class="md-nav__icon md-icon"></span>
  1246. Community
  1247. </label>
  1248. <ul class="md-nav__list" data-md-scrollfix>
  1249. <li class="md-nav__item md-nav__item--nested">
  1250. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6_1" >
  1251. <label class="md-nav__link" for="__nav_6_1" id="__nav_6_1_label" tabindex="0">
  1252. <span class="md-ellipsis">
  1253. Contributing
  1254. </span>
  1255. <span class="md-nav__icon md-icon"></span>
  1256. </label>
  1257. <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_1_label" aria-expanded="false">
  1258. <label class="md-nav__title" for="__nav_6_1">
  1259. <span class="md-nav__icon md-icon"></span>
  1260. Contributing
  1261. </label>
  1262. <ul class="md-nav__list" data-md-scrollfix>
  1263. <li class="md-nav__item">
  1264. <a href="../../contributing/devguide/" class="md-nav__link">
  1265. <span class="md-ellipsis">
  1266. Developer guide
  1267. </span>
  1268. </a>
  1269. </li>
  1270. <li class="md-nav__item">
  1271. <a href="../../contributing/process/" class="md-nav__link">
  1272. <span class="md-ellipsis">
  1273. Contributing Process
  1274. </span>
  1275. </a>
  1276. </li>
  1277. <li class="md-nav__item">
  1278. <a href="../../contributing/release/" class="md-nav__link">
  1279. <span class="md-ellipsis">
  1280. Release Process
  1281. </span>
  1282. </a>
  1283. </li>
  1284. <li class="md-nav__item">
  1285. <a href="../../contributing/coc/" class="md-nav__link">
  1286. <span class="md-ellipsis">
  1287. Code of Conduct
  1288. </span>
  1289. </a>
  1290. </li>
  1291. <li class="md-nav__item">
  1292. <a href="../../contributing/calendar/" class="md-nav__link">
  1293. <span class="md-ellipsis">
  1294. Community meetings calendar
  1295. </span>
  1296. </a>
  1297. </li>
  1298. <li class="md-nav__item">
  1299. <a href="../../contributing/roadmap/" class="md-nav__link">
  1300. <span class="md-ellipsis">
  1301. Roadmap
  1302. </span>
  1303. </a>
  1304. </li>
  1305. <li class="md-nav__item">
  1306. <a href="../../contributing/burnout-mitigation/" class="md-nav__link">
  1307. <span class="md-ellipsis">
  1308. Burnout Prevention
  1309. </span>
  1310. </a>
  1311. </li>
  1312. <li class="md-nav__item">
  1313. <a href="../../contributing/llm-policy/" class="md-nav__link">
  1314. <span class="md-ellipsis">
  1315. LLM Policy
  1316. </span>
  1317. </a>
  1318. </li>
  1319. </ul>
  1320. </nav>
  1321. </li>
  1322. <li class="md-nav__item md-nav__item--nested">
  1323. <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6_2" >
  1324. <label class="md-nav__link" for="__nav_6_2" id="__nav_6_2_label" tabindex="0">
  1325. <span class="md-ellipsis">
  1326. External Resources
  1327. </span>
  1328. <span class="md-nav__icon md-icon"></span>
  1329. </label>
  1330. <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_2_label" aria-expanded="false">
  1331. <label class="md-nav__title" for="__nav_6_2">
  1332. <span class="md-nav__icon md-icon"></span>
  1333. External Resources
  1334. </label>
  1335. <ul class="md-nav__list" data-md-scrollfix>
  1336. <li class="md-nav__item">
  1337. <a href="../../eso-talks/" class="md-nav__link">
  1338. <span class="md-ellipsis">
  1339. Talks
  1340. </span>
  1341. </a>
  1342. </li>
  1343. <li class="md-nav__item">
  1344. <a href="../../eso-demos/" class="md-nav__link">
  1345. <span class="md-ellipsis">
  1346. Demos
  1347. </span>
  1348. </a>
  1349. </li>
  1350. <li class="md-nav__item">
  1351. <a href="../../eso-blogs/" class="md-nav__link">
  1352. <span class="md-ellipsis">
  1353. Blogs
  1354. </span>
  1355. </a>
  1356. </li>
  1357. <li class="md-nav__item">
  1358. <a href="../../eso-tools/" class="md-nav__link">
  1359. <span class="md-ellipsis">
  1360. Tools
  1361. </span>
  1362. </a>
  1363. </li>
  1364. </ul>
  1365. </nav>
  1366. </li>
  1367. </ul>
  1368. </nav>
  1369. </li>
  1370. </ul>
  1371. </nav>
  1372. </div>
  1373. </div>
  1374. </div>
  1375. <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
  1376. <div class="md-sidebar__scrollwrap">
  1377. <div class="md-sidebar__inner">
  1378. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  1379. <label class="md-nav__title" for="__toc">
  1380. <span class="md-nav__icon md-icon"></span>
  1381. Table of contents
  1382. </label>
  1383. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  1384. <li class="md-nav__item">
  1385. <a href="#helm" class="md-nav__link">
  1386. <span class="md-ellipsis">
  1387. Helm
  1388. </span>
  1389. </a>
  1390. </li>
  1391. <li class="md-nav__item">
  1392. <a href="#examples" class="md-nav__link">
  1393. <span class="md-ellipsis">
  1394. Examples
  1395. </span>
  1396. </a>
  1397. <nav class="md-nav" aria-label="Examples">
  1398. <ul class="md-nav__list">
  1399. <li class="md-nav__item">
  1400. <a href="#mergepolicy" class="md-nav__link">
  1401. <span class="md-ellipsis">
  1402. MergePolicy
  1403. </span>
  1404. </a>
  1405. </li>
  1406. <li class="md-nav__item">
  1407. <a href="#templatefrom" class="md-nav__link">
  1408. <span class="md-ellipsis">
  1409. TemplateFrom
  1410. </span>
  1411. </a>
  1412. <nav class="md-nav" aria-label="TemplateFrom">
  1413. <ul class="md-nav__list">
  1414. <li class="md-nav__item">
  1415. <a href="#valuesdecodingstrategy-example" class="md-nav__link">
  1416. <span class="md-ellipsis">
  1417. ValuesDecodingStrategy example
  1418. </span>
  1419. </a>
  1420. </li>
  1421. <li class="md-nav__item">
  1422. <a href="#htpasswd-example" class="md-nav__link">
  1423. <span class="md-ellipsis">
  1424. htpasswd example
  1425. </span>
  1426. </a>
  1427. </li>
  1428. </ul>
  1429. </nav>
  1430. </li>
  1431. <li class="md-nav__item">
  1432. <a href="#extract-keys-and-certificates-from-pkcs12-archive" class="md-nav__link">
  1433. <span class="md-ellipsis">
  1434. Extract Keys and Certificates from PKCS#12 Archive
  1435. </span>
  1436. </a>
  1437. </li>
  1438. <li class="md-nav__item">
  1439. <a href="#extract-from-jwk" class="md-nav__link">
  1440. <span class="md-ellipsis">
  1441. Extract from JWK
  1442. </span>
  1443. </a>
  1444. </li>
  1445. <li class="md-nav__item">
  1446. <a href="#filter-pem-blocks" class="md-nav__link">
  1447. <span class="md-ellipsis">
  1448. Filter PEM blocks
  1449. </span>
  1450. </a>
  1451. </li>
  1452. <li class="md-nav__item">
  1453. <a href="#extract-subject-alternative-names-sans-from-certificate" class="md-nav__link">
  1454. <span class="md-ellipsis">
  1455. Extract Subject Alternative Names (SANs) from Certificate
  1456. </span>
  1457. </a>
  1458. </li>
  1459. <li class="md-nav__item">
  1460. <a href="#rsa-decryption-data-from-provider" class="md-nav__link">
  1461. <span class="md-ellipsis">
  1462. RSA Decryption Data From Provider
  1463. </span>
  1464. </a>
  1465. </li>
  1466. </ul>
  1467. </nav>
  1468. </li>
  1469. <li class="md-nav__item">
  1470. <a href="#templating-with-pushsecret" class="md-nav__link">
  1471. <span class="md-ellipsis">
  1472. Templating with PushSecret
  1473. </span>
  1474. </a>
  1475. </li>
  1476. <li class="md-nav__item">
  1477. <a href="#helper-functions" class="md-nav__link">
  1478. <span class="md-ellipsis">
  1479. Helper functions
  1480. </span>
  1481. </a>
  1482. </li>
  1483. <li class="md-nav__item">
  1484. <a href="#migrating-from-v1" class="md-nav__link">
  1485. <span class="md-ellipsis">
  1486. Migrating from v1
  1487. </span>
  1488. </a>
  1489. <nav class="md-nav" aria-label="Migrating from v1">
  1490. <ul class="md-nav__list">
  1491. <li class="md-nav__item">
  1492. <a href="#functions-removedreplaced" class="md-nav__link">
  1493. <span class="md-ellipsis">
  1494. Functions removed/replaced
  1495. </span>
  1496. </a>
  1497. </li>
  1498. </ul>
  1499. </nav>
  1500. </li>
  1501. </ul>
  1502. </nav>
  1503. </div>
  1504. </div>
  1505. </div>
  1506. <div class="md-content" data-md-component="content">
  1507. <article class="md-content__inner md-typeset">
  1508. <h1 id="advanced-templating-v2">Advanced Templating v2</h1>
  1509. <p>With External Secrets Operator you can transform the data from the external secret provider before it is stored as <code>Kind=Secret</code>. You can do this with the <code>Spec.Target.Template</code>.</p>
  1510. <p>Each data value is interpreted as a <a href="https://golang.org/pkg/text/template/">Go template</a>. Please note that referencing a non-existing key in the template will raise an error, instead of being suppressed.</p>
  1511. <div class="admonition note">
  1512. <p class="admonition-title">Note</p>
  1513. <p>Consider using camelcase when defining <strong>.'spec.data.secretkey'</strong>, example: serviceAccountToken</p>
  1514. <p>If your secret keys contain <strong><code>-</code> (dashes)</strong>, you will need to reference them using <strong><code>index</code></strong> </br>
  1515. Example: <strong><code>{{ index .data "service-account-token" }}</code></strong></p>
  1516. </div>
  1517. <h2 id="helm">Helm</h2>
  1518. <p>When installing ExternalSecrets via <code>helm</code>, the template must be escaped so that <code>helm</code> will not try to render it. The most straightforward way to accomplish this would be to use backticks (<a href="https://pkg.go.dev/text/template#hdr-Examples">raw string constants</a>):</p>
  1519. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1520. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1521. <span class="nt">metadata</span><span class="p">:</span>
  1522. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">template</span>
  1523. <span class="nt">spec</span><span class="p">:</span>
  1524. <span class="w"> </span><span class="c1"># ...</span>
  1525. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1526. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1527. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1528. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1529. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">admin</span>
  1530. <span class="w"> </span><span class="c1"># password: &quot;{{ .mysecret }}&quot; # If you are using plain manifests or gitops tools</span>
  1531. <span class="w"> </span><span class="nt">password</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">`{{</span><span class="nv"> </span><span class="s">.mysecret</span><span class="nv"> </span><span class="s">}}`</span><span class="nv"> </span><span class="s">}}&quot;</span><span class="w"> </span><span class="c1"># If you are using helm</span>
  1532. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1533. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mysecret</span>
  1534. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1535. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/credentials</span>
  1536. </code></pre></div>
  1537. <h2 id="examples">Examples</h2>
  1538. <p>You can use templates to inject your secrets into a configuration file that you mount into your pod:</p>
  1539. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1540. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1541. <span class="nt">metadata</span><span class="p">:</span>
  1542. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">template</span>
  1543. <span class="nt">spec</span><span class="p">:</span>
  1544. <span class="w"> </span><span class="c1"># ...</span>
  1545. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1546. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">secret-to-be-created</span>
  1547. <span class="w"> </span><span class="c1"># this is how the Kind=Secret will look like</span>
  1548. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1549. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1550. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1551. <span class="w"> </span><span class="c1"># multiline string</span>
  1552. <span class="w"> </span><span class="nt">config</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|</span>
  1553. <span class="w"> </span><span class="no">datasources:</span>
  1554. <span class="w"> </span><span class="no">- name: Graphite</span>
  1555. <span class="w"> </span><span class="no">type: graphite</span>
  1556. <span class="w"> </span><span class="no">access: proxy</span>
  1557. <span class="w"> </span><span class="no">url: http://localhost:8080</span>
  1558. <span class="w"> </span><span class="no">password: &quot;{{ .password }}&quot;</span>
  1559. <span class="w"> </span><span class="no">user: &quot;{{ .user }}&quot;</span>
  1560. <span class="w"> </span><span class="c1"># using replace function to rewrite secret</span>
  1561. <span class="w"> </span><span class="nt">connection</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;{{</span><span class="nv"> </span><span class="s">.dburl</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">replace</span><span class="nv"> </span><span class="s">&quot;postgres://&quot;</span><span class="nv"> </span><span class="s">&quot;postgresql://&quot;</span><span class="nv"> </span><span class="s">}}&#39;</span>
  1562. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1563. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">user</span>
  1564. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1565. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/grafana/user</span>
  1566. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">password</span>
  1567. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1568. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/grafana/password</span>
  1569. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">dburl</span>
  1570. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1571. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/database/url</span>
  1572. </code></pre></div>
  1573. <p>Another example with two keys in the same secret:</p>
  1574. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1575. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1576. <span class="nt">metadata</span><span class="p">:</span>
  1577. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">template</span>
  1578. <span class="nt">spec</span><span class="p">:</span>
  1579. <span class="w"> </span><span class="c1"># ...</span>
  1580. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1581. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1582. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1583. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1584. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">admin</span>
  1585. <span class="w"> </span><span class="nt">password</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.mysecret</span><span class="nv"> </span><span class="s">}}&quot;</span><span class="w"> </span><span class="c1"># If you are using plain manifests or gitops tools</span>
  1586. <span class="w"> </span><span class="c1"># password: &quot;{{ `{{ .mysecret }}` }}&quot; # If you are using templated tools like helm</span>
  1587. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1588. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mysecret</span>
  1589. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1590. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/credentials</span>
  1591. </code></pre></div>
  1592. <h3 id="mergepolicy">MergePolicy</h3>
  1593. <p>By default, the templating mechanism will not use any information available from the original <code>data</code> and <code>dataFrom</code> queries to the provider, and only keep the templated information. It is possible to change this behavior through the use of the <code>mergePolicy</code> field. <code>mergePolicy</code> currently accepts two values: <code>Replace</code> (the default) and <code>Merge</code>. When using <code>Merge</code>, <code>data</code> and <code>dataFrom</code> keys will also be embedded into the templated secret, having lower priority than the template outcome. See the example for more information:</p>
  1594. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1595. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1596. <span class="nt">metadata</span><span class="p">:</span>
  1597. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">template</span>
  1598. <span class="nt">spec</span><span class="p">:</span>
  1599. <span class="w"> </span><span class="c1"># ...</span>
  1600. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1601. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1602. <span class="w"> </span><span class="nt">mergePolicy</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Merge</span>
  1603. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1604. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1605. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">admin</span>
  1606. <span class="w"> </span><span class="nt">password</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.password</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">b64dec</span><span class="nv"> </span><span class="s">}}&quot;</span><span class="w"> </span><span class="c1"># Overwrites the password from the data call and use this output</span>
  1607. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1608. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">password</span>
  1609. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1610. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/credentials/password</span>
  1611. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">username</span><span class="w"> </span><span class="c1"># Preserves the username in the templated Secret</span>
  1612. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1613. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/credentials/username</span>
  1614. </code></pre></div>
  1615. <h3 id="templatefrom">TemplateFrom</h3>
  1616. <p>You do not have to define your templates inline in an ExternalSecret but you can pull <code>ConfigMaps</code> or other Secrets that contain a template. Consider the following example:</p>
  1617. <div class="highlight"><pre><span></span><code><span class="c1"># define your template in a config map</span>
  1618. <span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v1</span>
  1619. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ConfigMap</span>
  1620. <span class="nt">metadata</span><span class="p">:</span>
  1621. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">grafana-config-tpl</span>
  1622. <span class="nt">data</span><span class="p">:</span>
  1623. <span class="w"> </span><span class="nt">config.yaml</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|</span>
  1624. <span class="w"> </span><span class="no">datasources:</span>
  1625. <span class="w"> </span><span class="no">- name: Graphite</span>
  1626. <span class="w"> </span><span class="no">type: graphite</span>
  1627. <span class="w"> </span><span class="no">access: proxy</span>
  1628. <span class="w"> </span><span class="no">url: &quot;{{ .uri }}&quot;</span>
  1629. <span class="w"> </span><span class="no">password: &quot;{{ .password }}&quot;</span>
  1630. <span class="w"> </span><span class="no">user: &quot;{{ .user }}&quot;</span>
  1631. <span class="w"> </span><span class="nt">templated</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|</span>
  1632. <span class="w"> </span><span class="no"># key and value templated</span>
  1633. <span class="w"> </span><span class="no">my-application-{{ .user}}: {{ .password | b64enc }}</span>
  1634. <span class="w"> </span><span class="no"># conditional keys</span>
  1635. <span class="w"> </span><span class="no">{{- if hasPrefix &quot;oci://&quot; .uri }}</span>
  1636. <span class="w"> </span><span class="no">enableOCI: true</span>
  1637. <span class="w"> </span><span class="no">{{- else }}</span>
  1638. <span class="w"> </span><span class="no">enableOCI: false</span>
  1639. <span class="w"> </span><span class="no">{{- end }}</span>
  1640. <span class="w"> </span><span class="no"># Fixed values</span>
  1641. <span class="w"> </span><span class="no">application-type: grafana</span>
  1642. <span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|</span>
  1643. <span class="w"> </span><span class="no">#dynamic timestamp generation</span>
  1644. <span class="w"> </span><span class="no">last-synced-for-user/{{ .user }}: {{ now }}</span>
  1645. <span class="nn">---</span>
  1646. <span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1647. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1648. <span class="nt">metadata</span><span class="p">:</span>
  1649. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my-template-example</span>
  1650. <span class="nt">spec</span><span class="p">:</span>
  1651. <span class="w"> </span><span class="c1"># ...</span>
  1652. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1653. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">secret-to-be-created</span>
  1654. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1655. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1656. <span class="w"> </span><span class="nt">templateFrom</span><span class="p">:</span>
  1657. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Data</span>
  1658. <span class="w"> </span><span class="nt">configMap</span><span class="p">:</span>
  1659. <span class="w"> </span><span class="c1"># name of the configmap to pull in</span>
  1660. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">grafana-config-tpl</span>
  1661. <span class="w"> </span><span class="c1"># here you define the keys that should be used as template</span>
  1662. <span class="w"> </span><span class="nt">items</span><span class="p">:</span>
  1663. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">config.yaml</span>
  1664. <span class="w"> </span><span class="nt">templateAs</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Values</span>
  1665. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">templated</span>
  1666. <span class="w"> </span><span class="nt">templateAs</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">KeysAndValues</span>
  1667. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Annotations</span>
  1668. <span class="w"> </span><span class="nt">configMap</span><span class="p">:</span>
  1669. <span class="w"> </span><span class="c1"># name of the configmap to pull in</span>
  1670. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">grafana-config-tpl</span>
  1671. <span class="w"> </span><span class="c1"># here you define the keys that should be used as template</span>
  1672. <span class="w"> </span><span class="nt">items</span><span class="p">:</span>
  1673. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">annotations</span>
  1674. <span class="w"> </span><span class="nt">templateAs</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">KeysAndValues</span>
  1675. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1676. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">user</span>
  1677. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1678. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/grafana/user</span>
  1679. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">password</span>
  1680. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1681. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/grafana/password</span>
  1682. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">uri</span>
  1683. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1684. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/grafana/uri</span>
  1685. </code></pre></div>
  1686. <p><code>TemplateFrom</code> also gives you the ability to Target your template to the Secret's Annotations, Labels or the Data block. It also allows you to render the templated information as <code>Values</code> or as <code>KeysAndValues</code> through the <code>templateAs</code> configuration:</p>
  1687. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1688. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1689. <span class="nt">metadata</span><span class="p">:</span>
  1690. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my-template-example</span>
  1691. <span class="nt">spec</span><span class="p">:</span>
  1692. <span class="w"> </span><span class="c1"># ...</span>
  1693. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1694. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">secret-to-be-created</span>
  1695. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1696. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1697. <span class="w"> </span><span class="nt">templateFrom</span><span class="p">:</span>
  1698. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Annotations</span>
  1699. <span class="w"> </span><span class="nt">literal</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;last-sync-for-user/{{</span><span class="nv"> </span><span class="s">.user</span><span class="nv"> </span><span class="s">}}:</span><span class="nv"> </span><span class="s">{{</span><span class="nv"> </span><span class="s">.now</span><span class="nv"> </span><span class="s">}}&quot;</span>
  1700. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1701. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">user</span>
  1702. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1703. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/grafana/user</span>
  1704. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">password</span>
  1705. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1706. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/grafana/password</span>
  1707. </code></pre></div>
  1708. <p>Lastly, <code>TemplateFrom</code> also supports adding <code>Literal</code> blocks for quick templating. These <code>Literal</code> blocks differ from <code>Template.Data</code> as they are rendered as a a <code>key:value</code> pair (while the <code>Template.Data</code>, you can only template the value).</p>
  1709. <h4 id="valuesdecodingstrategy-example">ValuesDecodingStrategy example</h4>
  1710. <p><code>TemplateFrom</code> entries can also decode rendered values with <code>ValuesDecodingStrategy</code>. This is useful when the template selects Base64-encoded values from structured provider data and the final Kubernetes Secret must contain the decoded bytes.</p>
  1711. <p>For example, imagine several remote secrets matched by <code>dataFrom.find</code> contain JSON values like this:</p>
  1712. <div class="highlight"><pre><span></span><code><span class="p">{</span>
  1713. <span class="w"> </span><span class="nt">&quot;cert&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCg==&quot;</span><span class="p">,</span>
  1714. <span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;certificate encoded as base64&quot;</span>
  1715. <span class="p">}</span>
  1716. </code></pre></div>
  1717. <p>And let's imagine an ExternalSecret definition as this one:</p>
  1718. <p><div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1719. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1720. <span class="nt">metadata</span><span class="p">:</span>
  1721. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">nginx-certs</span>
  1722. <span class="nt">spec</span><span class="p">:</span>
  1723. <span class="w"> </span><span class="nt">refreshInterval</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1h</span>
  1724. <span class="w"> </span><span class="nt">secretStoreRef</span><span class="p">:</span>
  1725. <span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ClusterSecretStore</span>
  1726. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">aws-secretsmanager</span>
  1727. <span class="w"> </span><span class="nt">dataFrom</span><span class="p">:</span>
  1728. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">find</span><span class="p">:</span>
  1729. <span class="w"> </span><span class="nt">name</span><span class="p">:</span>
  1730. <span class="w"> </span><span class="nt">regexp</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">^productA/nginx/.*</span>
  1731. <span class="w"> </span><span class="nt">rewrite</span><span class="p">:</span>
  1732. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">regexp</span><span class="p">:</span>
  1733. <span class="w"> </span><span class="nt">source</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">^productA/nginx/(.*)</span>
  1734. <span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">$1</span>
  1735. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1736. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">nginx-certs</span>
  1737. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1738. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1739. <span class="w"> </span><span class="nt">templateFrom</span><span class="p">:</span>
  1740. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">literal</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|-</span>
  1741. <span class="w"> </span><span class="no">{{- range $key, $val := . }}</span>
  1742. <span class="w"> </span><span class="no">{{- $json := $val | fromJson }}</span>
  1743. <span class="w"> </span><span class="no">{{ $key }}: {{ $json.cert }}</span>
  1744. <span class="w"> </span><span class="no">{{- end }}</span>
  1745. </code></pre></div>
  1746. Without <code>templateFrom[0].ValuesDecodingStrategy</code>, the template will select the <code>cert</code> property, and get the base64 text. The resulting Kubernetes Secret value will be stored as Base64 text.</p>
  1747. <p>Alternatively, you can use the <code>templateFrom[0].valuesDecodingStrategy: Base64</code> as following:</p>
  1748. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1749. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1750. <span class="nt">metadata</span><span class="p">:</span>
  1751. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">nginx-certs</span>
  1752. <span class="nt">spec</span><span class="p">:</span>
  1753. <span class="w"> </span><span class="nt">refreshInterval</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1h</span>
  1754. <span class="w"> </span><span class="nt">secretStoreRef</span><span class="p">:</span>
  1755. <span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ClusterSecretStore</span>
  1756. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">aws-secretsmanager</span>
  1757. <span class="w"> </span><span class="nt">dataFrom</span><span class="p">:</span>
  1758. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">find</span><span class="p">:</span>
  1759. <span class="w"> </span><span class="nt">name</span><span class="p">:</span>
  1760. <span class="w"> </span><span class="nt">regexp</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">^productA/nginx/.*</span>
  1761. <span class="w"> </span><span class="nt">rewrite</span><span class="p">:</span>
  1762. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">regexp</span><span class="p">:</span>
  1763. <span class="w"> </span><span class="nt">source</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">^productA/nginx/(.*)</span>
  1764. <span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">$1</span>
  1765. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1766. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">nginx-certs</span>
  1767. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1768. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1769. <span class="w"> </span><span class="nt">templateFrom</span><span class="p">:</span>
  1770. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">valuesDecodingStrategy</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Base64</span>
  1771. <span class="w"> </span><span class="nt">literal</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|-</span>
  1772. <span class="w"> </span><span class="no">{{- range $key, $val := . }}</span>
  1773. <span class="w"> </span><span class="no">{{- $json := $val | fromJson }}</span>
  1774. <span class="w"> </span><span class="no">{{ $key }}: {{ $json.cert }}</span>
  1775. <span class="w"> </span><span class="no">{{- end }}</span>
  1776. </code></pre></div>
  1777. <p>This way, the template still renders safe Base64 text internally.
  1778. ESO then decodes the value and writes the decoded bytes in the Kubernetes Secret's data.
  1779. Only rendered values are decoded; rendered keys are left unchanged.</p>
  1780. <p>In other words, use <code>valuesDecodingStrategy</code> to <code>None</code> when values are not encoded, and our usual strategies like <code>Base64</code>, <code>Base64URL</code> (or even <code>Auto</code>) when values may be either Base64/Base64URL encoded.</p>
  1781. <div class="admonition note">
  1782. <p class="admonition-title">Note</p>
  1783. <p>This is safer for binary data than decoding inside the template with <code>{{ $json.cert | b64dec }}</code>, because <code>b64dec</code> injects raw bytes into the intermediate rendered YAML.</p>
  1784. </div>
  1785. <h4 id="htpasswd-example">htpasswd example</h4>
  1786. <p>See an example, how to produce a <code>htpasswd</code> file that can be used by an ingress-controller (for example: https://kubernetes.github.io/ingress-nginx/examples/auth/basic/) where the contents of the <code>htpasswd</code> file needs to be presented via the <code>auth</code> key. We use the <code>htpasswd</code> function to create a <code>bcrypted</code> hash of the password.</p>
  1787. <p>Suppose you have multiple key-value pairs within your provider secret like</p>
  1788. <div class="highlight"><pre><span></span><code><span class="p">{</span>
  1789. <span class="w"> </span><span class="nt">&quot;user1&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;password1&quot;</span><span class="p">,</span>
  1790. <span class="w"> </span><span class="nt">&quot;user2&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;password2&quot;</span><span class="p">,</span>
  1791. <span class="w"> </span><span class="err">...</span>
  1792. <span class="p">}</span>
  1793. </code></pre></div>
  1794. <p>You may either pass <code>bcrypt</code>, to use that hashing algorithm, or <code>sha</code>, to use the <code>SHA-1</code> hashing algorithm, as an argument. <code>bcrypt</code> is considered more secure, but some applications may not support it.</p>
  1795. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1796. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1797. <span class="nt">metadata</span><span class="p">:</span>
  1798. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my-template-example</span>
  1799. <span class="nt">spec</span><span class="p">:</span>
  1800. <span class="w"> </span><span class="c1"># ...</span>
  1801. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1802. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">secret-to-be-created</span>
  1803. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1804. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1805. <span class="w"> </span><span class="nt">templateFrom</span><span class="p">:</span>
  1806. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Data</span>
  1807. <span class="w"> </span><span class="nt">literal</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|-</span>
  1808. <span class="w"> </span><span class="no">{{- $creds := list }}</span>
  1809. <span class="w"> </span><span class="no">{{- range $user, $pw := . }}</span>
  1810. <span class="w"> </span><span class="no">{{- $creds = append $creds (printf &quot;%s&quot; (htpasswd $user $pw &quot;bcrypt&quot;)) }}</span>
  1811. <span class="w"> </span><span class="no">{{- end }}</span>
  1812. <span class="w"> </span><span class="no">auth: {{ $creds | join &quot;\n&quot; | quote }}</span>
  1813. <span class="w"> </span><span class="nt">dataFrom</span><span class="p">:</span>
  1814. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">extract</span><span class="p">:</span>
  1815. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/ingress-controller/valid-users</span>
  1816. </code></pre></div>
  1817. <h3 id="extract-keys-and-certificates-from-pkcs12-archive">Extract Keys and Certificates from PKCS#12 Archive</h3>
  1818. <p>You can use pre-defined functions to extract data from your secrets. Here: extract keys and certificates from a PKCS#12 archive and store it as PEM.</p>
  1819. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1820. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1821. <span class="nt">metadata</span><span class="p">:</span>
  1822. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">template</span>
  1823. <span class="nt">spec</span><span class="p">:</span>
  1824. <span class="w"> </span><span class="c1"># ...</span>
  1825. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1826. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1827. <span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">kubernetes.io/tls</span>
  1828. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1829. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1830. <span class="w"> </span><span class="nt">tls.crt</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.mysecret</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">pkcs12cert</span><span class="nv"> </span><span class="s">}}&quot;</span>
  1831. <span class="w"> </span><span class="nt">tls.key</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.mysecret</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">pkcs12key</span><span class="nv"> </span><span class="s">}}&quot;</span>
  1832. <span class="w"> </span><span class="c1"># if needed unlock the pkcs12 with the password</span>
  1833. <span class="w"> </span><span class="nt">tls.crt</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.mysecret</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">pkcs12certPass</span><span class="nv"> </span><span class="s">&quot;</span><span class="l l-Scalar l-Scalar-Plain">my-password&quot; }}&quot;</span>
  1834. </code></pre></div>
  1835. <h3 id="extract-from-jwk">Extract from JWK</h3>
  1836. <p>You can extract the public or private key parts of a JWK and use them as <a href="https://pkg.go.dev/crypto/x509#ParsePKCS8PrivateKey">PKCS#8</a> private key or PEM-encoded <a href="https://pkg.go.dev/crypto/x509#MarshalPKIXPublicKey">PKIX</a> public key.</p>
  1837. <p>A JWK looks similar to this:</p>
  1838. <div class="highlight"><pre><span></span><code><span class="p">{</span>
  1839. <span class="w"> </span><span class="nt">&quot;kty&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;RSA&quot;</span><span class="p">,</span>
  1840. <span class="w"> </span><span class="nt">&quot;kid&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;cc34c0a0-bd5a-4a3c-a50d-a2a7db7643df&quot;</span><span class="p">,</span>
  1841. <span class="w"> </span><span class="nt">&quot;use&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;sig&quot;</span><span class="p">,</span>
  1842. <span class="w"> </span><span class="nt">&quot;n&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;pjdss...&quot;</span><span class="p">,</span>
  1843. <span class="w"> </span><span class="nt">&quot;e&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;AQAB&quot;</span>
  1844. <span class="w"> </span><span class="c1">// ...</span>
  1845. <span class="p">}</span>
  1846. </code></pre></div>
  1847. <p>And what you want may be a PEM-encoded public or private key portion of it. Take a look at this example on how to transform it into the desired format:</p>
  1848. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1849. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1850. <span class="nt">metadata</span><span class="p">:</span>
  1851. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">template</span>
  1852. <span class="nt">spec</span><span class="p">:</span>
  1853. <span class="w"> </span><span class="c1"># ...</span>
  1854. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1855. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1856. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1857. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1858. <span class="w"> </span><span class="c1"># .myjwk is a json-encoded JWK string.</span>
  1859. <span class="w"> </span><span class="c1">#</span>
  1860. <span class="w"> </span><span class="c1"># this template will produce for jwk_pub a PEM encoded public key:</span>
  1861. <span class="w"> </span><span class="c1"># -----BEGIN PUBLIC KEY-----</span>
  1862. <span class="w"> </span><span class="c1"># MIIBI...</span>
  1863. <span class="w"> </span><span class="c1"># ...</span>
  1864. <span class="w"> </span><span class="c1"># ...AQAB</span>
  1865. <span class="w"> </span><span class="c1"># -----END PUBLIC KEY-----</span>
  1866. <span class="w"> </span><span class="nt">jwk_pub</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.myjwk</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">jwkPublicKeyPem</span><span class="nv"> </span><span class="s">}}&quot;</span>
  1867. <span class="w"> </span><span class="c1"># private key is a pem-encoded PKCS#8 private key</span>
  1868. <span class="w"> </span><span class="nt">jwk_priv</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.myjwk</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">jwkPrivateKeyPem</span><span class="nv"> </span><span class="s">}}&quot;</span>
  1869. </code></pre></div>
  1870. <h3 id="filter-pem-blocks">Filter PEM blocks</h3>
  1871. <p>Consider you have a secret that contains both a certificate and a private key encoded in PEM format and it is your goal to use only the certificate from that secret.</p>
  1872. <div class="highlight"><pre><span></span><code>-----BEGIN PRIVATE KEY-----
  1873. MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvxGZOW4IXvGlh
  1874. . . .
  1875. m8JCpbJXDfSSVxKHgK1Siw4K6pnTsIA2e/Z+Ha2fvtocERjq7VQMAJFaIZSTKo9Q
  1876. JwwY+vj0yxWjyzHUzZB33tg=
  1877. -----END PRIVATE KEY-----
  1878. -----BEGIN CERTIFICATE-----
  1879. MIIDMDCCAhigAwIBAgIQabPaXuZCQaCg+eQAVptGGDANBgkqhkiG9w0BAQsFADAV
  1880. . . .
  1881. NtFUGA95RGN9s+pl6XY0YARPHf5O76ErC1OZtDTR5RdyQfcM+94gYZsexsXl0aQO
  1882. 9YD3Wg==
  1883. -----END CERTIFICATE-----
  1884. </code></pre></div>
  1885. <p>You can achieve that by using the <code>filterPEM</code> function to extract a specific type of PEM block from that secret. If multiple blocks of that type (here: <code>CERTIFICATE</code>) exist, all of them are returned in the order specified. To extract a specific type of PEM block, pass the type as a string argument to the filterPEM function. Take a look at this example of how to transform a secret which contains a private key and a certificate into the desired format:</p>
  1886. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1887. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1888. <span class="nt">metadata</span><span class="p">:</span>
  1889. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">template</span>
  1890. <span class="nt">spec</span><span class="p">:</span>
  1891. <span class="w"> </span><span class="c1"># ...</span>
  1892. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1893. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1894. <span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">kubernetes.io/tls</span>
  1895. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1896. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1897. <span class="w"> </span><span class="nt">tls.crt</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.mysecret</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterPEM</span><span class="nv"> </span><span class="s">&quot;</span><span class="l l-Scalar l-Scalar-Plain">CERTIFICATE&quot; }}&quot;</span>
  1898. <span class="w"> </span><span class="nt">tls.key</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.mysecret</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterPEM</span><span class="nv"> </span><span class="s">&quot;</span><span class="l l-Scalar l-Scalar-Plain">PRIVATE KEY&quot; }}&quot;</span>
  1899. </code></pre></div>
  1900. <p>In case you have a secret that contains a (partial) certificate chain you can extract the <code>leaf</code>, <code>intermediate</code> or <code>root</code> certificate(s) using the <code>filterCertChain</code> function. See the following example on how to use the <code>filterPEM</code> and <code>filterCertChain</code> functions together to split the certificate chain into a <code>tls.crt</code> part only containing the leaf certificate and a <code>ca.crt</code> part with all the intermediate certificates.</p>
  1901. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1902. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1903. <span class="nt">metadata</span><span class="p">:</span>
  1904. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">template</span>
  1905. <span class="nt">spec</span><span class="p">:</span>
  1906. <span class="w"> </span><span class="c1"># ...</span>
  1907. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1908. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1909. <span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">kubernetes.io/tls</span>
  1910. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1911. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1912. <span class="w"> </span><span class="nt">ca.crt</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.mysecret</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterPEM</span><span class="nv"> </span><span class="s">&quot;</span><span class="l l-Scalar l-Scalar-Plain">CERTIFICATE&quot; | filterCertChain &quot;intermediate&quot; }}&quot;</span>
  1913. <span class="w"> </span><span class="nt">tls.crt</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.mysecret</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterPEM</span><span class="nv"> </span><span class="s">&quot;</span><span class="l l-Scalar l-Scalar-Plain">CERTIFICATE&quot; | filterCertChain &quot;leaf&quot; }}&quot;</span>
  1914. <span class="w"> </span><span class="nt">tls.key</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.mysecret</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterPEM</span><span class="nv"> </span><span class="s">&quot;</span><span class="l l-Scalar l-Scalar-Plain">PRIVATE KEY&quot; }}&quot;</span>
  1915. </code></pre></div>
  1916. <h3 id="extract-subject-alternative-names-sans-from-certificate">Extract Subject Alternative Names (SANs) from Certificate</h3>
  1917. <p>You can use the <code>certSANs</code> function to extract Subject Alternative Names from a PEM-encoded certificate. It returns a list of all SANs including DNS names, IP addresses, email addresses, and URIs. This is useful when you need to know which domains or IPs a certificate covers.</p>
  1918. <p>You can combine <code>certSANs</code> with <code>filterPEM</code> and <code>filterCertChain</code> to first extract the leaf certificate from a chain and then get its SANs:</p>
  1919. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1920. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1921. <span class="nt">metadata</span><span class="p">:</span>
  1922. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cert-sans-example</span>
  1923. <span class="nt">spec</span><span class="p">:</span>
  1924. <span class="w"> </span><span class="c1"># ...</span>
  1925. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1926. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1927. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1928. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1929. <span class="w"> </span><span class="c1"># Store all SANs as a comma-separated string</span>
  1930. <span class="w"> </span><span class="nt">sans</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;{{</span><span class="nv"> </span><span class="s">.certificate</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterPEM</span><span class="nv"> </span><span class="s">&quot;CERTIFICATE&quot;</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterCertChain</span><span class="nv"> </span><span class="s">&quot;leaf&quot;</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">certSANs</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">join</span><span class="nv"> </span><span class="s">&quot;,&quot;</span><span class="nv"> </span><span class="s">}}&#39;</span>
  1931. <span class="w"> </span><span class="c1"># Store the first SAN (e.g. primary domain)</span>
  1932. <span class="w"> </span><span class="nt">primary-domain</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;{{</span><span class="nv"> </span><span class="s">index</span><span class="nv"> </span><span class="s">(.certificate</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterPEM</span><span class="nv"> </span><span class="s">&quot;CERTIFICATE&quot;</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterCertChain</span><span class="nv"> </span><span class="s">&quot;leaf&quot;</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">certSANs)</span><span class="nv"> </span><span class="s">0</span><span class="nv"> </span><span class="s">}}&#39;</span>
  1933. <span class="w"> </span><span class="c1"># Store SANs as a JSON array</span>
  1934. <span class="w"> </span><span class="nt">sans-json</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;{{</span><span class="nv"> </span><span class="s">.certificate</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterPEM</span><span class="nv"> </span><span class="s">&quot;CERTIFICATE&quot;</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">filterCertChain</span><span class="nv"> </span><span class="s">&quot;leaf&quot;</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">certSANs</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">toJson</span><span class="nv"> </span><span class="s">}}&#39;</span>
  1935. </code></pre></div>
  1936. <h3 id="rsa-decryption-data-from-provider">RSA Decryption Data From Provider</h3>
  1937. <p>When a provider returns RSA-encrypted values, you can decrypt them directly in the template using the <code>rsaDecrypt</code> functions (engine v2).
  1938. <code>rsaDecrypt</code> performs decryption with the private key passed through the pipeline: <code>&lt;privateKeyPEM | rsaDecrypt "&lt;SCHEME&gt;" "&lt;HASH&gt;" &lt;ciphertext&gt; &gt;</code>. <code>SCHEME</code> and <code>HASH</code> are strings (for example, <code>"RSA-OAEP"</code> and <code>"SHA1"</code>). The third argument must be the ciphertext in binary form.</p>
  1939. <p>Base64 handling: providers often return ciphertext as Base64. You can either:</p>
  1940. <ul>
  1941. <li>decode in the template with <code>b64dec</code> (for example: <code>(.password_encrypted_base64 | b64dec)</code>), or</li>
  1942. <li>set <code>decodingStrategy: Base64</code> on the corresponding <code>spec.data.remoteRef</code> so the template receives binary data.</li>
  1943. </ul>
  1944. <p>Prerequisites</p>
  1945. <ul>
  1946. <li><code>spec.target.template.engineVersion: v2</code>.</li>
  1947. <li>A valid RSA private key in PEM format without passphrase (from another reference in the same ExternalSecret).</li>
  1948. <li>Ciphertext must match the key pair and the chosen algorithm/hash.</li>
  1949. </ul>
  1950. <p>Full example:</p>
  1951. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
  1952. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  1953. <span class="nt">metadata</span><span class="p">:</span>
  1954. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rsa-decrypt-template-v2</span>
  1955. <span class="nt">spec</span><span class="p">:</span>
  1956. <span class="w"> </span><span class="c1"># ...</span>
  1957. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  1958. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  1959. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  1960. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1961. <span class="w"> </span><span class="c1"># Decrypt a binary ciphertext using a private key stored in a Kubernetes Secret.</span>
  1962. <span class="w"> </span><span class="c1"># rsaDecrypt(&quot;SCHEME&quot;, &quot;HASH&quot;, ciphertext, privateKeyPEM) decrypts the ciphertext (binary).</span>
  1963. <span class="w"> </span><span class="nt">password</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;{{</span><span class="nv"> </span><span class="s">rsaDecrypt</span><span class="nv"> </span><span class="s">&quot;RSA-OAEP&quot;</span><span class="nv"> </span><span class="s">&quot;SHA1&quot;</span><span class="nv"> </span><span class="s">.password_encrypted_binary</span><span class="nv"> </span><span class="s">.privatekey</span><span class="nv"> </span><span class="s">}}&#39;</span>
  1964. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  1965. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">privatekey</span>
  1966. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1967. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">a-secretname-in-cluster</span>
  1968. <span class="w"> </span><span class="nt">property</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">privatekey</span>
  1969. <span class="w"> </span><span class="nt">sourceRef</span><span class="p">:</span>
  1970. <span class="w"> </span><span class="nt">storeRef</span><span class="p">:</span>
  1971. <span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">SecretStore</span><span class="w"> </span><span class="c1"># or ClusterSecretStore</span>
  1972. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">kubernetes</span><span class="w"> </span><span class="c1"># name of the k8s provider</span>
  1973. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">password_encrypted_binary</span>
  1974. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  1975. <span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/credentials/password_encrypted_binary</span>
  1976. <span class="w"> </span><span class="c1"># If ciphertext is Base64 encoded, either decode in-template (b64dec) or use decodingStrategy: Base64</span>
  1977. <span class="w"> </span><span class="c1"># Example (decode here -&gt; template receives binary):</span>
  1978. <span class="w"> </span><span class="c1"># - secretKey: password_encrypted_base64</span>
  1979. <span class="w"> </span><span class="c1"># remoteRef:</span>
  1980. <span class="w"> </span><span class="c1"># key: /credentials/password_encrypted_base64</span>
  1981. <span class="w"> </span><span class="c1"># decodingStrategy: Base64</span>
  1982. <span class="w"> </span><span class="c1"># ...</span>
  1983. </code></pre></div>
  1984. <p>Useful variations (included as comments in the example):</p>
  1985. <ul>
  1986. <li>Base64 decode in the template with <code>b64dec</code> or via <code>decodingStrategy: Base64</code> on <code>spec.data</code>.</li>
  1987. <li>Use a private key available in the same ExternalSecret (for example: <code>( .private_key | rsaDecrypt ... )</code>).</li>
  1988. </ul>
  1989. <p>Error notes</p>
  1990. <ul>
  1991. <li>Referencing a missing key in the template will fail rendering.</li>
  1992. <li>If key/algorithm/hash do not match the ciphertext, decryption will fail and reconciliation will retry.</li>
  1993. </ul>
  1994. <h2 id="templating-with-pushsecret">Templating with PushSecret</h2>
  1995. <p><code>PushSecret</code> templating is much like <code>ExternalSecrets</code> templating. In-fact under the hood, it's using the same data structure.
  1996. Which means, anything described in the above should be possible with push secret as well resulting in a templated secret
  1997. created at the provider.</p>
  1998. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1beta1</span>
  1999. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">PushSecret</span>
  2000. <span class="nt">metadata</span><span class="p">:</span>
  2001. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">template</span>
  2002. <span class="nt">spec</span><span class="p">:</span>
  2003. <span class="w"> </span><span class="c1"># ...</span>
  2004. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  2005. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  2006. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  2007. <span class="w"> </span><span class="nt">token</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;{{</span><span class="nv"> </span><span class="s">.token</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">toString</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">upper</span><span class="nv"> </span><span class="s">}}</span><span class="nv"> </span><span class="s">was</span><span class="nv"> </span><span class="s">templated&quot;</span>
  2008. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  2009. <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">match</span><span class="p">:</span>
  2010. <span class="w"> </span><span class="nt">secretKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">token</span>
  2011. <span class="w"> </span><span class="nt">remoteRef</span><span class="p">:</span>
  2012. <span class="w"> </span><span class="nt">remoteKey</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">create-secret-name</span>
  2013. <span class="w"> </span><span class="nt">property</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">token</span>
  2014. </code></pre></div>
  2015. <h2 id="helper-functions">Helper functions</h2>
  2016. <div class="admonition info inline end">
  2017. <p class="admonition-title">Info</p>
  2018. <p>Note: we removed <code>env</code> and <code>expandenv</code> from sprig functions for security reasons.</p>
  2019. </div>
  2020. <p>We provide a couple of convenience functions that help you transform your secrets. This is useful when dealing with PKCS#12 archives or JSON Web Keys (JWK).</p>
  2021. <p>In addition to that you can use over 200+ <a href="http://masterminds.github.io/sprig/">sprig functions</a>. If you feel a function is missing or might be valuable feel free to open an issue and submit a <a href="../../contributing/process/#submitting-a-pull-request">pull request</a>.</p>
  2022. <p><br/></p>
  2023. <table>
  2024. <thead>
  2025. <tr>
  2026. <th>Function</th>
  2027. <th>Description</th>
  2028. </tr>
  2029. </thead>
  2030. <tbody>
  2031. <tr>
  2032. <td>pkcs12key</td>
  2033. <td>Extracts all private keys from a PKCS#12 archive and encodes them in <strong>PKCS#8 PEM</strong> format.</td>
  2034. </tr>
  2035. <tr>
  2036. <td>pkcs12keyPass</td>
  2037. <td>Same as <code>pkcs12key</code>. Uses the provided password to decrypt the PKCS#12 archive.</td>
  2038. </tr>
  2039. <tr>
  2040. <td>pkcs12cert</td>
  2041. <td>Extracts all certificates from a PKCS#12 archive and orders them if possible. If disjunct or multiple leaf certs are provided they are returned as-is. <br/> Sort order: <code>leaf / intermediate(s) / root</code>.</td>
  2042. </tr>
  2043. <tr>
  2044. <td>pkcs12certPass</td>
  2045. <td>Same as <code>pkcs12cert</code>. Uses the provided password to decrypt the PKCS#12 archive.</td>
  2046. </tr>
  2047. <tr>
  2048. <td>pemToPkcs12</td>
  2049. <td>Takes a PEM encoded certificate and key and creates a base64 encoded PKCS#12 archive.</td>
  2050. </tr>
  2051. <tr>
  2052. <td>pemToPkcs12Pass</td>
  2053. <td>Same as <code>pemToPkcs12</code>. Uses the provided password to encrypt the PKCS#12 archive.</td>
  2054. </tr>
  2055. <tr>
  2056. <td>fullPemToPkcs12</td>
  2057. <td>Takes a PEM encoded certificates chain and key and creates a base64 encoded PKCS#12 archive.</td>
  2058. </tr>
  2059. <tr>
  2060. <td>fullPemToPkcs12Pass</td>
  2061. <td>Same as <code>fullPemToPkcs12</code>. Uses the provided password to encrypt the PKCS#12 archive.</td>
  2062. </tr>
  2063. <tr>
  2064. <td>pemTruststoreToPKCS12</td>
  2065. <td>Takes a PEM encoded certificates and creates a base64 encoded PKCS#12 archive.</td>
  2066. </tr>
  2067. <tr>
  2068. <td>pemTruststoreToPKCS12Pass</td>
  2069. <td>Same as <code>pemTruststoreToPKCS12</code>. Uses the provided password to encrypt the PKCS#12 archive.</td>
  2070. </tr>
  2071. <tr>
  2072. <td>filterPEM</td>
  2073. <td>Filters PEM blocks with a specific type from a list of PEM blocks.</td>
  2074. </tr>
  2075. <tr>
  2076. <td>filterCertChain</td>
  2077. <td>Filters PEM block(s) with a specific certificate type (<code>leaf</code>, <code>intermediate</code> or <code>root</code>) from a certificate chain of PEM blocks (PEM blocks with type <code>CERTIFICATE</code>).</td>
  2078. </tr>
  2079. <tr>
  2080. <td>certSANs</td>
  2081. <td>Extracts Subject Alternative Names (SANs) from a PEM-encoded certificate and returns them as a list of strings. Includes DNS names, IP addresses, email addresses, and URIs.</td>
  2082. </tr>
  2083. <tr>
  2084. <td>jwkPublicKeyPem</td>
  2085. <td>Takes an json-serialized JWK and returns an PEM block of type <code>PUBLIC KEY</code> that contains the public key. <a href="https://golang.org/pkg/crypto/x509/#MarshalPKIXPublicKey">See here</a> for details.</td>
  2086. </tr>
  2087. <tr>
  2088. <td>jwkPrivateKeyPem</td>
  2089. <td>Takes an json-serialized JWK as <code>string</code> and returns an PEM block of type <code>PRIVATE KEY</code> that contains the private key in PKCS #8 format. <a href="https://golang.org/pkg/crypto/x509/#MarshalPKCS8PrivateKey">See here</a> for details.</td>
  2090. </tr>
  2091. <tr>
  2092. <td>rsaDecrypt</td>
  2093. <td>Decrypts RSA ciphertext using a PEM private key. Usage: <code>&lt;rsaDecrypt "SCHEME" "HASH" ciphertext privateKeyPEM&gt;</code> or <code>&lt;privateKeyPEM \| rsaDecrypt "SCHEME" "HASH" ciphertext&gt;</code>. <strong>SCHEME</strong>: supported values are <code>"None"</code> and <code>"RSA-OAEP"</code>. <strong>HASH</strong>: supported values are <code>"SHA1"</code> and <code>"SHA256"</code>. <strong>Ciphertext</strong> must be binary — use <code>b64dec</code> or <code>decodingStrategy: Base64</code> to convert Base64 payloads.</td>
  2094. </tr>
  2095. <tr>
  2096. <td>toYaml</td>
  2097. <td>Takes an interface, marshals it to yaml. It returns a string, even on marshal error (empty string).</td>
  2098. </tr>
  2099. <tr>
  2100. <td>fromYaml</td>
  2101. <td>Function converts a YAML document into a map[string]any.</td>
  2102. </tr>
  2103. <tr>
  2104. <td>hexdec</td>
  2105. <td>decodes hexadecimal values</td>
  2106. </tr>
  2107. </tbody>
  2108. </table>
  2109. <h2 id="migrating-from-v1">Migrating from v1</h2>
  2110. <p>If you are still using <code>v1alpha1</code>, You have to opt-in to use the new engine version by specifying <code>template.engineVersion=v2</code>:</p>
  2111. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
  2112. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  2113. <span class="nt">metadata</span><span class="p">:</span>
  2114. <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">secret</span>
  2115. <span class="nt">spec</span><span class="p">:</span>
  2116. <span class="w"> </span><span class="c1"># ...</span>
  2117. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  2118. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  2119. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  2120. <span class="w"> </span><span class="c1"># ...</span>
  2121. </code></pre></div>
  2122. <p>The biggest change was that basically all function parameter types were changed from accepting/returning <code>[]byte</code> to <code>string</code>. This is relevant for you because now you don't need to specify <code>toString</code> all the time at the end of a template pipeline.</p>
  2123. <div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
  2124. <span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
  2125. <span class="c1"># ...</span>
  2126. <span class="nt">spec</span><span class="p">:</span>
  2127. <span class="w"> </span><span class="nt">target</span><span class="p">:</span>
  2128. <span class="w"> </span><span class="nt">template</span><span class="p">:</span>
  2129. <span class="w"> </span><span class="nt">engineVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">v2</span>
  2130. <span class="w"> </span><span class="nt">data</span><span class="p">:</span>
  2131. <span class="w"> </span><span class="c1"># this used to be {{ .foobar | toString }}</span>
  2132. <span class="w"> </span><span class="nt">egg</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;new:</span><span class="nv"> </span><span class="s">{{</span><span class="nv"> </span><span class="s">.foobar</span><span class="nv"> </span><span class="s">}}&quot;</span>
  2133. </code></pre></div>
  2134. <h5 id="functions-removedreplaced">Functions removed/replaced</h5>
  2135. <ul>
  2136. <li><code>base64encode</code> was renamed to <code>b64enc</code>.</li>
  2137. <li><code>base64decode</code> was renamed to <code>b64dec</code>. Any errors that occur during decoding are silenced.</li>
  2138. <li><code>fromJSON</code> was renamed to <code>fromJson</code>. Any errors that occur during unmarshalling are silenced.</li>
  2139. <li><code>toJSON</code> was renamed to <code>toJson</code>. Any errors that occur during marshalling are silenced.</li>
  2140. <li><code>pkcs12key</code> and <code>pkcs12keyPass</code> encode the PKCS#8 key directly into PEM format. There is no need to call <code>pemPrivateKey</code> anymore. Also, these functions do extract all private keys from the PKCS#12 archive not just the first one.</li>
  2141. <li><code>pkcs12cert</code> and <code>pkcs12certPass</code> encode the certs directly into PEM format. There is no need to call <code>pemCertificate</code> anymore. These functions now <strong>extract all certificates</strong> from the PKCS#12 archive not just the first one.</li>
  2142. <li><code>toString</code> implementation was replaced by the <code>sprig</code> implementation and should be api-compatible.</li>
  2143. <li><code>toBytes</code> was removed.</li>
  2144. <li><code>pemPrivateKey</code> was removed. It's now implemented within the <code>pkcs12*</code> functions.</li>
  2145. <li><code>pemCertificate</code> was removed. It's now implemented within the <code>pkcs12*</code> functions.</li>
  2146. </ul>
  2147. </article>
  2148. </div>
  2149. <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
  2150. </div>
  2151. </main>
  2152. <img referrerpolicy="no-referrer-when-downgrade"
  2153. src="https://static.scarf.sh/a.png?x-pxid=6658a9eb-067d-49f1-94f2-b8b00f21451e" alt=""
  2154. hidden />
  2155. <footer class="md-footer">
  2156. <div class="md-footer-meta md-typeset">
  2157. <div class="md-footer-meta__inner md-grid">
  2158. <div class="md-copyright">
  2159. <div class="md-copyright__highlight">
  2160. &copy; 2025 The external-secrets Authors.<br/>
  2161. &copy; 2025 The Linux Foundation. All rights reserved.<br/><br/>
  2162. The Linux Foundation has registered trademarks and uses trademarks.<br/>
  2163. For a list of trademarks of The Linux Foundation, please see our <a href="https://www.linuxfoundation.org/trademark-usage/">Trademark Usage page</a>.
  2164. </div>
  2165. Made with
  2166. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  2167. Material for MkDocs
  2168. </a>
  2169. </div>
  2170. </div>
  2171. </div>
  2172. </footer>
  2173. </div>
  2174. <div class="md-dialog" data-md-component="dialog">
  2175. <div class="md-dialog__inner md-typeset"></div>
  2176. </div>
  2177. <script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.tabs", "navigation.indexes", "navigation.expand"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
  2178. <script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
  2179. </body>
  2180. </html>