diff --git a/chart/templates/external-secrets/git-credentials.yaml b/chart/templates/external-secrets/git-credentials.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1d97643d654fe41f7b80cb753755ec29ec21593c
--- /dev/null
+++ b/chart/templates/external-secrets/git-credentials.yaml
@@ -0,0 +1,7 @@
+{{- $gitCredsSecretDict := dict
+  "name" "externalSecrets"
+  "targetScope" .Values.addons.externalSecrets
+  "releaseName" .Release.Name
+  "releaseNamespace" .Release.Namespace
+}}
+{{- include "gitCredsSecret" $gitCredsSecretDict | nindent 0 -}}
diff --git a/chart/templates/external-secrets/gitrepository.yaml b/chart/templates/external-secrets/gitrepository.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..82014b9d8504c661c34ea46ab3e8e076c0964b9c
--- /dev/null
+++ b/chart/templates/external-secrets/gitrepository.yaml
@@ -0,0 +1,24 @@
+{{- if and (eq .Values.addons.externalSecrets.sourceType "git") .Values.addons.externalSecrets.enabled  }}
+{{- $gitCredsDict := dict
+  "name" "externalSecrets"
+  "packageGitScope" .Values.addons.externalSecrets.git
+  "rootScope" .
+  "releaseName" .Release.Name
+}}
+apiVersion: source.toolkit.fluxcd.io/v1
+kind: GitRepository
+metadata:
+  name: external-secrets
+  namespace: {{ .Release.Namespace }}
+  labels:
+    app.kubernetes.io/name: external-secrets
+    app.kubernetes.io/component: "core"
+    {{- include "commonLabels" . | nindent 4}}
+spec:
+  interval: {{ .Values.flux.interval }}
+  url: {{ .Values.addons.externalSecrets.git.repo }}
+  ref:
+    {{- include "validRef" .Values.addons.externalSecrets.git | nindent 4 }}
+  {{ include "gitIgnore" . }}
+  {{- include "gitCredsExtended" $gitCredsDict | nindent 2 }}
+{{- end }}
diff --git a/chart/templates/external-secrets/helmrelease.yaml b/chart/templates/external-secrets/helmrelease.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1ff84d188e27bb2a4669df83766f25fc6a76c44c
--- /dev/null
+++ b/chart/templates/external-secrets/helmrelease.yaml
@@ -0,0 +1,73 @@
+{{- $fluxSettings := merge .Values.addons.externalSecrets.flux .Values.flux -}}
+{{- if .Values.addons.externalSecrets.enabled }}
+apiVersion: helm.toolkit.fluxcd.io/v2
+kind: HelmRelease
+metadata:
+  name: external-secrets
+  namespace: {{ .Release.Namespace }}
+  labels:
+    app.kubernetes.io/name: external-secrets
+    app.kubernetes.io/component: "core"
+    {{- include "commonLabels" . | nindent 4}}
+  annotations:
+    checksum/bigbang-values: {{ include (print $.Template.BasePath "/external-secrets/values.yaml") . | sha256sum }}
+spec:
+  targetNamespace: external-secrets
+  chart:
+    spec:
+      {{- if eq .Values.addons.externalSecrets.sourceType "git" }}
+      chart: {{ .Values.addons.externalSecrets.git.path }}
+      sourceRef:
+        kind: GitRepository
+        name: external-secrets
+        namespace: {{ .Release.Namespace }}
+      {{- else }}
+      chart: {{ .Values.addons.externalSecrets.helmRepo.chartName }}
+      version: {{ .Values.addons.externalSecrets.helmRepo.tag }}
+      sourceRef:
+        kind: HelmRepository
+        name: {{ .Values.addons.externalSecrets.helmRepo.repoName }}
+        namespace: {{ .Release.Namespace }}
+      {{- $repoType := include "getRepoType" (dict "repoName" .Values.addons.externalSecrets.helmRepo.repoName "allRepos" .Values.helmRepositories) -}}
+      {{- if (and .Values.addons.externalSecrets.helmRepo.cosignVerify (eq $repoType "oci")) }} # Needs to be an OCI repo
+      verify:
+        provider: cosign
+        secretRef:
+          name: {{ printf "%s-cosign-pub" .Values.addons.externalSecrets.helmRepo.repoName }}
+      {{- end }}
+      {{- end }}
+      interval: 5m
+
+  {{- toYaml $fluxSettings | nindent 2 }}
+
+  {{- if .Values.addons.externalSecrets.postRenderers }}
+  postRenderers:
+  {{- toYaml .Values.addons.externalSecrets.postRenderers | nindent 2 }}
+  {{- end }}
+  valuesFrom:
+    - name: {{ .Release.Name }}-external-secrets-values
+      kind: Secret
+      valuesKey: "common"
+    - name: {{ .Release.Name }}-external-secrets-values
+      kind: Secret
+      valuesKey: "defaults"
+    - name: {{ .Release.Name }}-external-secrets-values
+      kind: Secret
+      valuesKey: "overlays"
+
+  {{- if or .Values.istio.enabled .Values.kyvernoPolicies.enabled .Values.monitoring.enabled }}
+  dependsOn:
+  {{- if .Values.istio.enabled }}
+    - name: istio
+      namespace: {{ .Release.Namespace }}
+  {{- end }}
+  {{- if .Values.kyvernoPolicies.enabled }}
+    - name: kyverno-policies
+      namespace: {{ .Release.Namespace }}
+  {{- end }}
+  {{- if .Values.monitoring.enabled }}
+    - name: monitoring
+      namespace: {{ .Release.Namespace }}
+  {{- end }}
+  {{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/chart/templates/external-secrets/imagepullsecret.yaml b/chart/templates/external-secrets/imagepullsecret.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8c01b2b78d1728d828fd42c71241dcf3f5437311
--- /dev/null
+++ b/chart/templates/external-secrets/imagepullsecret.yaml
@@ -0,0 +1,12 @@
+{{- if .Values.addons.externalSecrets.enabled }}
+{{- if ( include "imagePullSecret" . ) }}
+apiVersion: v1
+kind: Secret
+metadata:
+  name: private-registry
+  namespace: external-secrets
+type: kubernetes.io/dockerconfigjson
+data:
+  .dockerconfigjson: {{ template "imagePullSecret" . }}
+{{- end }}
+{{- end }}
diff --git a/chart/templates/external-secrets/namespace.yaml b/chart/templates/external-secrets/namespace.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8a997f657bba1b66ac0cbb804ff7ee686d06209a
--- /dev/null
+++ b/chart/templates/external-secrets/namespace.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.addons.externalSecrets.enabled }}
+apiVersion: v1
+kind: Namespace
+metadata:
+  labels:
+    meta.helm.sh/release-namespace: bigbang
+    meta.helm.sh/release-name: bigbang
+    app.kubernetes.io/name: external-secrets
+    app.kubernetes.io/component: "core"
+    {{- include "commonLabels" . | nindent 4}}
+    istio-injection: enabled
+  name: external-secrets
+{{- end }}
diff --git a/chart/templates/external-secrets/values.yaml b/chart/templates/external-secrets/values.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3c979f079dbb817b27d1e509a50629336545cb97
--- /dev/null
+++ b/chart/templates/external-secrets/values.yaml
@@ -0,0 +1,26 @@
+{{- if .Values.addons.externalSecrets.enabled }}
+{{- include "values-secret" (dict "root" $ "package" .Values.addons.externalSecrets "name" "external-secrets" "defaults" (include "bigbang.defaults.external-secrets" .)) }}
+{{- end }}
+
+{{- define "bigbang.defaults.external-secrets" -}}
+
+image:
+  imagePullPolicy: {{ .Values.imagePullPolicy }}
+
+monitoring:
+  enabled: {{ .Values.monitoring.enabled }}
+
+networkPolicies:
+  enabled: {{ .Values.networkPolicies.enabled }}
+  controlPlaneCidr: {{ .Values.networkPolicies.controlPlaneCidr }}
+
+{{- if .Values.istio.enabled }}
+annotations:
+  {{ include "istioAnnotation" . }}
+{{- end }}
+
+istio:
+  enabled: {{ .Values.istio.enabled }}
+
+openshift: {{ .Values.openshift }}
+{{- end -}}
diff --git a/chart/templates/kyverno-policies/values.yaml b/chart/templates/kyverno-policies/values.yaml
index ad1b805b9da99da208c5177bf6a33151270b65c7..fc0c17ab570d214f161fe471ec3d8c0c02e20f05 100644
--- a/chart/templates/kyverno-policies/values.yaml
+++ b/chart/templates/kyverno-policies/values.yaml
@@ -144,6 +144,13 @@ policies:
           - source-controller*
           - kustomize-controller*
       {{- end }}
