Skip to content

Commit 8dbebc6

Browse files
committed
Given deployer tokens read-only access to CRDs for validation
1 parent e58480d commit 8dbebc6

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

main.tf

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,25 @@ resource "kubernetes_config_map_v1" "autoscaler_priority" {
7474
depends_on = [scaleway_k8s_pool.primary]
7575
}
7676

77+
# All projects need read-only access to CRDs for route deploys:
78+
resource "kubernetes_cluster_role_v1" "crd_reader" {
79+
metadata {
80+
name = "crd-reader-role"
81+
}
82+
83+
rule {
84+
api_groups = ["apiextensions.k8s.io"]
85+
resources = ["customresourcedefinitions"]
86+
verbs = ["get", "list"]
87+
}
88+
}
89+
7790
### ---
7891

7992
module "public_endpoint" {
8093
source = "./modules/k8s-project"
8194
name = "public-endpoint"
95+
crd_reader_role_name = kubernetes_cluster_role_v1.crd_reader.metadata[0].name
8296
}
8397

8498
output "public_endpoint_deploy_token" {
@@ -89,6 +103,7 @@ output "public_endpoint_deploy_token" {
89103
module "accounts_api" {
90104
source = "./modules/k8s-project"
91105
name = "accounts-api"
106+
crd_reader_role_name = kubernetes_cluster_role_v1.crd_reader.metadata[0].name
92107
}
93108

94109
output "accounts_api_deploy_token" {

modules/k8s-project/main.tf

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ resource "kubernetes_service_account_v1" "deployer" {
2121
}
2222
}
2323

24+
# Namespace rule: all permissions, but only in this namespace
2425
resource "kubernetes_role_v1" "deployer" {
2526
metadata {
2627
name = "gh-actions-deployer-role"
2728
namespace = kubernetes_namespace_v1.this.metadata[0].name
2829
}
2930

30-
# All permissions, but only in this namespace
3131
rule {
3232
api_groups = ["*"]
3333
resources = ["*"]
@@ -52,6 +52,25 @@ resource "kubernetes_role_binding_v1" "deployer" {
5252
}
5353
}
5454

55+
# Cluster rule: read-only perms on CRDs, required for route deploys:
56+
resource "kubernetes_cluster_role_binding_v1" "deployer_crd_reader" {
57+
metadata {
58+
name = "${var.name}-gh-actions-deployer-crd-cluster-binding"
59+
}
60+
61+
role_ref {
62+
api_group = "rbac.authorization.k8s.io"
63+
kind = "ClusterRole"
64+
name = var.crd_reader_role_name
65+
}
66+
67+
subject {
68+
kind = "ServiceAccount"
69+
name = kubernetes_service_account_v1.deployer.metadata[0].name
70+
namespace = kubernetes_namespace_v1.this.metadata[0].name
71+
}
72+
}
73+
5574
resource "kubernetes_secret_v1" "deployer_token" {
5675
metadata {
5776
name = "gh-actions-deployer-token"
@@ -61,4 +80,4 @@ resource "kubernetes_secret_v1" "deployer_token" {
6180
}
6281
}
6382
type = "kubernetes.io/service-account-token"
64-
}
83+
}

modules/k8s-project/variables.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
variable "name" {
22
description = "The name of the project/namespace"
33
type = string
4+
}
5+
6+
variable "crd_reader_role_name" {
7+
description = "Name of the global ClusterRole that grants CRD read permissions"
8+
type = string
49
}

0 commit comments

Comments
 (0)