Secrets 一元管理チャート secret-manager v0.1.0 を実装
Helm Chart Release / release-chart (push) Successful in 6s

クラスター横断で使う認証情報を1チャートで管理し、複数ネームスペースへ
同一 Secret として配布する仕組みを実装。

- distribution: namespaces への複製 / kubernetes-reflector 自動同期 /
  stakater-Reloader 連携を選択可能
- common: namePrefix・共通ラベル/アノテーション・immutable
- mail.providers: SMTP/IMAP/POP3 のサーバ情報 + パスワードを一元管理。
  source 可能な smtp.env と任意の msmtprc スニペットを Secret に同梱
- api.credentials: 任意のキー/値集合を Opaque Secret 化(envFrom 向け)
- generic.secrets: 任意 type(dockerconfigjson / tls / basic-auth 等)
- values.schema.json による厳格バリデーション
- examples/(Gmail・M365・SendGrid・SES・Mailgun・reflector)
- .gitea/workflows/helm-release.yaml で Package Registry へ自動発行
- README.md にセキュリティモデル・values リファレンス・参照方法を記載
- 平文資格情報の混入防止に .gitignore を整備
This commit is contained in:
2026-08-31 09:41:41 +09:00
parent 507fd48d11
commit f374cd2e49
16 changed files with 1329 additions and 1 deletions
+56
View File
@@ -0,0 +1,56 @@
# =========================================================================
# API 認証情報 / 汎用 Secret の設定例
# -------------------------------------------------------------------------
# helm upgrade --install secrets ./secret-manager -n secret-manager \
# -f examples/api-and-generic.values.yaml \
# --set api.credentials.stripe.data.STRIPE_SECRET_KEY="$STRIPE_SECRET_KEY"
# =========================================================================
distribution:
namespaces:
- default
- web
includeReleaseNamespace: true
api:
credentials:
stripe:
enabled: true
data:
STRIPE_SECRET_KEY: "REPLACE_VIA_--set"
STRIPE_WEBHOOK_SECRET: "REPLACE_VIA_--set"
openai:
enabled: true
data:
OPENAI_API_KEY: "REPLACE_VIA_--set"
OPENAI_ORG_ID: "org-xxxxxxxx"
# このキーだけ AI ワークロード用ネームスペースに限定配布
namespacesOverride:
- ml
- web
slack:
enabled: true
data:
SLACK_BOT_TOKEN: "REPLACE_VIA_--set"
SLACK_SIGNING_SECRET: "REPLACE_VIA_--set"
generic:
secrets:
# プライベートコンテナレジストリの pull secret
private-registry:
enabled: true
type: kubernetes.io/dockerconfigjson
data:
".dockerconfigjson": "REPLACE_VIA_--set-file"
# Basic 認証(Ingress の auth-secret などで参照)
basic-auth:
enabled: false
type: kubernetes.io/basic-auth
data:
username: "admin"
password: "REPLACE_VIA_--set"
+113
View File
@@ -0,0 +1,113 @@
# =========================================================================
# 代表的な外部メールプロバイダの設定例
# -------------------------------------------------------------------------
# 使い方:
# helm upgrade --install secrets ./secret-manager \
# -n secret-manager --create-namespace \
# -f examples/mail-providers.values.yaml \
# --set mail.providers.gmail.smtp.password="$GMAIL_APP_PASSWORD"
#
# パスワード等の実値はこのファイルに書かず、--set / SOPS 経由で注入すること。
# =========================================================================
distribution:
namespaces:
- default
- web
- batch
includeReleaseNamespace: true
common:
namePrefix: "cred-"
immutable: false
mail:
providers:
# ---- Gmail / Google Workspace -----------------------------------------
# 事前に「アプリ パスワード」を発行しておくこと(2段階認証必須)。
gmail:
enabled: true
smtp:
host: "smtp.gmail.com"
port: 587
security: "starttls"
username: "no-reply@your-domain.com"
password: "REPLACE_VIA_--set"
from: "no-reply@your-domain.com"
fromName: "Your Service"
authMethod: "login"
imap:
host: "imap.gmail.com"
port: 993
security: "tls"
renderMsmtprc: true
# ---- Microsoft 365 / Exchange Online ---------------------------------
m365:
enabled: true
smtp:
host: "smtp.office365.com"
port: 587
security: "starttls"
username: "no-reply@your-domain.com"
password: "REPLACE_VIA_--set"
from: "no-reply@your-domain.com"
authMethod: "login"
imap:
host: "outlook.office365.com"
port: 993
security: "tls"
renderMsmtprc: true
# ---- SendGrid -------------------------------------------------------
# username は固定文字列 "apikey"、password が API キー本体。
sendgrid:
enabled: true
smtp:
host: "smtp.sendgrid.net"
port: 587
security: "starttls"
username: "apikey"
password: "REPLACE_VIA_--set"
from: "no-reply@your-domain.com"
fromName: "Your Service"
authMethod: "plain"
renderMsmtprc: true
# ---- Amazon SES ---------------------------------------------------
# SES SMTP 認証情報(IAM のアクセスキーとは別物)を使う。リージョンをホスト名に反映。
ses:
enabled: true
smtp:
host: "email-smtp.ap-northeast-1.amazonaws.com"
port: 587
security: "starttls"
username: "REPLACE_VIA_--set"
password: "REPLACE_VIA_--set"
from: "no-reply@your-domain.com"
authMethod: "login"
renderMsmtprc: true
# ---- Mailgun -----------------------------------------------------
mailgun:
enabled: true
smtp:
host: "smtp.mailgun.org"
port: 587
security: "starttls"
username: "postmaster@mg.your-domain.com"
password: "REPLACE_VIA_--set"
from: "no-reply@your-domain.com"
authMethod: "plain"
renderMsmtprc: true
# ---- 汎用 / 社内 SMTP リレー(認証なし・TLSなし)--------------------
internal-relay:
enabled: false
smtp:
host: "mail-relay.svc.cluster.local"
port: 25
security: "none"
from: "no-reply@your-domain.com"
renderMsmtprc: true
+35
View File
@@ -0,0 +1,35 @@
# =========================================================================
# kubernetes-reflector を使った自動同期の設定例
# -------------------------------------------------------------------------
# 前提: クラスターに emberstack/kubernetes-reflector が導入済みであること。
# helm repo add emberstack https://emberstack.github.io/helm-charts
# helm upgrade --install reflector emberstack/reflector -n kube-system
#
# この方式では Secret はリリース先ネームスペースにのみ作成され、
# namespaceRegex に一致する全ネームスペースへ reflector が複製・追従する。
# 新しいネームスペースが増えても values を書き換える必要がない。
# =========================================================================
distribution:
# reflector 使用時 namespaces は無視される(ソースはリリース先のみ)
namespaces: []
includeReleaseNamespace: true
reflector:
enabled: true
# 本番系ネームスペースにのみ配布する例
namespaceRegex: "prod-.*|shared-services"
reloader:
enabled: true
mail:
providers:
gmail:
enabled: true
smtp:
host: "smtp.gmail.com"
port: 587
security: "starttls"
username: "no-reply@your-domain.com"
password: "REPLACE_VIA_--set"
from: "no-reply@your-domain.com"
renderMsmtprc: true