+      {{- if .Values.addons.externalSecrets.enabled }}
+      - resources:
+          namespaces:
+          - external-secrets 
+          names:
+          - external-secrets*
+      {{- end }}
 
   {{- if or .Values.fluentbit.enabled .Values.monitoring.enabled .Values.twistlock.enabled }}
   disallow-tolerations:
diff --git a/chart/values.yaml b/chart/values.yaml
index 6c3231e88ad5180bf11dc0568b869355b2866fbe..71d0b5a9472f25e6504989f287d44d0cb44b2800 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -2076,6 +2076,33 @@ addons:
 
     postRenderers: []
 
+  externalSecrets:
+    # -- Toggle deployment of external secrets
+    enabled: false
+
+    # -- Choose source type of "git" or "helmRepo"
+    sourceType: "git"
+
+    git:
+      repo: https://repo1.dso.mil/big-bang/product/packages/external-secrets.git
+      tag: "0.9.18-bb.7"
+      path: "./chart"
+    helmRepo:
+      repoName: "registry1"
+      chartName: "external-secrets"
+      tag: "0.9.18-bb.7"
+
+    # -- Override flux settings for this package
+    flux: {}
+
+    # -- Redirect the package ingress to a specific Istio Gateway (listed in `istio.gateways`).  The default is "public".
+    ingress:
+      gateway: ""
+
+    values: {}
+
+    postRenderers: []
+
 # -- Wrapper chart for integrating Big Bang components alongside a package
 wrapper:
   # -- Choose source type of "git" or "helmRepo"
diff --git a/tests/package-mapping.yaml b/tests/package-mapping.yaml
index 61f39b2923ff2031efde39f144c0b9b41dbae205..b98854f2604d4ce50dccc66761905f22cd60d6d9 100644
--- a/tests/package-mapping.yaml
+++ b/tests/package-mapping.yaml
@@ -87,3 +87,7 @@ metricsServer:
   repoName: "metrics-server"
   hrName: "metrics-server"
   filePath: "metrics-server"
+externalSecrets:
+  repoName: "external-secrets"
+  hrName: "external-secrets"
+  filePath: "external-secrets"
\ No newline at end of file
diff --git a/tests/test-values.yaml b/tests/test-values.yaml
index 824856bbb7deb27c5f47f1002a9404797662d704..1ad103251597ddd5d4c53afdf06985feef0321c1 100644
--- a/tests/test-values.yaml
+++ b/tests/test-values.yaml
@@ -2864,3 +2864,12 @@ addons:
                   name: https
               resolution: DNS
 
+  externalSecrets:
+    values:
+      istio:
+        hardened:
+          enabled: true
+      bbtests:
+        enabled: true
+        cypress:
+          artifacts: true