Skip to content

Commit 08f7eb2

Browse files
committed
[RFC-0014] Introduce SPIFFE Broker API
Signed-off-by: Matheus Pimenta <matheuscscp@gmail.com>
1 parent 687cb67 commit 08f7eb2

10 files changed

Lines changed: 1042 additions & 10 deletions

File tree

‎.github/workflows/e2e.yaml‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,25 @@ jobs:
8989
kubectl -n helm-system get helmreleases -oyaml || true
9090
kubectl -n helm-system get all
9191
helm ls -n helm-system --all
92+
kubeconfig-remote:
93+
runs-on: ubuntu-latest
94+
permissions:
95+
contents: read # for reading the repository code.
96+
steps:
97+
- name: Test suite setup
98+
# The custom kind config sets the ServiceAccount issuer URL used by the
99+
# remote cluster's OIDC authenticator.
100+
uses: fluxcd/gha-workflows/.github/actions/setup-kubernetes@948f0babb1fce92d805ea0755a3d7ec1cc4f3176 # v0.16.0
101+
with:
102+
go-version: 1.27.x
103+
kind-config: hack/ci/kubeconfig-primary-kind.yaml
104+
- name: Build container image
105+
run: |
106+
make docker-build IMG=test/helm-controller:latest \
107+
BUILD_PLATFORMS=linux/amd64 \
108+
BUILD_ARGS="--load"
109+
- name: Run remote kubeconfig e2e
110+
# Reuses the "kind" cluster the setup action created and adds a second one.
111+
run: hack/ci/kubeconfig-e2e.sh
112+
env:
113+
IMG: test/helm-controller:latest

‎docs/README.md‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
| `--requeue-dependency` | duration | The interval at which failing dependencies are reevaluated. (default 30s) |
3737
| `--snapshot-digest-algo` | string | The algorithm to use to calculate the digest of Helm release storage snapshots. (default "sha256") |
3838
| `--token-cache-max-size` | int | The maximum amount of entries in the LRU cache used for tokens. (default 100, enabled) |
39+
| `--spiffe-broker-endpoint` | string | The gRPC URL of the SPIFFE Broker endpoint. |
40+
| `--spiffe-broker-id` | strings | SPIFFE ID of the SPIFFE Broker endpoint. Can be repeated. |
3941
| `--token-cache-max-duration` | duration | The maximum duration for which a token would be considered unexpired. This is capped at 1h. (default 1h) |
4042
| `--watch-all-namespaces` | boolean | Watch for custom resources in all namespaces, if set to false it will only watch the runtime namespace. (default true) |
4143
| `--watch-configs-label-selector` | string | Watch for ConfigMaps and Secrets with matching labels (default 'reconcile.fluxcd.io/watch=Enabled'). |
@@ -72,6 +74,21 @@ understands it as the trust domain of the controller's own X509-SVID.
7274

7375
Invalid values cause helm-controller to fail at startup.
7476

77+
### SPIFFE Broker API
78+
79+
When `--spiffe-broker-endpoint` and at least one `--spiffe-broker-id` are set,
80+
helm-controller acquires an X.509-SVID from the SPIFFE Workload API and uses it to
81+
authenticate to the SPIFFE Broker API. The `SPIFFE_ENDPOINT_SOCKET` environment
82+
variable must point to the Workload API socket.
83+
84+
The Broker is used to acquire JWT-SVIDs for object-level workload identity when
85+
a ServiceAccount sets `credential.auth.fluxcd.io/provider` to `spiffe`. The
86+
Broker endpoint is a TCP gRPC target, e.g.
87+
`dns:///spire-server.spire.svc.cluster.local:8443`.
88+
89+
Each `--spiffe-broker-id` value is interpreted like the SPIFFE IDs used by the
90+
mTLS flags. Invalid values cause helm-controller to fail at startup.
91+
7592
### Feature Gates
7693

