|
|
@@ -77,6 +77,10 @@
|
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
|
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
|
|
|
|
|
|
+ <a href="#google-cloud-secret-manager" tabindex="1" class="md-skip">
|
|
|
+ Skip to content
|
|
|
+ </a>
|
|
|
+
|
|
|
|
|
|
<header class="md-header" data-md-component="header">
|
|
|
<nav class="md-header-nav md-grid">
|
|
|
@@ -510,10 +514,77 @@
|
|
|
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
|
|
|
|
|
|
|
|
+ <label class="md-nav__link md-nav__link--active" for="__toc">
|
|
|
+ Secrets Manager
|
|
|
+ </label>
|
|
|
+
|
|
|
<a href="./" title="Secrets Manager" class="md-nav__link md-nav__link--active">
|
|
|
Secrets Manager
|
|
|
</a>
|
|
|
|
|
|
+
|
|
|
+<nav class="md-nav md-nav--secondary">
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ <label class="md-nav__title" for="__toc">Table of contents</label>
|
|
|
+ <ul class="md-nav__list" data-md-scrollfix>
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#google-cloud-secret-manager" class="md-nav__link">
|
|
|
+ Google Cloud Secret Manager
|
|
|
+ </a>
|
|
|
+
|
|
|
+ <nav class="md-nav">
|
|
|
+ <ul class="md-nav__list">
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#authentication" class="md-nav__link">
|
|
|
+ Authentication
|
|
|
+ </a>
|
|
|
+
|
|
|
+ <nav class="md-nav">
|
|
|
+ <ul class="md-nav__list">
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#service-account-key-authentication" class="md-nav__link">
|
|
|
+ Service account key authentication
|
|
|
+ </a>
|
|
|
+
|
|
|
+</li>
|
|
|
+
|
|
|
+ </ul>
|
|
|
+ </nav>
|
|
|
+
|
|
|
+</li>
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#update-secret-store" class="md-nav__link">
|
|
|
+ Update secret store
|
|
|
+ </a>
|
|
|
+
|
|
|
+</li>
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#creating-external-secret" class="md-nav__link">
|
|
|
+ Creating external secret
|
|
|
+ </a>
|
|
|
+
|
|
|
+</li>
|
|
|
+
|
|
|
+ </ul>
|
|
|
+ </nav>
|
|
|
+
|
|
|
+</li>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ </ul>
|
|
|
+
|
|
|
+</nav>
|
|
|
+
|
|
|
</li>
|
|
|
|
|
|
|
|
|
@@ -642,6 +713,75 @@
|
|
|
</div>
|
|
|
|
|
|
|
|
|
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
|
|
|
+ <div class="md-sidebar__scrollwrap">
|
|
|
+ <div class="md-sidebar__inner">
|
|
|
+
|
|
|
+<nav class="md-nav md-nav--secondary">
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ <label class="md-nav__title" for="__toc">Table of contents</label>
|
|
|
+ <ul class="md-nav__list" data-md-scrollfix>
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#google-cloud-secret-manager" class="md-nav__link">
|
|
|
+ Google Cloud Secret Manager
|
|
|
+ </a>
|
|
|
+
|
|
|
+ <nav class="md-nav">
|
|
|
+ <ul class="md-nav__list">
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#authentication" class="md-nav__link">
|
|
|
+ Authentication
|
|
|
+ </a>
|
|
|
+
|
|
|
+ <nav class="md-nav">
|
|
|
+ <ul class="md-nav__list">
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#service-account-key-authentication" class="md-nav__link">
|
|
|
+ Service account key authentication
|
|
|
+ </a>
|
|
|
+
|
|
|
+</li>
|
|
|
+
|
|
|
+ </ul>
|
|
|
+ </nav>
|
|
|
+
|
|
|
+</li>
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#update-secret-store" class="md-nav__link">
|
|
|
+ Update secret store
|
|
|
+ </a>
|
|
|
+
|
|
|
+</li>
|
|
|
+
|
|
|
+ <li class="md-nav__item">
|
|
|
+ <a href="#creating-external-secret" class="md-nav__link">
|
|
|
+ Creating external secret
|
|
|
+ </a>
|
|
|
+
|
|
|
+</li>
|
|
|
+
|
|
|
+ </ul>
|
|
|
+ </nav>
|
|
|
+
|
|
|
+</li>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ </ul>
|
|
|
+
|
|
|
+</nav>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
|
|
|
<div class="md-content">
|
|
|
<article class="md-content__inner md-typeset">
|
|
|
@@ -652,12 +792,75 @@
|
|
|
|
|
|
<h1>Secrets Manager</h1>
|
|
|
|
|
|
- <div class="admonition bug">
|
|
|
-<p class="admonition-title">Not implemented</p>
|
|
|
-<p>This is currently <strong>not yet</strong> implemented. Feel free to contribute.
|
|
|
-Please see <a href="https://github.com/external-secrets/external-secrets/issues/33">issue#33</a>
|
|
|
-for futher information.</p>
|
|
|
-</div>
|
|
|
+ <h2 id="google-cloud-secret-manager">Google Cloud Secret Manager</h2>
|
|
|
+<p>External Secrets Operator integrates with <a href="https://cloud.google.com/secret-manager">GCP Secret Manager</a> for secret management.</p>
|
|
|
+<h3 id="authentication">Authentication</h3>
|
|
|
+<p>At the moment, we only support <a href="https://cloud.google.com/iam/docs/creating-managing-service-account-keys">service account key</a> authentication.</p>
|
|
|
+<h4 id="service-account-key-authentication">Service account key authentication</h4>
|
|
|
+<p>A service account key is created and the JSON keyfile is stored in a <code>Kind=Secret</code>. The <code>project_id</code> and <code>private_key</code> should be configured for the project.</p>
|
|
|
+<div class="highlight"><pre><span></span><span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">v1</span>
|
|
|
+<span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Secret</span>
|
|
|
+<span class="nt">metadata</span><span class="p">:</span>
|
|
|
+ <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">gcpsm-secret</span>
|
|
|
+ <span class="nt">labels</span><span class="p">:</span>
|
|
|
+ <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">gcpsm</span>
|
|
|
+<span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Opaque</span>
|
|
|
+<span class="nt">stringData</span><span class="p">:</span>
|
|
|
+ <span class="nt">secret-access-credentials</span><span class="p">:</span> <span class="p p-Indicator">|-</span>
|
|
|
+ <span class="no">{</span>
|
|
|
+ <span class="no">"type": "service_account",</span>
|
|
|
+ <span class="no">"project_id": "external-secrets-operator",</span>
|
|
|
+ <span class="no">"private_key_id": "",</span>
|
|
|
+ <span class="no">"private_key": "-----BEGIN PRIVATE KEY-----\nA key\n-----END PRIVATE KEY-----\n",</span>
|
|
|
+ <span class="no">"client_email": "test-service-account@external-secrets-operator.iam.gserviceaccount.com",</span>
|
|
|
+ <span class="no">"client_id": "client ID",</span>
|
|
|
+ <span class="no">"auth_uri": "https://accounts.google.com/o/oauth2/auth",</span>
|
|
|
+ <span class="no">"token_uri": "https://oauth2.googleapis.com/token",</span>
|
|
|
+ <span class="no">"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",</span>
|
|
|
+ <span class="no">"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test-service-account%40external-secrets-operator.iam.gserviceaccount.com"</span>
|
|
|
+ <span class="no">}</span>
|
|
|
+</pre></div>
|
|
|
+
|
|
|
+<h3 id="update-secret-store">Update secret store</h3>
|
|
|
+<p>Be sure the <code>gcpsm</code> provider is listed in the <code>Kind=SecretStore</code></p>
|
|
|
+<div class="highlight"><pre><span></span><span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
|
|
|
+<span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">SecretStore</span>
|
|
|
+<span class="nt">metadata</span><span class="p">:</span>
|
|
|
+ <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">example</span>
|
|
|
+<span class="nt">spec</span><span class="p">:</span>
|
|
|
+ <span class="nt">provider</span><span class="p">:</span>
|
|
|
+ <span class="nt">gcpsm</span><span class="p">:</span> <span class="c1"># gcpsm provider</span>
|
|
|
+ <span class="nt">auth</span><span class="p">:</span>
|
|
|
+ <span class="nt">secretRef</span><span class="p">:</span>
|
|
|
+ <span class="nt">secretAccessKeySecretRef</span><span class="p">:</span>
|
|
|
+ <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">gcpsm-secret</span> <span class="c1"># secret name containing SA key</span>
|
|
|
+ <span class="nt">key</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">secret-access-credentials</span> <span class="c1"># key name containing SA key</span>
|
|
|
+ <span class="nt">projectID</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">myproject</span> <span class="c1"># name of Google Cloud project</span>
|
|
|
+</pre></div>
|
|
|
+
|
|
|
+<h3 id="creating-external-secret">Creating external secret</h3>
|
|
|
+<p>To create a kubernetes secret from the GCP Secret Manager secret a <code>Kind=ExternalSecret</code> is needed.</p>
|
|
|
+<div class="highlight"><pre><span></span><span class="nt">apiVersion</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1alpha1</span>
|
|
|
+<span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
|
|
|
+<span class="nt">metadata</span><span class="p">:</span>
|
|
|
+ <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">example</span>
|
|
|
+<span class="nt">spec</span><span class="p">:</span>
|
|
|
+ <span class="nt">refreshInterval</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1h</span> <span class="c1"># rate SecretManager pulls GCPSM</span>
|
|
|
+ <span class="nt">secretStoreRef</span><span class="p">:</span>
|
|
|
+ <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">SecretStore</span>
|
|
|
+ <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">example</span> <span class="c1"># name of the SecretStore (or kind specified)</span>
|
|
|
+ <span class="nt">target</span><span class="p">:</span>
|
|
|
+ <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">secret-to-be-created</span> <span class="c1"># name of the k8s Secret to be created</span>
|
|
|
+ <span class="nt">creationPolicy</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Owner</span>
|
|
|
+ <span class="nt">data</span><span class="p">:</span>
|
|
|
+ <span class="p p-Indicator">-</span> <span class="nt">secretKey</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">dev-secret-test</span> <span class="c1"># name of the GCPSM secret key</span>
|
|
|
+ <span class="nt">remoteRef</span><span class="p">:</span>
|
|
|
+ <span class="nt">key</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">dev-secret-test</span>
|
|
|
+</pre></div>
|
|
|
+
|
|
|
+<p>The operator will fetch the GCP Secret Manager secret and inject it as a <code>Kind=Secret</code>
|
|
|
+<div class="highlight"><pre><span></span>kubectl get secret secret-to-be-created -n <namespace> | -o jsonpath='{.data.example-externalsecret-key}' | base64 -d
|
|
|
+</pre></div></p>
|
|
|
|
|
|
|
|
|
|