added auth-proxy dashboard
This commit is contained in:
+68
-43
@@ -92,48 +92,6 @@ resource "keycloak_openid_client_default_scopes" "rsauth2_proxy" {
|
||||
]
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# rsauth2-proxy client (localhost testing)
|
||||
# =============================================================================
|
||||
|
||||
resource "keycloak_openid_client" "rsauth2_proxy_dev" {
|
||||
realm_id = keycloak_realm.hexor.id
|
||||
client_id = "rsauth2-proxy-dev"
|
||||
|
||||
name = "rsauth2-proxy (dev)"
|
||||
enabled = true
|
||||
access_type = "CONFIDENTIAL"
|
||||
standard_flow_enabled = true
|
||||
direct_access_grants_enabled = false
|
||||
|
||||
valid_redirect_uris = [
|
||||
"http://localhost:8080/callback",
|
||||
]
|
||||
|
||||
web_origins = [
|
||||
"http://localhost:8080",
|
||||
]
|
||||
}
|
||||
|
||||
resource "keycloak_openid_group_membership_protocol_mapper" "rsauth2_proxy_dev_groups" {
|
||||
realm_id = keycloak_realm.hexor.id
|
||||
client_id = keycloak_openid_client.rsauth2_proxy_dev.id
|
||||
name = "groups"
|
||||
claim_name = "groups"
|
||||
full_path = false
|
||||
}
|
||||
|
||||
resource "keycloak_openid_client_default_scopes" "rsauth2_proxy_dev" {
|
||||
realm_id = keycloak_realm.hexor.id
|
||||
client_id = keycloak_openid_client.rsauth2_proxy_dev.id
|
||||
|
||||
default_scopes = [
|
||||
"openid",
|
||||
"profile",
|
||||
"email",
|
||||
]
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# Proxy applications — auto-created groups + routes ConfigMap
|
||||
# =============================================================================
|
||||
@@ -154,7 +112,74 @@ locals {
|
||||
}
|
||||
}
|
||||
|
||||
resource "kubernetes_config_map" "auth_proxy_routes" {
|
||||
# =============================================================================
|
||||
# OAuth2 applications — full OIDC clients for apps that handle auth themselves
|
||||
# =============================================================================
|
||||
|
||||
resource "keycloak_openid_client" "oauth2_app" {
|
||||
for_each = var.oauth2_applications
|
||||
|
||||
realm_id = keycloak_realm.hexor.id
|
||||
client_id = each.key
|
||||
|
||||
name = each.key
|
||||
enabled = true
|
||||
access_type = "CONFIDENTIAL"
|
||||
standard_flow_enabled = true
|
||||
direct_access_grants_enabled = false
|
||||
|
||||
valid_redirect_uris = each.value.redirect_uris
|
||||
valid_post_logout_redirect_uris = each.value.post_logout_redirect_uris
|
||||
web_origins = each.value.web_origins
|
||||
}
|
||||
|
||||
resource "keycloak_openid_group_membership_protocol_mapper" "oauth2_app_groups" {
|
||||
for_each = var.oauth2_applications
|
||||
|
||||
realm_id = keycloak_realm.hexor.id
|
||||
client_id = keycloak_openid_client.oauth2_app[each.key].id
|
||||
name = "groups"
|
||||
claim_name = "groups"
|
||||
full_path = false
|
||||
}
|
||||
|
||||
resource "keycloak_openid_client_default_scopes" "oauth2_app" {
|
||||
for_each = var.oauth2_applications
|
||||
|
||||
realm_id = keycloak_realm.hexor.id
|
||||
client_id = keycloak_openid_client.oauth2_app[each.key].id
|
||||
|
||||
default_scopes = concat(
|
||||
["openid", "profile", "email"],
|
||||
each.value.extra_default_scopes
|
||||
)
|
||||
}
|
||||
|
||||
resource "keycloak_openid_client_optional_scopes" "oauth2_app" {
|
||||
for_each = {
|
||||
for k, v in var.oauth2_applications : k => v if length(v.extra_optional_scopes) > 0
|
||||
}
|
||||
|
||||
realm_id = keycloak_realm.hexor.id
|
||||
client_id = keycloak_openid_client.oauth2_app[each.key].id
|
||||
|
||||
optional_scopes = each.value.extra_optional_scopes
|
||||
}
|
||||
|
||||
resource "keycloak_group" "oauth2_app" {
|
||||
for_each = {
|
||||
for k, v in var.oauth2_applications : k => v if length(v.allowed_groups) > 0
|
||||
}
|
||||
|
||||
realm_id = keycloak_realm.hexor.id
|
||||
name = "app-${each.key}"
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# Proxy applications — routes ConfigMap
|
||||
# =============================================================================
|
||||
|
||||
resource "kubernetes_config_map_v1" "auth_proxy_routes" {
|
||||
metadata {
|
||||
name = "auth-proxy-routes"
|
||||
namespace = "auth-proxy"
|
||||
|
||||
@@ -15,15 +15,6 @@ output "rsauth2_proxy_client_secret" {
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
output "rsauth2_proxy_dev_client_id" {
|
||||
value = keycloak_openid_client.rsauth2_proxy_dev.client_id
|
||||
}
|
||||
|
||||
output "rsauth2_proxy_dev_client_secret" {
|
||||
value = keycloak_openid_client.rsauth2_proxy_dev.client_secret
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
output "standalone_groups" {
|
||||
value = [for g in keycloak_group.standalone : g.name]
|
||||
}
|
||||
@@ -35,3 +26,12 @@ output "app_groups" {
|
||||
output "app_allowed_groups" {
|
||||
value = local.app_allowed_groups
|
||||
}
|
||||
|
||||
output "oauth2_app_client_ids" {
|
||||
value = { for k, c in keycloak_openid_client.oauth2_app : k => c.client_id }
|
||||
}
|
||||
|
||||
output "oauth2_app_client_secrets" {
|
||||
value = { for k, c in keycloak_openid_client.oauth2_app : k => c.client_secret }
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
@@ -19,5 +19,5 @@ provider "keycloak" {
|
||||
}
|
||||
|
||||
provider "kubernetes" {
|
||||
config_path = var.kubeconfig_path
|
||||
config_path = "~/.kube/config"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
groups = [
|
||||
"hexor-admin",
|
||||
"hexor-guest",
|
||||
"game-servers-managers",
|
||||
"argocd-admins",
|
||||
]
|
||||
|
||||
proxy_applications = {
|
||||
secret-reader = {
|
||||
domain = "secret-reader.hexor.cy"
|
||||
allowed_groups = ["hexor-guest", "hexor-admin"]
|
||||
}
|
||||
pass = {
|
||||
domain = "pass.hexor.cy"
|
||||
allowed_groups = ["hexor-guest", "hexor-admin"]
|
||||
}
|
||||
}
|
||||
|
||||
oauth2_applications = {
|
||||
gitea = {
|
||||
redirect_uris = ["https://gt.hexor.cy/user/oauth2/Keycloak/callback"]
|
||||
web_origins = ["https://gt.hexor.cy"]
|
||||
post_logout_redirect_uris = ["https://gt.hexor.cy/*"]
|
||||
}
|
||||
ArgoCD = {
|
||||
redirect_uris = ["https://ag.hexor.cy/auth/callback"]
|
||||
web_origins = ["https://ag.hexor.cy"]
|
||||
post_logout_redirect_uris = ["https://ag.hexor.cy/*"]
|
||||
extra_optional_scopes = ["offline_access"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,12 +16,6 @@ variable "keycloak_client_secret" {
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
variable "kubeconfig_path" {
|
||||
description = "Path to kubeconfig (set via TF_VAR_kubeconfig_path or KUBE_CONFIG_PATH)"
|
||||
type = string
|
||||
default = "~/.kube/config"
|
||||
}
|
||||
|
||||
variable "google_client_id" {
|
||||
description = "Google OAuth client ID (set via TF_VAR_google_client_id)"
|
||||
type = string
|
||||
@@ -47,3 +41,16 @@ variable "proxy_applications" {
|
||||
}))
|
||||
default = {}
|
||||
}
|
||||
|
||||
variable "oauth2_applications" {
|
||||
description = "OAuth2/OIDC applications that handle authentication themselves"
|
||||
type = map(object({
|
||||
redirect_uris = list(string)
|
||||
post_logout_redirect_uris = optional(list(string), [])
|
||||
web_origins = optional(list(string), [])
|
||||
extra_default_scopes = optional(list(string), [])
|
||||
extra_optional_scopes = optional(list(string), [])
|
||||
allowed_groups = optional(list(string), [])
|
||||
}))
|
||||
default = {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user