feat(zitadel): secret SMTP + PAT admin lisible par hermes

secrets/zitadel-smtp.yml porte le mot de passe du compte d'envoi pour
le provisioning SMTP par API (v2 ignore la config runtime). Le PAT
admin est materialise en 0400 pour hermes et rotate.
This commit is contained in:
Hermes Agent
2026-10-19 02:07:32 -04:00
parent f859ddb8e5
commit 7655391102
4 changed files with 49 additions and 8 deletions
+11
View File
@@ -55,6 +55,17 @@ in {
networking.hostName = "tower";
sops.defaultSopsFile = lib.mkForce ../../secrets/tower.yml;
# PAT d'admin Zitadel (chiffre dans secrets/zitadel.yml, recipient tower)
# materialise lisible par hermes : sert aux operations d'admin ponctuelles
# via l'API REST (creation d'apps OIDC, inspection) tant que le zitadel-mcp
# upstream n'est pas provisionne (secret zitadel_mcp_env manquant).
sops.secrets."zitadel_mcp_pat" = {
sopsFile = ../../secrets/zitadel.yml;
owner = "hermes";
group = "hermes";
mode = "0400";
};
nixpkgs.overlays = [ inputs.ankimcp.overlays.default ];
# ACME/Let's Encrypt : PLUS UTILISE sur tower. Le DNS public
+16
View File
@@ -0,0 +1,16 @@
zitadel_smtp_password: ENC[AES256_GCM,data:ghgUAAD2I9tFqJQBmDCCiZ0m/Ko=,iv:0mt7GZ1/TrNI6jAjHPy4OFwoA62EI3LILVh340Pzxh8=,tag:2SIMBh5t01cpkSqyduB11g==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiYzdrOEVyNXJnY01GdktR
YWMyaHlRWis2WjdKRDEwZ3ltVis5OHhkZFZRCldsaUh3dE11K3h0QnMwRHVidWdD
ZjRiTHpuaHFxaXZVRjRXK0dWWFdXTWcKLS0tIE5iSnU1bHFVMUQ1OCtSdVRwaEtx
MWJHbWpMVEdoK2RQQ05oUHBCTU1sSzAKxkqe5dts1FTN78imFZVNll/CD8BWUGz0
Rxue7a5IUORbFF0Ca6Gt+kozro6iEnTYOLT5/FV7Dtn483t0zW+vpw==
-----END AGE ENCRYPTED FILE-----
recipient: age1usm3v0ugducrzcwud60dda7xfnj49fdhecj7kcsfm7dzwzrzeyqq2jc2hm
lastmodified: "2026-10-19T05:03:35Z"
mac: ENC[AES256_GCM,data:YqcoHVYwmxx3Y+E0uVrR/KRrxDq9YOXlWPMr4Zl9B4R+2kvlSRog2QbsPhLCFy4uWSCJyFckjhooZkE97hXa9F7tcAyvWoSgNv3BbeQnQRU8SCKFH6joAIkM9I44uyiM+neaTUSTkoJiCWhrwpC3d/ugKwvECtoK1BVw0jhm6dM=,iv:FzFbKiMfacp5M/D10ZjpX9hgUReHFWktZt2PUcbCHL8=,tag:i/p+IwJI/xjx98HI3JFVBA==,type:str]
unencrypted_suffix: _unencrypted
version: 3.13.3
+8 -8
View File
@@ -1,16 +1,16 @@
zitadel_mcp_pat: ENC[AES256_GCM,data:5TtuBAkGCNu7KKZX5OXSoQNd2dcEP/2/WVOkdKE8oZUwDrun0Q==,iv:9I5H03JHfpXtelZSOZczIHNrav6W1Sg5ZE15zpYO7uk=,tag:C2rrNKdRKjgMw6Bepjg3yA==,type:str]
zitadel_mcp_pat: ENC[AES256_GCM,data:GJqBSnvIeLSGruMPPN6ZMEDB5FO3L33amCcbdESM5606jtMk2kQYh+gcapQYFs43TwUgdBvpQpVWrqpsKM5RQWQVNl7jIkw=,iv:ih0zTkH7zYVGY+7lgWtzOCLF10vuE8Wjgi3Dh/cUApw=,tag:fcbBC+ZUkEsK3JZjvkt1Kg==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTT0NyQVliOFVMeDFwbUxB
c1NHZ3czb3Y2ODR4UkVIWkdMSXRDOUdMcDJNClNTSEZ0RzloVW1pRnIxai9IT1JH
M3hyenJ0TW9IZGRwTnFXYnFJWmtyemsKLS0tIE9XR08zUlN1NEx2UHJqTlM1eDR6
eU92RmJIaDBna1N2cE4wNDNMOGYyUjgKTCiFiRQ+FHgWIiq3NFo0mIroLAWysUDr
xZowsxaYr8kPSwyBJfwCDamAmofYrJr3/u3Lqz2KgtB2hKytZUn0eA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSMEtGZHRubTRPZ20zL3Nz
Y3pmR0R5QzRlUVExOGl0aGx2bzJnRHJyNjJzCmMvYmx1YW8yV2M1cmRwNnNUeGcx
SGE3cUlsQ1RWZEh4NzQwTjBzQUhQYWcKLS0tIGVUcDVJRDhUUVRCbnB2WjZqVERD
RGNRSkNGRGE0M2lmakROVU1NSm4za3cKYGtTlWigZnckhY+69UTFu6Ko6zGw3mpo
5GqBOSUIoiz6RktqgzS+cQBh2if0c7zamRM45yDhBvDJgb5sKgMYag==
-----END AGE ENCRYPTED FILE-----
recipient: age1usm3v0ugducrzcwud60dda7xfnj49fdhecj7kcsfm7dzwzrzeyqq2jc2hm
lastmodified: "2026-09-25T01:06:13Z"
mac: ENC[AES256_GCM,data:kErglUT+GMaSVjIQw2Q1Wlz47MkX6qmFi459mMmmb41/vsIzmOAh3PUJhOuu3dOblIN0QmR0BxXmz/pSCJYSKU6AjUyJD4v2d3AVH1E2mlAeTDC/hu2NlM1VLUPpCwAPOQt0mOkCdcQlUqWo0mNIzDjvuqXXB5efXjYUibadWHk=,iv:MBpgWtW0gMEr2tgyKx9M90AibaleYAIvHo0219JAmLU=,tag:YWt1AS6QmA6uPe7QncfJ6Q==,type:str]
lastmodified: "2026-10-19T00:59:45Z"
mac: ENC[AES256_GCM,data:3PxCt+e2zbLmJplAFBAYeDNIRb8YXhn+Kvu7QTpuETB486/V4NHEE3LeVVd2DlKyUL3NNXnPM43sM9CDR1VHk0AVjGDJ6A0BO2ENcl97RQVWlxUtbQwumqWHDa/okrlTL9/xuY7qCYKb8pvOyNwtrpQxk9l97UNXCu5X9tGD06c=,iv:uxjLUx3/eXcjSfOdo/do3t1MyoGAksGhvzCs7Gy9XmM=,tag:87TA5SS3aKQwdM3H2469DA==,type:str]
unencrypted_suffix: _unencrypted
version: 3.13.3
+14
View File
@@ -13,6 +13,13 @@
group = "keys";
};
# Mot de passe du compte d'envoi noreply@marcpartensky.com (Stalwart sur le
# VPS). Fichier dédié pour que hermes puisse l'écrire sans toucher au reste.
"zitadel/smtp_password" = {
sopsFile = ../../secrets/zitadel-smtp.yml;
key = "zitadel_smtp_password";
};
# "zitadel/steps" retiré le 12/10/2026 : le secret pointait sur
# zitadel_steps, chiffré en type:int dans secrets/anywhere.yml, ce que
# sops-install-secrets refuse ("the value of key '' is not a string"). Il
@@ -50,6 +57,13 @@
enable = true;
masterKeyFile = config.sops.secrets."zitadel/master_key".path;
# Pas de clé SMTP ici : depuis ZITADEL v2 la config SMTP vit dans la base
# (projection smtp_configs) et se modifie par l'API admin
# POST /admin/v1/smtp ou la console. Le fichier de config runtime l'ignore
# (vérifié le 19/10/2026 : SMTP.* dans --config ne produit que
# Errors.SMTPConfig.NotFound). Le mot de passe du compte d'envoi est dans
# secrets/zitadel-smtp.yml pour la provisioning par API.
# extraStepsPaths retiré : voir le commentaire sur sops.secrets ci-dessus.
settings = {