Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
2fbef9f
add v3 template for passthrough
ikethecoder Aug 7, 2025
28a379f
skip kube for sdx data planes
ikethecoder Aug 7, 2025
05389c4
skip kube for sdx data planes
ikethecoder Aug 7, 2025
725dc11
add gateway pattern handling
ikethecoder Aug 22, 2025
d40e1d9
upd gateway patterns
ikethecoder Aug 22, 2025
9a8727e
add ns qualifier
ikethecoder Aug 22, 2025
1f9ebd9
adj pattern
ikethecoder Aug 22, 2025
3f5a32a
add usually methods
ikethecoder Aug 22, 2025
0b3db4e
add user jwt validation
ikethecoder Aug 22, 2025
d8e7569
upd test
ikethecoder Aug 22, 2025
5f56490
adj pattern
ikethecoder Aug 22, 2025
2ef277b
add kc user check on service
ikethecoder Aug 22, 2025
0ab2712
add cors for frontend app
ikethecoder Aug 22, 2025
eeb29a4
include oidc validation of user cred
ikethecoder Aug 22, 2025
995608b
include oidc validation of user cred
ikethecoder Aug 22, 2025
6e0354a
add rate limit and disable oidc userinfo and id headers
ikethecoder Aug 22, 2025
7932f0d
upd oidc check
ikethecoder Aug 22, 2025
d96f650
upd oidc check
ikethecoder Aug 22, 2025
0e4eaf6
upd oidc check
ikethecoder Aug 22, 2025
35b086e
upd headernames
ikethecoder Aug 22, 2025
019b2db
add consumer_client_id
ikethecoder Aug 22, 2025
cb861b1
upd tests
ikethecoder Aug 22, 2025
d6f091a
upd tests
ikethecoder Aug 22, 2025
d862e6f
add consumer uri to patterns
ikethecoder Sep 5, 2025
aadcf5b
remove options for service route pattern
ikethecoder Sep 5, 2025
043cd8a
tweak the cors for patterns
ikethecoder Sep 5, 2025
0271de6
tweak the cors for patterns
ikethecoder Sep 5, 2025
b7e4e04
upd test for pattern
ikethecoder Sep 5, 2025
41de9a5
fix header err
ikethecoder Sep 5, 2025
a010258
include access_point as a pattern
ikethecoder Sep 5, 2025
9583f80
include access_point as a pattern
ikethecoder Sep 5, 2025
3878d23
include access_point as a pattern
ikethecoder Sep 5, 2025
08b017c
allow dry runs
ikethecoder Sep 5, 2025
d7d28a0
add support for deletion wr to patterns
ikethecoder Sep 8, 2025
b3f9c2d
fix for deletion
ikethecoder Sep 8, 2025
31b81e9
access point pattern
ikethecoder Sep 8, 2025
4d6d9cf
fix delete gw
ikethecoder Sep 8, 2025
01e8fcc
fix delete gw
ikethecoder Sep 8, 2025
71b3d04
upd sdx patterns response signer and change header
ikethecoder Sep 9, 2025
b75fc93
make signing optional
ikethecoder Sep 9, 2025
0993f15
update cors to allow that header
ikethecoder Sep 10, 2025
082b429
provision access point gw config
ikethecoder Sep 10, 2025
097f0aa
provision access point gw config
ikethecoder Sep 10, 2025
361f833
provision access point gw config
ikethecoder Sep 10, 2025
d1b5449
provision access point fix strip path
ikethecoder Sep 10, 2025
1cfebd5
tweak ap pattern
ikethecoder Sep 10, 2025
6268632
add support for simple dump
ikethecoder Sep 11, 2025
85391cc
add dump support
ikethecoder Sep 11, 2025
d467161
remove positional arg for deck dump
ikethecoder Sep 11, 2025
9fe410a
have service verify token
ikethecoder Sep 11, 2025
898a1e3
have service verify token
ikethecoder Sep 11, 2025
02c6897
fix access point pattern
ikethecoder Sep 12, 2025
3acdc41
remove options - minor for access pt
ikethecoder Sep 12, 2025
0c6752f
upd auth
ikethecoder Sep 12, 2025
716b5e9
upd auth
ikethecoder Sep 12, 2025
89ed27b
upd service pattern scope list
ikethecoder Sep 12, 2025
0dce243
fix the console route for ap
ikethecoder Sep 12, 2025
9b48aa4
workaround for dn with commas
ikethecoder Sep 12, 2025
8727ce9
workaround for dn with commas
ikethecoder Sep 12, 2025
cf0e849
workaround for dn with commas
ikethecoder Sep 12, 2025
1eb7d35
adj patterns
ikethecoder Sep 19, 2025
bdd74d6
adj patterns
ikethecoder Sep 19, 2025
8901010
adj service pattern
ikethecoder Sep 19, 2025
b037ad0
adj service pattern
ikethecoder Sep 19, 2025
bfb8638
upd tagging for api
ikethecoder Sep 19, 2025
f05640d
upd tagging for api
ikethecoder Sep 19, 2025
93ebcab
upd tagging for api
ikethecoder Sep 19, 2025
c36e269
upd tagging for api
ikethecoder Sep 19, 2025
7fa40f3
fix plugins
ikethecoder Sep 19, 2025
55fadb4
do introspection for token update
ikethecoder Sep 20, 2025
19ad41a
do introspection for token update
ikethecoder Sep 20, 2025
ed2200e
add dpop validation
ikethecoder Sep 20, 2025
981a697
add dpop validation
ikethecoder Sep 20, 2025
9819aa4
add dpop validation
ikethecoder Sep 20, 2025
e77bb13
add dpop validation
ikethecoder Sep 20, 2025
75f05ef
new pub service pattern
ikethecoder Sep 21, 2025
5f4392b
by default ap needs mtls
ikethecoder Sep 21, 2025
3c3c48b
add inbound token to service pattern
ikethecoder Sep 22, 2025
cb2b9d4
adj patterns
ikethecoder Sep 25, 2025
a6e7beb
add service mtls pattern
ikethecoder Sep 25, 2025
029818b
upd mtls service pattern
ikethecoder Sep 25, 2025
79a63ca
upd mtls service pattern
ikethecoder Sep 25, 2025
fd8072f
upd mtls service pattern
ikethecoder Sep 25, 2025
d4307c2
update signed to use Accept header
ikethecoder Sep 26, 2025
dc8e266
upd signed service pub pattern
ikethecoder Sep 26, 2025
74a8642
upd signed service pub pattern
ikethecoder Sep 26, 2025
8f1ad26
simplify mtls pattern
ikethecoder Sep 30, 2025
e0c380c
upd patterns
ikethecoder Oct 28, 2025
d276a37
upd patterns
ikethecoder Oct 28, 2025
0948638
fix missing tags in patterns
ikethecoder Oct 28, 2025
d3ca656
include exposed headers temporarily
ikethecoder Oct 28, 2025
18e1938
adj consumer pattern
ikethecoder Oct 29, 2025
ef7ed7b
allow adding keys and keysets
ikethecoder Nov 6, 2025
304bc56
allow adding keys and keysets
ikethecoder Nov 6, 2025
dead836
upgrade deck to latest
ikethecoder Nov 6, 2025
1b6a227
upd access point pattern
ikethecoder Nov 14, 2025
bf34eef
upd access point pattern
ikethecoder Nov 14, 2025
b9098ec
consumer pattern upd
ikethecoder Nov 14, 2025
39e2c55
upd p2p
ikethecoder Nov 14, 2025
4a85a85
fix pattern for sign
ikethecoder Nov 14, 2025
4783996
simplify gateway patterns
ikethecoder Nov 15, 2025
eb4d0fa
fix loading issue with pub key
ikethecoder Nov 15, 2025
9c11039
fix wrapping
ikethecoder Nov 15, 2025
fb29afb
fix tag error
ikethecoder Nov 15, 2025
9ad1c5a
keep file on deck fail
ikethecoder Nov 15, 2025
8edd6c9
fix yaml format
ikethecoder Nov 15, 2025
9d691f5
fix pub key formatting
ikethecoder Nov 15, 2025
df0ed27
fix issue with qualifier
ikethecoder Nov 17, 2025
6f7ac4d
upd p2p consumer edge kid
ikethecoder Nov 17, 2025
c9835af
upd tests for patterns
ikethecoder Nov 17, 2025
4992fcc
public templating
ikethecoder Dec 3, 2025
ae7260b
for pattern return json
ikethecoder Dec 3, 2025
aec7876
fix swagger
ikethecoder Dec 3, 2025
071bed1
swagger upd
ikethecoder Dec 3, 2025
9fe7efa
change from being public
ikethecoder Dec 3, 2025
4387369
adj route
ikethecoder Dec 3, 2025
e6ffc64
adj patterned op
ikethecoder Dec 3, 2025
3f6ae46
output request data
ikethecoder Dec 3, 2025
4b97fb8
return json for pattern output
ikethecoder Dec 3, 2025
904d388
upd consumer_pub
ikethecoder Dec 4, 2025
755551e
integrity pattern
ikethecoder Dec 5, 2025
1995499
integrity pattern
ikethecoder Dec 5, 2025
ec71d30
integrity pattern
ikethecoder Dec 5, 2025
ca59311
integrity patterns
ikethecoder Dec 5, 2025
e63d5a9
remove unwanted headers
ikethecoder Dec 5, 2025
b00bdb9
upd patterns
ikethecoder Dec 5, 2025
86c613b
upd provider integrity mtls
ikethecoder Dec 5, 2025
c4d2eac
fix consumer integrity
ikethecoder Dec 5, 2025
c232723
add consumer integrity pattern
ikethecoder Dec 5, 2025
7791f0a
adj patterns
ikethecoder Dec 6, 2025
a2bc785
adj ap pattern
ikethecoder Dec 6, 2025
69ca213
upd p2p templates
ikethecoder Dec 19, 2025
02f527d
adj access point route
ikethecoder Dec 19, 2025
e877f41
change hardcoded jwks_uri
ikethecoder Dec 20, 2025
39b0594
upd pattern
ikethecoder Jan 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions microservices/gatewayApi/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# && go mod download \
# && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o deck \
# -ldflags "-s -w -X github.com/kong/deck/cmd.VERSION=$TAG -X github.com/kong/deck/cmd.COMMIT=$COMMIT"
FROM python:3.11-alpine3.20
FROM python:3.13-alpine3.22

