Add external secrets operator
This commit is contained in:
parent
3a5b7c2258
commit
fe056fd9f9
6 changed files with 109 additions and 0 deletions
5
charts/external-secrets/Chart.yaml
Normal file
5
charts/external-secrets/Chart.yaml
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
apiVersion: v2
|
||||||
|
name: external-secrets-config
|
||||||
|
description: ClusterSecretStore for AWS Secrets Manager via EC2 instance role
|
||||||
|
type: application
|
||||||
|
version: 0.1.0
|
||||||
12
charts/external-secrets/templates/cluster-secret-store.yaml
Normal file
12
charts/external-secrets/templates/cluster-secret-store.yaml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
apiVersion: external-secrets.io/v1
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
metadata:
|
||||||
|
name: aws-secrets-manager
|
||||||
|
spec:
|
||||||
|
provider:
|
||||||
|
aws:
|
||||||
|
service: SecretsManager
|
||||||
|
region: {{ .Values.awsRegion }}
|
||||||
|
auth:
|
||||||
|
# Uses EC2 instance role via IMDS (instance metadata service)
|
||||||
|
# No credentials needed - the node role has secretsmanager:GetSecretValue
|
||||||
4
charts/external-secrets/values.yaml
Normal file
4
charts/external-secrets/values.yaml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# External Secrets Operator helm values
|
||||||
|
# https://external-secrets.io/latest/introduction/getting-started/
|
||||||
|
# Uses EC2 instance role for AWS auth - no credentials needed
|
||||||
|
installCRDs: true
|
||||||
54
manifests/cluster/external-secrets.yaml
Normal file
54
manifests/cluster/external-secrets.yaml
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: external-secrets
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
sources:
|
||||||
|
- repoURL: https://forge.keane.sh/ian/dumpnet-argo.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
ref: values
|
||||||
|
- repoURL: https://charts.external-secrets.io
|
||||||
|
chart: external-secrets
|
||||||
|
targetRevision: "*"
|
||||||
|
helm:
|
||||||
|
valueFiles:
|
||||||
|
- $values/charts/external-secrets/values.yaml
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: external-secrets
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: external-secrets-config
|
||||||
|
namespace: argocd
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
sources:
|
||||||
|
- repoURL: https://forge.keane.sh/ian/dumpnet-argo.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
ref: values
|
||||||
|
- repoURL: https://forge.keane.sh/ian/dumpnet-argo.git
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: charts/external-secrets
|
||||||
|
helm:
|
||||||
|
valueFiles:
|
||||||
|
- $values/values.yaml
|
||||||
|
releaseName: external-secrets-config
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: external-secrets
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|
@ -5,6 +5,16 @@ resource "random_password" "argocd_admin" {
|
||||||
override_special = "!#$%&*()-_=+[]{}?"
|
override_special = "!#$%&*()-_=+[]{}?"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "random_password" "postgres" {
|
||||||
|
length = 32
|
||||||
|
special = false
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "random_password" "kan_auth" {
|
||||||
|
length = 32
|
||||||
|
special = false
|
||||||
|
}
|
||||||
|
|
||||||
# Single secrets manager secret for all cluster secrets
|
# Single secrets manager secret for all cluster secrets
|
||||||
resource "aws_secretsmanager_secret" "dumpnet" {
|
resource "aws_secretsmanager_secret" "dumpnet" {
|
||||||
name = var.cluster_name
|
name = var.cluster_name
|
||||||
|
|
@ -19,6 +29,12 @@ resource "aws_secretsmanager_secret_version" "dumpnet" {
|
||||||
talosconfig = data.talos_client_configuration.this.talos_config
|
talosconfig = data.talos_client_configuration.this.talos_config
|
||||||
kubeconfig = talos_cluster_kubeconfig.this.kubeconfig_raw
|
kubeconfig = talos_cluster_kubeconfig.this.kubeconfig_raw
|
||||||
}
|
}
|
||||||
|
postgres = {
|
||||||
|
password = random_password.postgres.result
|
||||||
|
}
|
||||||
|
kan = {
|
||||||
|
better_auth_secret = random_password.kan_auth.result
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,3 +39,21 @@ resource "aws_iam_role_policy" "node_s3_logs" {
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Secrets Manager access for External Secrets Operator
|
||||||
|
resource "aws_iam_role_policy" "node_secrets_manager" {
|
||||||
|
name = "secrets-manager-read"
|
||||||
|
role = aws_iam_role.node.id
|
||||||
|
|
||||||
|
policy = jsonencode({
|
||||||
|
Version = "2012-10-17"
|
||||||
|
Statement = [
|
||||||
|
{
|
||||||
|
Effect = "Allow"
|
||||||
|
Action = ["secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret"]
|
||||||
|
Resource = aws_secretsmanager_secret.dumpnet.arn
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue