|
|
@@ -848,6 +848,13 @@
|
|
|
Multiple nested Values
|
|
|
</a>
|
|
|
|
|
|
+</li>
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#getting-multiple-secrets" class="md-nav__link">
|
|
|
+ Getting multiple secrets
|
|
|
+ </a>
|
|
|
+
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
@@ -1483,6 +1490,13 @@
|
|
|
Multiple nested Values
|
|
|
</a>
|
|
|
|
|
|
+</li>
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#getting-multiple-secrets" class="md-nav__link">
|
|
|
+ Getting multiple secrets
|
|
|
+ </a>
|
|
|
+
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
@@ -1596,7 +1610,7 @@ management. Vault itself implements lots of different secret engines, as of now
|
|
|
<a href="https://www.vaultproject.io/docs/secrets/kv">KV Secrets Engine</a>.</p>
|
|
|
<h3 id="example">Example</h3>
|
|
|
<p>First, create a SecretStore with a vault backend. For the sake of simplicity we'll use a static token <code>root</code>:</p>
|
|
|
-<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/v1alpha1</span><span class="w"></span>
|
|
|
+<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/v1beta1</span><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="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
<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">vault-backend</span><span class="w"></span>
|
|
|
@@ -1625,7 +1639,7 @@ management. Vault itself implements lots of different secret engines, as of now
|
|
|
<div class="highlight"><pre><span></span><code>vault kv put secret/foo my-value=s3cr3t
|
|
|
</code></pre></div>
|
|
|
<p>Now create a ExternalSecret that uses the above SecretStore:</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/v1alpha1</span><span class="w"></span>
|
|
|
+<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><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">ExternalSecret</span><span class="w"></span>
|
|
|
<span class="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
<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">vault-example</span><span class="w"></span>
|
|
|
@@ -1651,7 +1665,7 @@ management. Vault itself implements lots of different secret engines, as of now
|
|
|
</code></pre></div>
|
|
|
<h4 id="fetching-raw-values">Fetching Raw Values</h4>
|
|
|
<p>You can fetch all key/value pairs for a given path If you leave the <code>remoteRef.property</code> empty. This returns the json-encoded secret value for that path.</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/v1alpha1</span><span class="w"></span>
|
|
|
+<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><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">ExternalSecret</span><span class="w"></span>
|
|
|
<span class="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
<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">vault-example</span><span class="w"></span>
|
|
|
@@ -1674,7 +1688,7 @@ management. Vault itself implements lots of different secret engines, as of now
|
|
|
<span class="p">}</span><span class="w"></span>
|
|
|
</code></pre></div></p>
|
|
|
<p>You can set the <code>remoteRef.property</code> to point to the nested key using a <a href="https://github.com/tidwall/gjson">gjson</a> expression.
|
|
|
-<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><span class="w"></span>
|
|
|
+<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><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">ExternalSecret</span><span class="w"></span>
|
|
|
<span class="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
<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">vault-example</span><span class="w"></span>
|
|
|
@@ -1703,20 +1717,86 @@ management. Vault itself implements lots of different secret engines, as of now
|
|
|
<span class="p">}</span><span class="w"></span>
|
|
|
</code></pre></div></p>
|
|
|
<p>You can set the <code>remoteRef.property</code> to point to the nested key using a <a href="https://github.com/tidwall/gjson">gjson</a> expression.
|
|
|
-<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><span class="w"></span>
|
|
|
+<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><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">ExternalSecret</span><span class="w"></span>
|
|
|
<span class="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
<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">vault-example</span><span class="w"></span>
|
|
|
<span class="nt">spec</span><span class="p">:</span><span class="w"></span>
|
|
|
<span class="w"> </span><span class="c1"># ...</span><span class="w"></span>
|
|
|
<span class="w"> </span><span class="nt">dataFrom</span><span class="p">:</span><span class="w"></span>
|
|
|
-<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">/dev/config</span><span class="w"></span>
|
|
|
-<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">foo.nested</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">extract</span><span class="p">:</span><span class="w"></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">/dev/config</span><span class="w"></span>
|
|
|
+<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">foo.nested</span><span class="w"></span>
|
|
|
</code></pre></div></p>
|
|
|
<p>That results in a secret with these values:
|
|
|
<div class="highlight"><pre><span></span><code>bar=mysecret
|
|
|
baz=bang
|
|
|
</code></pre></div></p>
|
|
|
+<h4 id="getting-multiple-secrets">Getting multiple secrets</h4>
|
|
|
+<p>You can extract multiple secrets from Hashicorp vault by using <code>dataFrom.Find</code></p>
|
|
|
+<p>Currently, <code>dataFrom.Find</code> allows users to fetch secret names that match a given regexp pattern, or fetch secrets whose <code>custom_metadata</code> tags match a predefined set.</p>
|
|
|
+<div class="admonition warning">
|
|
|
+<p class="admonition-title">Warning</p>
|
|
|
+<p>The way hashicorp Vault currently allows LIST operations is through the existence of a secret metadata. If you delete the secret, you will also need to delete the secret's metadata or this will currently make Find operations fail.</p>
|
|
|
+</div>
|
|
|
+<p>Given the following secret - assume its path is <code>/dev/config</code>:
|
|
|
+<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">"foo"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">"nested"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">"bar"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mysecret"</span><span class="p">,</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">"baz"</span><span class="p">:</span><span class="w"> </span><span class="s2">"bang"</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
|
|
|
+<span class="p">}</span><span class="w"></span>
|
|
|
+</code></pre></div></p>
|
|
|
+<p>Also consider the following secret has the following <code>custom_metadata</code>:
|
|
|
+<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">"environment"</span><span class="p">:</span><span class="w"> </span><span class="s2">"dev"</span><span class="p">,</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">"component"</span><span class="p">:</span><span class="w"> </span><span class="s2">"app-1"</span><span class="w"></span>
|
|
|
+<span class="p">}</span><span class="w"></span>
|
|
|
+</code></pre></div></p>
|
|
|
+<p>It is possible to find this secret by all the following possibilities:
|
|
|
+<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><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">ExternalSecret</span><span class="w"></span>
|
|
|
+<span class="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
+<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">vault-example</span><span class="w"></span>
|
|
|
+<span class="nt">spec</span><span class="p">:</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="c1"># ...</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">dataFrom</span><span class="p">:</span><span class="w"> </span>
|
|
|
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">find</span><span class="p">:</span><span class="w"> </span><span class="c1">#will return every secret with 'dev' in it (including paths) </span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span>
|
|
|
+<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">dev</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">find</span><span class="p">:</span><span class="w"> </span><span class="c1">#will return every secret matching environment:dev tags from dev/ folder and beyond </span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">tags</span><span class="p">:</span><span class="w"> </span>
|
|
|
+<span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">dev</span><span class="w"></span>
|
|
|
+</code></pre></div>
|
|
|
+will generate a secret with:
|
|
|
+<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">"dev_config"</span><span class="p">:</span><span class="s2">"{\"foo\":{\"nested\":{\"bar\":\"mysecret\",\"baz\":\"bang\"}}}"</span><span class="w"></span>
|
|
|
+<span class="p">}</span><span class="w"></span>
|
|
|
+</code></pre></div></p>
|
|
|
+<p>Currently, <code>Find</code> operations are recursive throughout a given vault folder, starting on <code>provider.Path</code> definition. It is recommended to narrow down the scope of search by setting a <code>find.path</code> variable. This is also useful to automatically reduce the resulting secret key names:
|
|
|
+<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><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">ExternalSecret</span><span class="w"></span>
|
|
|
+<span class="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
+<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">vault-example</span><span class="w"></span>
|
|
|
+<span class="nt">spec</span><span class="p">:</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="c1"># ...</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">dataFrom</span><span class="p">:</span><span class="w"> </span>
|
|
|
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">find</span><span class="p">:</span><span class="w"> </span><span class="c1">#will return every secret from dev/ folder </span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">dev</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span>
|
|
|
+<span class="w"> </span><span class="nt">regexp</span><span class="p">:</span><span class="w"> </span><span class="s">".*"</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">find</span><span class="p">:</span><span class="w"> </span><span class="c1">#will return every secret matching environment:dev tags from dev/ folder</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">dev</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">tags</span><span class="p">:</span><span class="w"> </span>
|
|
|
+<span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">dev</span><span class="w"></span>
|
|
|
+</code></pre></div>
|
|
|
+Will generate a secret with:
|
|
|
+<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="w"></span>
|
|
|
+<span class="w"> </span><span class="nt">"config"</span><span class="p">:</span><span class="s2">"{\"foo\": {\"nested\": {\"bar\": \"mysecret\",\"baz\": \"bang\"}}}"</span><span class="w"></span>
|
|
|
+<span class="p">}</span><span class="w"></span>
|
|
|
+</code></pre></div></p>
|
|
|
<h3 id="authentication">Authentication</h3>
|
|
|
<p>We support five different modes for authentication:
|
|
|
<a href="https://www.vaultproject.io/docs/auth/token">token-based</a>,
|
|
|
@@ -1727,7 +1807,7 @@ baz=bang
|
|
|
trade-offs. Depending on the authentication method you need to adapt your environment.</p>
|
|
|
<h4 id="token-based-authentication">Token-based authentication</h4>
|
|
|
<p>A static token is stored in a <code>Kind=Secret</code> and is used to authenticate with vault.</p>
|
|
|
-<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/v1alpha1</span><span class="w"></span>
|
|
|
+<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/v1beta1</span><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="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
<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">vault-backend</span><span class="w"></span>
|
|
|
@@ -1749,7 +1829,7 @@ trade-offs. Depending on the authentication method you need to adapt your enviro
|
|
|
<h4 id="approle-authentication-example">AppRole authentication example</h4>
|
|
|
<p><a href="https://www.vaultproject.io/docs/auth/approle">AppRole authentication</a> reads the secret id from a
|
|
|
<code>Kind=Secret</code> and uses the specified <code>roleId</code> to aquire a temporary token to fetch secrets.</p>
|
|
|
-<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/v1alpha1</span><span class="w"></span>
|
|
|
+<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/v1beta1</span><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="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
<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">vault-backend</span><span class="w"></span>
|
|
|
@@ -1784,7 +1864,7 @@ options of optaining credentials for vault:</p>
|
|
|
<li>by using transient credentials from the mounted service account token within the
|
|
|
external-secrets operator</li>
|
|
|
</ol>
|
|
|
-<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/v1alpha1</span><span class="w"></span>
|
|
|
+<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/v1beta1</span><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="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
<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">vault-backend</span><span class="w"></span>
|
|
|
@@ -1820,7 +1900,7 @@ options of optaining credentials for vault:</p>
|
|
|
username/password pair to get an access token. Username is stored directly in
|
|
|
a <code>Kind=SecretStore</code> or <code>Kind=ClusterSecretStore</code> resource, password is stored
|
|
|
in a <code>Kind=Secret</code> referenced by the <code>secretRef</code>.</p>
|
|
|
-<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/v1alpha1</span><span class="w"></span>
|
|
|
+<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/v1beta1</span><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="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
<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">vault-backend</span><span class="w"></span>
|
|
|
@@ -1849,7 +1929,7 @@ in a <code>Kind=Secret</code> referenced by the <code>secretRef</code>.</p>
|
|
|
<a href="https://jwt.io/">JWT</a> token stored in a <code>Kind=Secret</code> and referenced by the
|
|
|
<code>secretRef</code>. Optionally a <code>role</code> field can be defined in a <code>Kind=SecretStore</code>
|
|
|
or <code>Kind=ClusterSecretStore</code> resource.</p>
|
|
|
-<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/v1alpha1</span><span class="w"></span>
|
|
|
+<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/v1beta1</span><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="nt">metadata</span><span class="p">:</span><span class="w"></span>
|
|
|
<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">vault-backend</span><span class="w"></span>
|