RUN mkdir /.kube

Expand All @@ -26,17 +26,17 @@ RUN curl -sL https://github.com/kong/deck/releases/download/v1.5.0/deck_1.5.0_li
cp /tmp/deck /usr/local/bin/deck_kong2_150

# gwa api (kong 3)
RUN curl -sL https://github.com/Kong/deck/releases/download/v1.45.0/deck_1.45.0_linux_amd64.tar.gz -o deck.tar.gz && \
RUN curl -sL https://github.com/Kong/deck/releases/download/v1.53.1/deck_1.53.1_linux_amd64.tar.gz -o deck.tar.gz && \
tar -xf deck.tar.gz -C /tmp && \
cp /tmp/deck /usr/local/bin/deck && \
cp /tmp/deck /usr/local/bin/deck_kong3_1450
cp /tmp/deck /usr/local/bin/deck_kong3_1531

RUN python -m pip install --upgrade pip
# FIX: No module named 'urllib3.packages.six'
RUN pip uninstall urllib3 && pip install urllib3
RUN cd /tmp && \
curl -sSL https://install.python-poetry.org > get-poetry.py && \
POETRY_HOME=/opt/poetry python get-poetry.py --version 1.8.2 && \
POETRY_HOME=/opt/poetry python get-poetry.py --version 1.8.5 && \
cd /usr/local/bin && \
ln -s /opt/poetry/bin/poetry && \
poetry config virtualenvs.create false
Expand Down
Empty file.
41 changes: 41 additions & 0 deletions microservices/gatewayApi/patterns/eval.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from patterns.sdx.access_point_r1 import eval_access_point_pattern
from patterns.sdx.keys_r1 import eval_keys_pattern
from patterns.sdx.service_r1 import eval_service_pattern
from patterns.sdx.service_pub_r1 import eval_service_pub_pattern
from patterns.sdx.service_mtls_r1 import eval_service_mtls_pattern
from patterns.sdx.p2p_provider_r1 import eval_p2p_provider_pattern

