SES setup for kan

This commit is contained in:
Ian Keane 2026-08-24 09:38:51 -04:00
parent 758df0625a
commit 3df16bb315
2 changed files with 93 additions and 0 deletions

View file

@ -16,6 +16,11 @@ spec:
data: data:
BETTER_AUTH_SECRET: "{{ `{{ .better_auth_secret }}` }}" BETTER_AUTH_SECRET: "{{ `{{ .better_auth_secret }}` }}"
POSTGRES_URL: "postgresql://postgres:{{ `{{ .postgres_password }}` }}@postgres.postgres.svc.cluster.local:5432/kan?sslmode=disable" POSTGRES_URL: "postgresql://postgres:{{ `{{ .postgres_password }}` }}@postgres.postgres.svc.cluster.local:5432/kan?sslmode=disable"
EMAIL_SERVER_HOST: "{{ `{{ .ses_smtp_endpoint }}` }}"
EMAIL_SERVER_PORT: "587"
EMAIL_SERVER_USER: "{{ `{{ .ses_smtp_user }}` }}"
EMAIL_SERVER_PASSWORD: "{{ `{{ .ses_smtp_password }}` }}"
EMAIL_FROM: "noreply@{{ .Values.domain }}"
data: data:
- secretKey: better_auth_secret - secretKey: better_auth_secret
remoteRef: remoteRef:
@ -25,3 +30,15 @@ spec:
remoteRef: remoteRef:
key: dumpnet key: dumpnet
property: postgres.password property: postgres.password
- secretKey: ses_smtp_endpoint
remoteRef:
key: dumpnet
property: ses.smtp_endpoint
- secretKey: ses_smtp_user
remoteRef:
key: dumpnet
property: ses.smtp_user
- secretKey: ses_smtp_password
remoteRef:
key: dumpnet
property: ses.smtp_password

76
terraform/ses.tf Normal file
View file

@ -0,0 +1,76 @@
# SES domain verification and SMTP setup for dumpnet.chat
resource "aws_ses_domain_identity" "dumpnet" {
domain = var.domain
}
resource "aws_ses_domain_dkim" "dumpnet" {
domain = aws_ses_domain_identity.dumpnet.domain
}
# DKIM DNS records (3 required)
resource "aws_route53_record" "ses_dkim" {
count = 3
zone_id = data.aws_route53_zone.dumpnet.zone_id
name = "${aws_ses_domain_dkim.dumpnet.dkim_tokens[count.index]}._domainkey.${var.domain}"
type = "CNAME"
ttl = 300
records = ["${aws_ses_domain_dkim.dumpnet.dkim_tokens[count.index]}.dkim.amazonses.com"]
}
# Domain verification TXT record
resource "aws_route53_record" "ses_verification" {
zone_id = data.aws_route53_zone.dumpnet.zone_id
name = "_amazonses.${var.domain}"
type = "TXT"
ttl = 300
records = [aws_ses_domain_identity.dumpnet.verification_token]
}
resource "aws_ses_domain_identity_verification" "dumpnet" {
domain = aws_ses_domain_identity.dumpnet.id
depends_on = [aws_route53_record.ses_verification]
}
# SMTP credentials via IAM user
resource "aws_iam_user" "ses_smtp" {
name = "${var.cluster_name}-ses-smtp"
}
resource "aws_iam_user_policy" "ses_smtp" {
name = "ses-send"
user = aws_iam_user.ses_smtp.name
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = "ses:SendRawEmail"
Resource = "*"
}]
})
}
resource "aws_iam_access_key" "ses_smtp" {
user = aws_iam_user.ses_smtp.name
}
# Store SMTP credentials in Secrets Manager
# Note: SES SMTP password is derived from the IAM secret key, not the key itself
# The password must be calculated using the SES SMTP password algorithm
locals {
ses_smtp_endpoint = "email-smtp.${var.aws_region}.amazonaws.com"
}
output "ses_smtp_endpoint" {
value = local.ses_smtp_endpoint
}
output "ses_smtp_username" {
value = aws_iam_access_key.ses_smtp.id
}
output "ses_smtp_password" {
value = aws_iam_access_key.ses_smtp.ses_smtp_password_v4
sensitive = true
}