Skip to content

Commit 2a42ffd

Browse files
authored
provision dev-env user-auth for local development (#227)
1 parent b6c4963 commit 2a42ffd

File tree

3 files changed

+94
-2
lines changed

3 files changed

+94
-2
lines changed

templates/kubernetes/terraform/environments/stage/main.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,12 @@ module "kubernetes" {
106106
## Oathkeeper requires a private key (as `user_auth[0].jwks_secret_name`)
107107
## per environment one of each (database/database secret/private key) is created in the pre-k8s step
108108
## If you need to add another user-auth instance you will have to create another set of these resources
109-
]<% end %>
109+
]
110+
# Provisions an extra Kratos instance and Rules for Oathkeeper enabling local frontend to connect to the dev-env's user auth
111+
# Cookies will be set to dev.<domain> and dev-env backend will be set to <developer-name>.dev.<domain>
112+
# allowing cookie to be shared
113+
user_auth_dev_env_enabled = true
114+
<% end %>
110115
notification_service_enabled = <%if eq (index .Params `notificationServiceEnabled`) "yes" %>true<% else %>false<% end %>
111116
notification_service_highly_available = false
112117
notification_service_twilio_phone_number = "<% index .Params `notificationServiceTwilioPhoneNumber` %>"

templates/kubernetes/terraform/modules/kubernetes/user_auth.tf

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ data "aws_secretsmanager_secret_version" "jwks_content" {
1717
module "user_auth" {
1818
count = length(var.user_auth)
1919
source = "commitdev/zero/aws//modules/user_auth"
20-
version = "0.4.8"
20+
version = "0.5.3"
2121

2222
name = var.user_auth[count.index].name
2323
auth_namespace = var.user_auth[count.index].auth_namespace
@@ -36,3 +36,78 @@ module "user_auth" {
3636

3737
depends_on = [helm_release.external_secrets]
3838
}
39+
40+
module "dev_user_auth" {
41+
count = var.user_auth_dev_env_enabled ? 1 : 0
42+
43+
source = "commitdev/zero/aws//modules/user_auth"
44+
version = "0.5.3"
45+
46+
name = "development"
47+
auth_namespace = "user-auth"
48+
create_namespace = false
49+
kratos_secret_name = var.project
50+
frontend_use_https = false
51+
frontend_service_domain = var.dev_user_auth_frontend_domain
52+
backend_service_domain = "dev.${var.domain_name}"
53+
user_auth_mail_from_address = "noreply@${var.domain_name}"
54+
whitelisted_return_urls = ["http://${var.dev_user_auth_frontend_domain}"]
55+
jwks_content = "none"
56+
cookie_signing_secret_key = "${var.project}-${var.environment}-${var.random_seed}"
57+
kubectl_extra_args = local.k8s_exec_context
58+
external_secret_name = "${var.project}/kubernetes/stage/user-auth"
59+
kratos_values_override = {
60+
kratos = {
61+
config = {
62+
session = {
63+
cookie = {
64+
same_site = "None"
65+
domain = "dev.${var.domain_name}"
66+
}
67+
}
68+
}
69+
}
70+
}
71+
disable_oathkeeper = true
72+
}
73+
74+
resource "kubernetes_ingress" "dev_user_auth" {
75+
count = var.user_auth_dev_env_enabled ? 1 : 0
76+
77+
metadata {
78+
name = "dev-user-auth"
79+
namespace = "user-auth"
80+
annotations = {
81+
"kubernetes.io/ingress.class" = "nginx"
82+
"cert-manager.io/cluster-issuer" = "clusterissuer-letsencrypt-production"
83+
"nginx.ingress.kubernetes.io/enable-cors" = "true"
84+
"nginx.ingress.kubernetes.io/cors-allow-origin" = "http://${var.dev_user_auth_frontend_domain}"
85+
"nginx.ingress.kubernetes.io/cors-allow-credentials" = "true"
86+
}
87+
}
88+
89+
spec {
90+
rule {
91+
host = "dev.${var.domain_name}"
92+
http {
93+
path {
94+
path = "/"
95+
# Sharing Oathkeeper with stage instance
96+
backend {
97+
service_name = "oathkeeper-${var.user_auth[0].name}-proxy"
98+
service_port = "http"
99+
}
100+
}
101+
102+
}
103+
}
104+
tls {
105+
secret_name = "dev-user-auth-tls-secret"
106+
hosts = [
107+
"dev.${var.domain_name}"
108+
]
109+
}
110+
}
111+
depends_on = [module.user_auth]
112+
113+
}

templates/kubernetes/terraform/modules/kubernetes/variables.tf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,18 @@ variable "user_auth" {
144144
}))
145145
}
146146

147+
variable "user_auth_dev_env_enabled" {
148+
description = "When enabled will provision Kratos and Oathkeeper Rules for dev environment"
149+
type = bool
150+
default = false
151+
}
152+
153+
variable "dev_user_auth_frontend_domain" {
154+
description = "Frontend domain used for local development with dev env"
155+
type = string
156+
default = "127.0.0.1:3000"
157+
}
158+
147159
variable "nginx_ingress_replicas" {
148160
description = "The number of ingress controller pods to run in the cluster. Production environments should not have less than 2"
149161
type = number

0 commit comments

Comments
 (0)