from patterns.sdx.p2p_provider_pub_r1 import eval_p2p_provider_pub_pattern
from patterns.sdx.p2p_provider_integrity_r1 import eval_p2p_provider_integrity_pattern
from patterns.sdx.p2p_consumer_r1 import eval_p2p_consumer_pattern
from patterns.sdx.p2p_consumer_pub_r1 import eval_p2p_consumer_pub_pattern
from patterns.sdx.p2p_consumer_integrity_r1 import eval_p2p_consumer_integrity_pattern

def evaluate_pattern(pattern, context):
"""
Evaluates a pattern against the provided context.
"""
if pattern == 'sdx-access-point-r1':
return eval_access_point_pattern(context)
elif pattern == 'sdx-keys-r1':
return eval_keys_pattern(context)
elif pattern == 'sdx-service-r1':
return eval_service_pattern(context)
elif pattern == 'sdx-service-mtls-r1':
return eval_service_mtls_pattern(context)
elif pattern == 'sdx-service-pub-r1':
return eval_service_pub_pattern(context)
elif pattern == 'sdx-p2p-provider-r1':
return eval_p2p_provider_pattern(context)
elif pattern == 'sdx-p2p-provider-pub-r1':
return eval_p2p_provider_pub_pattern(context)
elif pattern == 'sdx-p2p-provider-integrity-r1':
return eval_p2p_provider_integrity_pattern(context)
elif pattern == 'sdx-p2p-consumer-r1':
return eval_p2p_consumer_pattern(context)
elif pattern == 'sdx-p2p-consumer-pub-r1':
return eval_p2p_consumer_pub_pattern(context)
elif pattern == 'sdx-p2p-consumer-integrity-r1':
return eval_p2p_consumer_integrity_pattern(context)
else:
raise ValueError(f"Unknown pattern: {pattern}")
268 changes: 268 additions & 0 deletions microservices/gatewayApi/patterns/sdx/access_point_r1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@