7794
| Name | Default Value | Description |

‎docs/spec/v2/helmreleases.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,6 +1290,11 @@ this feature, see the following docs:
12901290
- [GKE](/flux/integrations/gcp/#for-google-kubernetes-engine)
12911291
- [Generic](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#configuring-the-api-server)
12921292

1293+
For a complete guide to the ServiceAccount annotations used for object-level
1294+
workload identity, including the `spiffe` credential provider, see the
1295+
[ServiceAccount annotations](/flux/integrations/serviceaccount-annotations)
1296+
docs.
1297+
12931298
Example for an EKS cluster:
12941299

12951300
```yaml

‎go.mod‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ require (
2222
github.com/fluxcd/pkg/apis/event v0.32.0
2323
github.com/fluxcd/pkg/apis/kustomize v1.23.0
2424
github.com/fluxcd/pkg/apis/meta v1.36.1-0.20261021122630-1ab1573eaf5b
25-
github.com/fluxcd/pkg/auth v0.63.1-0.20261021122630-1ab1573eaf5b
25+
github.com/fluxcd/pkg/auth v0.63.1-0.20261021195940-7f28daf18ea8
2626
github.com/fluxcd/pkg/cache v0.17.1-0.20261021122630-1ab1573eaf5b
2727
github.com/fluxcd/pkg/chartutil v1.32.0
2828
github.com/fluxcd/pkg/http/fetch v0.28.1-0.20261021122630-1ab1573eaf5b
2929
github.com/fluxcd/pkg/runtime v0.120.1-0.20261021122630-1ab1573eaf5b
30-
github.com/fluxcd/pkg/spiffe v0.0.0-20261021122630-1ab1573eaf5b
30+
github.com/fluxcd/pkg/spiffe v0.0.0-20261021195940-7f28daf18ea8
3131
github.com/fluxcd/pkg/ssa v0.80.0
3232
github.com/fluxcd/pkg/testserver v0.15.0
3333
github.com/fluxcd/source-controller/api v1.9.6
@@ -114,7 +114,7 @@ require (
114114
github.com/extism/go-sdk v1.7.1 // indirect
115115
github.com/fatih/color v1.19.0 // indirect
116116
github.com/felixge/httpsnoop v1.1.0 // indirect
117-
github.com/fluxcd/pkg/apis/crypto v0.4.1-0.20261021122630-1ab1573eaf5b // indirect
117+
github.com/fluxcd/pkg/apis/crypto v0.4.1-0.20261021195940-7f28daf18ea8 // indirect
118118
github.com/fluxcd/pkg/tar v1.3.0 // indirect
119119
github.com/fsnotify/fsnotify v1.10.1 // indirect
120120
github.com/fxamacker/cbor/v2 v2.9.3 // indirect
@@ -137,6 +137,7 @@ require (
137137
github.com/go-openapi/swag/stringutils v0.29.1 // indirect
138138
github.com/go-openapi/swag/typeutils v0.29.1 // indirect
139139
github.com/go-openapi/swag/yamlutils v0.29.1 // indirect
140+
github.com/gobuffalo/flect v1.0.3 // indirect
140141
github.com/gobwas/glob v0.2.3 // indirect
141142
github.com/gofrs/flock v0.13.0 // indirect
142143
github.com/golang-jwt/jwt/v5 v5.3.1 // indirect
@@ -233,3 +234,5 @@ require (
233234
)
234235

235236
replace github.com/fluxcd/source-controller/api => github.com/fluxcd/source-controller/api v1.9.1-0.20261005091731-e47a59ad5d01
237+
238+
exclude github.com/fluxcd/pkg/spiffe v0.0.0

‎go.sum‎

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,16 +152,16 @@ github.com/fluxcd/cli-utils v1.4.0 h1:zlTiCWcVDQvvwZXILYeu5rpbnGt1sS+w32y3+rkOpi
152152
github.com/fluxcd/cli-utils v1.4.0/go.mod h1:OupUOj2boEKTbiguMbGMz5Z/d59JUcb1c7pPESe8Pjw=
153153
github.com/fluxcd/pkg/apis/acl v0.12.0 h1:UWpZDqKxpKDW38wdXIMHV8Uv3POPu2vUrra0JH1frH0=
154154
github.com/fluxcd/pkg/apis/acl v0.12.0/go.mod h1:PJrGIu5Bw/6/siO95uhS+pi5oKSU+gVJqHqsPHb8Kok=
155-
github.com/fluxcd/pkg/apis/crypto v0.4.1-0.20261021122630-1ab1573eaf5b h1:/n7p1+Yyu88dVjg3ezqCM0p96VUwMxtjgSb6cELFiQg=
156-
github.com/fluxcd/pkg/apis/crypto v0.4.1-0.20261021122630-1ab1573eaf5b/go.mod h1:bEwkDgBjLXMVJ2BwmVbbj32PkirmNSicabgl2Jvw7Dk=
155+
github.com/fluxcd/pkg/apis/crypto v0.4.1-0.20261021195940-7f28daf18ea8 h1:5v8rFjr2mtgOvgcnq6p+YP6n3PIxUeCw9LuLVgtRtrQ=
156+
github.com/fluxcd/pkg/apis/crypto v0.4.1-0.20261021195940-7f28daf18ea8/go.mod h1:bEwkDgBjLXMVJ2BwmVbbj32PkirmNSicabgl2Jvw7Dk=
157157
github.com/fluxcd/pkg/apis/event v0.32.0 h1:3zyjdUspwQN+EQJPlUXwCvCMbeqtB+azlNmeenAcbuE=
158158
github.com/fluxcd/pkg/apis/event v0.32.0/go.mod h1:ALma8dTqo+NbI+z4BawSzt0pAPjetCSNNUSSS/9p0VU=
159159
github.com/fluxcd/pkg/apis/kustomize v1.23.0 h1:tT/sUURyh6ixQG4+Y/ZoUu+hh5/DQLRraWBgy42ubqQ=
160160
github.com/fluxcd/pkg/apis/kustomize v1.23.0/go.mod h1:Jm/LmEsqJIldhhTmhkORAq8JKVZK3ZV2Q88rntjGxEI=
161161
github.com/fluxcd/pkg/apis/meta v1.36.1-0.20261021122630-1ab1573eaf5b h1:g/s+m/jU7cPJ+8IIIXbDD19G7TQAKbiUvqTt5GuywlM=
162162
github.com/fluxcd/pkg/apis/meta v1.36.1-0.20261021122630-1ab1573eaf5b/go.mod h1:1MLvK2Xu3UdTKBzg+Q1Oj7H9PHeiKsUB1UW3uwxAwiM=
163-
github.com/fluxcd/pkg/auth v0.63.1-0.20261021122630-1ab1573eaf5b h1:uqRL6xKRFwUi7AXrPj7BSRAqQYz7rxNMNjSK2W6YqB0=
164-
github.com/fluxcd/pkg/auth v0.63.1-0.20261021122630-1ab1573eaf5b/go.mod h1:gWbB4MzuHWalVyI0o4lE84aINidor9+S63ithckm+94=
163+
github.com/fluxcd/pkg/auth v0.63.1-0.20261021195940-7f28daf18ea8 h1:ylRlAqUfY2cWj4vbmKxaitNwLRl79jSbEHHku4XA7Wo=
164+
github.com/fluxcd/pkg/auth v0.63.1-0.20261021195940-7f28daf18ea8/go.mod h1:H3d+oTnSZOXibRp0dFIwY9nBEyZPfeSEbdHLgTifrYA=
165165
github.com/fluxcd/pkg/cache v0.17.1-0.20261021122630-1ab1573eaf5b h1:wi9U1NDlqYmbVUMntuKU71vOqnSFSslDEMbbnBnzJDs=
166166
github.com/fluxcd/pkg/cache v0.17.1-0.20261021122630-1ab1573eaf5b/go.mod h1:OW3fncHhPnPZFZav5FdEa//cyMHSndI0JS+IM69LXOU=
167167
github.com/fluxcd/pkg/chartutil v1.32.0 h1:rqBhgiGsrS4am/jsCfKYlQvPQ+jATug10BtO95UHdq0=
@@ -170,8 +170,8 @@ github.com/fluxcd/pkg/http/fetch v0.28.1-0.20261021122630-1ab1573eaf5b h1:q+StvN
170170
github.com/fluxcd/pkg/http/fetch v0.28.1-0.20261021122630-1ab1573eaf5b/go.mod h1:SOq8vrzru2zipskTEguXzKHabn2ASyXESQ/DY93FafY=
171171
github.com/fluxcd/pkg/runtime v0.120.1-0.20261021122630-1ab1573eaf5b h1:/S4RzBts7XoNrxXM0hUjmVzZ+fxrXcZ6VyHJfaiWIII=
172172
github.com/fluxcd/pkg/runtime v0.120.1-0.20261021122630-1ab1573eaf5b/go.mod h1:Cw0CQ/tVKS9lgJoyKVouZr1qVnoJcYnSHw3QDzIOOjA=
173-
github.com/fluxcd/pkg/spiffe v0.0.0-20261021122630-1ab1573eaf5b h1:I7Z3cEgoM+EqYpLkr0xI3a1z+Qh1WbZKDCOd8EeGYJg=
174-
github.com/fluxcd/pkg/spiffe v0.0.0-20261021122630-1ab1573eaf5b/go.mod h1:tZ+T8ljAM9ZE0VriHSWM4vfvhlq5zv5bNcPKqwZK1lk=
173+
github.com/fluxcd/pkg/spiffe v0.0.0-20261021195940-7f28daf18ea8 h1:00U+vD6Ra4NJGlptrWvKrZeh8NebTUZ8kGqnJhVeaV8=
174+
github.com/fluxcd/pkg/spiffe v0.0.0-20261021195940-7f28daf18ea8/go.mod h1:SbLhH/mBxffgJqsoTFVXHNdfpcxFP2l0fmgh3FiU/u8=
175175
github.com/fluxcd/pkg/ssa v0.80.0 h1:GgakpCFz4pY+unpOscPYlc5eVLUsB7hw9TmWSNr3yp8=
176176
github.com/fluxcd/pkg/ssa v0.80.0/go.mod h1:mUwKP2+KZXm1mal1gSs9SjgcexyqzXbPfHKxdFv5ntM=
177177
github.com/fluxcd/pkg/tar v1.3.0 h1:PbL5jNN5q/F6nXA8aCH+msM75BS6lSnPX2RNd48f8ls=
@@ -239,6 +239,8 @@ github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpv
239239
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
240240
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
241241
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
242+
github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4=
243+
github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
242244
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
243245
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
244246
github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw=
@@ -408,12 +410,17 @@ github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3A
408410
github.com/spiffe/go-spiffe/v2 v2.9.0 h1:g5qTg3qIP1HXV+GzuyEfSJFVxUCpEP5Ui1OINVJHPB4=
409411
github.com/spiffe/go-spiffe/v2 v2.9.0/go.mod h1:w2CLWKLMTX/PPYUEUPv3ltH0RXsw5S8suwNF46w9/Aw=
410412
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
413+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
414+
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
411415
github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
412416
github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
413417
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
414418
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
415419
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
416420
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
421+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
422+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
423+
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
417424
github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE=
418425
github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg=
419426
github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 h1:ZF+QBjOI+tILZjBaFj3HgFonKXUcwgJ4djLb6i42S3Q=

0 commit comments

Comments
 (0)