Home

Awesome

External Secret Operator

github actions Go Report Card codecov

This operator reads information from a third party service like AWS Secrets Manager or AWS SSM and automatically injects the values as Kubernetes Secrets.

Disclaimer ⚠️

This project will not be maintained anymore, and we are trying to concentrate afforts on this new colaboration:

external-secrets/external-secrets

Website: https://www.external-secrets.io/

Table of Contents

<a name="features"></a>

Features

<a name="quick-start"></a>

Quick start

<!-- If you want to jump right into action you can deploy the External Secrets Operator using the provided [helm chart](./deployments/helm/externalsecret-operator/README.md) or [manifests](./deploy). The following examples are specific to the AWS Secret Manager backend. --> <!-- <a name="helm"></a> --> <!-- ## Helm Here's how you can deploy the External Secret Operator in the `default`. ```shell export AWS_ACCESS_KEY_ID="AKIAYOURSECRETKEYID" export AWS_DEFAULT_REGION="eu-west-1" export AWS_SECRET_ACCESS_KEY="OoXie5Mai6Qu3fakemeezoo4ahfoo6IHahch0rai" helm upgrade --install asm1 --wait \ --set operatorName="asm-example" \ --set secret.data.Type="asm" \ --set secret.data.Parameters.accessKeyID="$AWS_ACCESS_KEY_ID" \ --set secret.data.Parameters.region="$AWS_DEFAULT_REGION" \ --set secret.data.Parameters.secretAccessKey="$AWS_SECRET_ACCESS_KEY" \ ./deployments/helm/externalsecret-operator/. ``` It will watch for `ExternalSecrets` with `Backend: asm-example` resources in the `default` namespace and it will inject a corresponding `Secret` with the value retrieved from AWS Secret Manager. -->

<a name="kustomize"></a>

Using Kustomize

Install the operator CRDs

make install

<a name="#what-does-it-do"></a>

What does it do?

Given a secret defined in AWS Secrets Manager:

% aws secretsmanager create-secret \
  --name=example-externalsecret-key \
  --secret-string='this string is a secret'

and updated aws credentials to be used in config/credentials/kustomization.yaml with valid AWS credentials:

%cat config/credentials/kustomization.yaml
resources:
# - credentials-gsm.yaml
- credentials-asm.yaml
# - credentials-dummy.yaml
# - credentials-gitlab.yaml
# - credentials-akv.yaml
%cat config/credentials/credentials-asm.yaml
...
credentials.json: |-
    {
      "accessKeyID": "AKIA...",
      "secretAccessKey": "cmFuZG9tS2VZb25Eb2Nz...",
      "sessionToken": "" 
    }

and an SecretStore resource definition like this one:

% cat config/samples/store_v1alpha1_secretstore.yaml
apiVersion: store.externalsecret-operator.container-solutions.com/v1alpha1
kind: SecretStore
metadata:
  name: secretstore-sample
spec:
  controller: staging
  store:
    type: asm
    auth: 
      secretRef: 
        name: externalsecret-operator-credentials-asm
    parameters:
      region: eu-west-2

and an ExternalSecret resource definition like this one:

% cat config/samples/secrets_v1alpha1_externalsecret.yaml
apiVersion: secrets.externalsecret-operator.container-solutions.com/v1alpha1
kind: ExternalSecret
metadata:
  name: externalsecret-sample
spec:
  storeRef: 
    name: externalsecret-operator-secretstore-sample
  data:
    - key: example-externalsecret-key
      version: latest

The operator fetches the secret from AWS Secrets Manager and injects it as a secret:

% make deploy
% kubectl get secret externalsecret-operator-externalsecret-sample -n externalsecret-operator-system \
  -o jsonpath='{.data.example-externalsecret-key}' | base64 -d
this string is a secret

<a name="architecture"></a>

Architecture

In this article you can find more information about the architecture and design choices.

Here's a high-level diagram of how things are put together.

architecture

<a name="running-tests"></a>

Running tests

Requirements:

Then just:

make test

<a name="spec"></a>

CRDs Spec

<a name="secrets-backends"></a>

Other Supported Backends

We would like to support as many backends as possible and it should be rather easy to write new ones. Currently supported backends are:

ProviderBackend Doc
AWS Secrets Manager InfoAWS Secrets Manager Backend Docs
Credstash InfoCredstash (AWS KMS) Docs
GCP Secret Manager InfoGCP Secret Manager Backend Docs
Gitlab CI/CD Variables InfoGitlab CI/CD Variables Backend Docs
Azure Key Vault InfoAzure Key Vault Backend Docs

<a name="contributing"></a>

Contributing

Yay! We welcome and encourage contributions to this project!

See our contributing document and Issues for planned improvements and additions.