from string import Template



###
### Access Point
###
### - all routes are protected by mTLS
### - default 401 response for all requests
###
template = Template("""
_format_version: "3.0"
services:
- name: ${service_name}
url: ${upstream_uri}
tags: [ns.${gateway}.${ns_qualifier}]
plugins:
- name: mtls-auth
tags: [ns.${gateway}.${ns_qualifier}]
enabled: false
config:
error_response_code: 401
upstream_cert_cn_header: "X-CERT-CN"
upstream_cert_fingerprint_header: "X-CERT-FINGERPRINT"
upstream_cert_i_dn_header: "X-CERT-I-DN"
upstream_cert_s_dn_header: "X-CERT-S-DN"
upstream_cert_serial_header: "X-CERT-SERIAL"
- name: request-termination
tags: [ns.${gateway}.${ns_qualifier}]
config:
status_code: 401
message: "Access Denied. Route not found."
routes:
- name: ${service_name}.DENY
tags: [ns.${gateway}.${ns_qualifier}, sdx]
hosts:
- ${route_host}
paths:
- ${route_path}
methods:
- GET
- POST
- PUT
- DELETE
- OPTIONS
strip_path: true
https_redirect_status_code: 426
path_handling: v0
request_buffering: true
response_buffering: true

- name: ${service_name}.CONSOLE
url: https://sdx-beta-api-gov-bc-ca-lab.dev.api.gov.bc.ca
tags: [ns.${gateway}.${ns_qualifier}]
routes:
- name: ${service_name}.CONSOLE
tags: [ns.${gateway}.${ns_qualifier}, sdx]
hosts:
- ${route_host}
paths:
- /console
- /api/rd/
methods:
- GET
strip_path: false
https_redirect_status_code: 426
path_handling: v0
request_buffering: true
response_buffering: true
- name: ${service_name}.CONSOLE-DS-API
tags: [ns.${gateway}.${ns_qualifier}, sdx]
hosts:
- ${route_host}
paths:
- /api/ds/
methods:
- GET
- POST
- PUT
- DELETE
strip_path: false
https_redirect_status_code: 426
path_handling: v0
request_buffering: true
response_buffering: true
- name: ${service_name}.AUTH
url: https://httpbin.org
tags: [ns.${gateway}.${ns_qualifier}]
tls_verify: false
routes:
- name: ${service_name}.AUTH-OPTIONS
tags: [ns.${gateway}.${ns_qualifier}, sdx]
hosts:
- ${route_host}
paths:
- /auth
methods:
- OPTIONS
strip_path: false
preserve_host: false
https_redirect_status_code: 426
path_handling: v0
request_buffering: true
response_buffering: true
- name: ${service_name}.AUTH
tags: [ns.${gateway}.${ns_qualifier}, sdx]
hosts:
- ${route_host}
paths:
- /auth
methods:
- POST
strip_path: false
preserve_host: false
https_redirect_status_code: 426
path_handling: v0
request_buffering: true
response_buffering: true
plugins:
- name: pre-function
tags: [ns.${gateway}.${ns_qualifier}]
enabled: true
config:
access:
- |
local os = require "os"
local io = require "io"
local ssl = require('ngx.ssl')

local http = require "resty.http"
local cjson = require "cjson.safe"

local httpc = http.new()
local req_body = kong.request.get_raw_body()

local client_cert_path = os.getenv("KONG_CLIENT_SSL_CERT")
local client_key_path = os.getenv("KONG_CLIENT_SSL_CERT_KEY")

if req_body then
-- Process the raw body string
kong.log.info("Request body: ", req_body)
end

local function read_file(filename)
local file = io.open(filename, "r")
if not file then
kong.log.err("Error: Could not open file " .. filename)
return kong.response.exit(500, "Error: Could not open file " .. filename)
end

local content = file:read("*all") -- Read entire file
file:close()
return content
end

local config = {
-- Server details
host = "sdx-authz-apps-gov-bc-ca-lab.apps.gov.bc.ca",
port = 443,
path = "/auth/realms/sdx/protocol/openid-connect/token",

-- Client certificate files
cert_file = assert(ssl.parse_pem_cert(read_file(client_cert_path))),
key_file = assert(ssl.parse_pem_priv_key(read_file(client_key_path))),

-- Request data
post_data = req_body,
content_type = "application/x-www-form-urlencoded"
}

if not config.cert_file or not config.key_file then
kong.log.err("Failed to load certificates as cdata")
return kong.response.exit(500, "Failed to load certificates as cdata")
end

local res, err = httpc:request_uri(
"https://" .. config.host .. ":" .. config.port .. config.path,
{
method = "POST",
headers = {
["Content-Type"] = config.content_type,
["Accept"] = "application/json",
["DPoP"] = kong.request.get_header("DPoP")
},
body = config.post_data,
ssl_verify = true,
ssl_client_cert = config.cert_file,
ssl_client_priv_key = config.key_file
}
)

if not res then
return kong.response.exit(502, "Upstream request failed: " .. (err or "unknown error"))
end

kong.response.set_header("Content-Type", res.headers["Content-Type"] or "application/json")
return kong.response.exit(res.status, res.body)


plugins:
- name: cors
tags: [ns.${gateway}.${ns_qualifier}]
enabled: true
config:
origins:
- "*"
methods:
- GET
- POST
- OPTIONS
headers:
- Accept
- Authorization
- Content-Type
- If-None-Match
- X-Client-Id
- DPoP

- name: ${service_name}.HELLO
url: https://httpbin.org
tags: [ns.${gateway}.${ns_qualifier}]
tls_verify: false
routes:
- name: ${service_name}.HELLO
tags: [ns.${gateway}.${ns_qualifier}, sdx]
hosts:
- ${route_host}
paths:
- /hello
methods:
- GET
strip_path: false
preserve_host: false
https_redirect_status_code: 426
path_handling: v0
request_buffering: true
response_buffering: true

- name: ${service_name}.JWKS
url: https://httpbin.org
tags: [ns.${gateway}.${ns_qualifier}]
tls_verify: false
routes:
- name: ${service_name}.JWKS
tags: [ns.${gateway}.${ns_qualifier}, sdx]
hosts:
- ${route_host}
paths:
- /.well-known/jwks.json
methods:
- GET
strip_path: false
preserve_host: false
https_redirect_status_code: 426
path_handling: v0
request_buffering: true
response_buffering: true
plugins:
- name: trust-registry
tags: [ns.${gateway}.${ns_qualifier}]
config: {}


""")

def eval_access_point_pattern (context):
return template.substitute(context)
23 changes: 23 additions & 0 deletions microservices/gatewayApi/patterns/sdx/keys_r1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

from string import Template
import textwrap

###
### Keys
###
###
template = Template("""
_format_version: "3.0"
keys:
- name: ${key_name}
kid: ${kid}
pem:
public_key: |-
${public_key_pem}
tags: [ns.${gateway}.${ns_qualifier}]
""")

def eval_keys_pattern (context):
pem = context["public_key_pem"]
context["public_key_pem"] = textwrap.indent(pem, " ")
return template.substitute(context)
Loading
Loading