44 "ipsets": {
55 // Robbinsdale site networks
66 "ipset:robbinsdale": [
7- "192.168.50.0/24", // Main LAN
8- "fd7a:115c:a1e0:b1a:0:1::/96", // 4via6 subnet
9- "10.69.0.0/16", // LB network range
10- "10.0.0.0/16", // Service network range
11- "10.1.0.0/16", // Pod network range
12- ],
7+ "192.168.50.0/24", // Main LAN
8+ "fd7a:115c:a1e0:b1a:0:1::/96", // 4via6 subnet
9+ "10.69.0.0/16", // LB network range
10+ "10.0.0.0/16", // Service network range
11+ "10.1.0.0/16", // Pod network range
12+ ],
1313 // Ottawa site networks
1414 "ipset:ottawa": [
1515 "192.168.169.0/24", // Main LAN
16- "fd7a:115c:a1e0:b1a:0:2::/96", // 4via6 subnet
17- "10.169.0.0/16", // LB network range
18- "10.2.0.0/16", // Service network range
19- "10.3.0.0/16", // Pod network range
20- ],
21- // St Petersburg site networks
22- "ipset:stpetersburg": [
23- "192.168.73.0/24", // Main LAN
24- "10.73.3.0/24", // LB network range
25- "10.4.0.0/16", // Service network range
26- "10.5.0.0/16", // Pod network range
27- "fd7a:115c:a1e0:b1a:0:3::/96", // 4via6 subnet
28- ],
16+ "fd7a:115c:a1e0:b1a:0:2::/96", // 4via6 subnet
17+ "10.169.0.0/16", // LB network range
18+ "10.2.0.0/16", // Service network range
19+ "10.3.0.0/16", // Pod network range
20+ ],
21+ // St Petersburg site networks
22+ "ipset:stpetersburg": [
23+ "192.168.73.0/24", // Main LAN
24+ "10.73.3.0/24", // LB network range
25+ "10.4.0.0/16", // Service network range
26+ "10.5.0.0/16", // Pod network range
27+ "fd7a:115c:a1e0:b1a:0:3::/96", // 4via6 subnet
28+ ],
2929 },
3030 "groups": {
3131 "group:superuser": [
3232 "kbpersonal@github",
33- "LukeHouge@github",
33+ "LukeHouge@github",
3434 "rajsinghtech@github",
35- 36- ]
35+ 36+ ],
3737 },
3838 "tagOwners": {
3939 // Core infrastructure tags
4040 "tag:k8s-operator": [],
4141 "tag:k8s": ["tag:k8s-operator", "autogroup:admin"],
4242 "tag:k8s-recorder": ["tag:k8s-operator"],
43- "tag:udm": ["autogroup:admin"],
43+ "tag:udm": ["autogroup:admin"],
4444 // Site-specific tags
4545 "tag:robbinsdale": ["tag:k8s-operator", "autogroup:admin"],
4646 "tag:ottawa": ["tag:k8s-operator", "autogroup:admin"],
5050 "autoApprovers": {
5151 "exitNode": ["tag:k8s"],
5252 "routes": {
53- "0.0.0.0/0": ["tag:k8s"], // Default route (exit node)
54- "::/0": ["tag:k8s"], // IPv6 default route
55- "192.168.50.0/24": ["tag:robbinsdale"], // Robbinsdale LAN
56- "192.168.169.0/24": ["tag:ottawa"], // Ottawa LAN
57- "192.168.73.0/24": ["tag:stpetersburg"], // St Petersburg LAN
53+ "0.0.0.0/0": ["tag:k8s"], // Default route (exit node)
54+ "::/0": ["tag:k8s"], // IPv6 default route
55+ "192.168.50.0/24": ["tag:robbinsdale"], // Robbinsdale LAN
56+ "192.168.169.0/24": ["tag:ottawa"], // Ottawa LAN
57+ "192.168.73.0/24": ["tag:stpetersburg"], // St Petersburg LAN
5858 },
5959 "services": {
60- "tag:k8s": ["tag:k8s"],
60+ "tag:k8s": ["tag:k8s"],
6161 },
6262 },
6363 // Define SSH access policies
7878 "dst": ["autogroup:self"],
7979 "ip": ["*"],
8080 },
81- // Allow Superuser to access all location nodes
82- {
83- "src": ["group:superuser", "tag:ottawa", "tag:robbinsdale", "tag:stpetersburg"],
84- "dst": ["tag:ottawa", "tag:robbinsdale", "tag:stpetersburg"],
85- "ip": ["*"],
86- },
87- // Allow members to reach udm nodes
88- {
89- "src": ["group:superuser", "tag:udm", "tag:k8s", "tag:k8s-operator"],
90- "dst": ["tag:udm"],
91- "ip": ["*"],
92- "app": {
93- "tailscale.com/cap/relay": [],
94- },
95- },
81+ // Allow Superuser to access all location nodes
82+ {
83+ "src": ["group:superuser", "tag:ottawa", "tag:robbinsdale", "tag:stpetersburg"],
84+ "dst": ["tag:ottawa", "tag:robbinsdale", "tag:stpetersburg"],
85+ "ip": ["*"],
86+ },
87+ // Allow members to reach udm nodes
88+ {
89+ "src": ["group:superuser", "tag:udm", "tag:k8s", "tag:k8s-operator"],
90+ "dst": ["tag:udm"],
91+ "ip": ["*"],
92+ "app": {
93+ "tailscale.com/cap/relay": [],
94+ },
95+ },
9696 // Allow members to use nodes as exit nodes and app connector
9797 {
9898 "src": ["group:superuser", "tag:k8s"],
108108 "via": ["tag:robbinsdale"],
109109 },
110110 {
111- "src": ["group:superuser", "tag:robbinsdale", "tag:stpetersburg"],
112- "dst": ["ipset:ottawa"],
113- "ip": ["*"],
114- "via": ["tag:ottawa"],
111+ "src": ["group:superuser", "tag:robbinsdale", "tag:stpetersburg"],
112+ "dst": ["ipset:ottawa"],
113+ "ip": ["*"],
114+ "via": ["tag:ottawa"],
115115 },
116116 {
117- "src": ["group:superuser", "tag:robbinsdale", "tag:ottawa"],
118- "dst": ["ipset:stpetersburg"],
119- "ip": ["*"],
120- "via": ["tag:stpetersburg"],
117+ "src": ["group:superuser", "tag:robbinsdale", "tag:ottawa"],
118+ "dst": ["ipset:stpetersburg"],
119+ "ip": ["*"],
120+ "via": ["tag:stpetersburg"],
121121 },
122122 // Admin access to Kubernetes API with system:masters privileges
123123 {
134134 "enforceRecorder": true,
135135 },
136136 ],
137- "tailscale.com/cap/tsidp": [
138- {
139- "allow_admin_ui": true,
140- },
141- ],
137+ "tailscale.com/cap/tsidp": [
138+ {
139+ "allow_admin_ui": true,
140+ },
141+ ],
142142 },
143143 },
144144 // Member access to Kubernetes API with read-only privileges
145145 {
146146 "src": ["autogroup:member"],
147- "dst": ["tag:k8s-operator","tag:k8s"],
147+ "dst": ["tag:k8s-operator", "tag:k8s"],
148148 "ip": ["*"],
149149 "app": {
150150 "tailscale.com/cap/kubernetes": [
160160 },
161161 ],
162162 "nodeAttrs": [
163- {
164- "target": ["*"],
165- "app": {
166- "tailscale.com/app-connectors": [
167- {
168- "name":"shared",
169- "connectors":["tag:k8s"],
170- "domains":["docs.google.com"]
171- },
172- {
173- "name":"robbinsdale",
174- "connectors":["tag:robbinsdale"],
175- "domains":[
176- "robbinsdale.k8s"
177- ],
178- "routes":["fd7a:115c:a1e0:b1a:0:1::/96"]
179- },
180- {
181- "name":"ottawa",
182- "connectors":["tag:ottawa"],
183- "domains":[
184- "ottawa.k8s"
185- ],
186- "routes":["fd7a:115c:a1e0:b1a:0:2::/96"]
187- },
188- ]
189- }
190- },
191- {
192- "target": ["group:superuser"],
193- "attr": [
194- // "experimental:exit-node-steering", // FF traffic-steering
195- // "only-tcp-443", // FF allow-only-tcp-443
196- // "custom:test" // FF metadata-node-set-attrs node-attributes-api
197- ],
198- },
199-
200163 {
201- "target": ["tag:k8s"],
164+ "target": ["*"],
165+ "app": {
166+ "tailscale.com/app-connectors": [
167+ {
168+ "name": "shared",
169+ "connectors": ["tag:k8s"],
170+ "domains": ["docs.google.com"],
171+ },
172+ {
173+ "name": "robbinsdale",
174+ "connectors": ["tag:robbinsdale"],
175+ "domains": [
176+ "robbinsdale.k8s",
177+ ],
178+ "routes": ["fd7a:115c:a1e0:b1a:0:1::/96"],
179+ },
180+ {
181+ "name": "ottawa",
182+ "connectors": ["tag:ottawa"],
183+ "domains": [
184+ "ottawa.k8s",
185+ ],
186+ "routes": ["fd7a:115c:a1e0:b1a:0:2::/96"],
187+ },
188+ ],
189+ },
190+ },
191+ {
192+ "target": ["group:superuser"],
202193 "attr": [
203- "funnel",
204- // "only-tcp-443",
205- ],
194+ // "experimental:exit-node-steering", // FF traffic-steering
195+ // "only-tcp-443", // FF allow-only-tcp-443
196+ // "custom:test" // FF metadata-node-set-attrs node-attributes-api
197+ ],
198+ },
199+
200+ {
201+ "target": ["tag:k8s"],
202+ "attr": [
203+ "funnel",
204+ // "only-tcp-443",
205+ ],
206+ },
207+ ],
208+ // Define test ACLs
209+ "tests": [
210+ {
211+ // Admin user test ACLs
212+ "src": "rajsinghtech@github",
213+ "accept": [
214+ "192.168.50.1:443",
215+ "192.168.169.1:443",
216+ "10.0.0.1:443",
217+ "10.1.0.1:443",
218+ "10.2.0.1:443",
219+ "10.69.0.1:443",
220+ "10.169.0.1:443",
221+ "tag:k8s-operator:443",
222+ "tag:k8s:443",
223+ "tag:k8s:80",
224+ "tag:robbinsdale:443",
225+ "rajsinghtech@github:53",
226+ ],
227+ },
228+ {
229+ // K8s user
230+ "src": "tag:k8s",
231+ "accept": [
232+ "tag:k8s-operator:443",
233+ "tag:k8s:443",
234+ ],
235+ },
236+ {
237+ // Robbinsdale cannot reach it's own LAN
238+ "src": "tag:robbinsdale",
239+ "accept": [
240+ "192.168.169.1:443",
241+ ],
242+ "deny": [
243+ "192.168.50.1:443",
244+ ],
245+ },
246+ {
247+ // Ottawa cannot reach it's own LAN
248+ "src": "tag:ottawa",
249+ "accept": [
250+ "192.168.50.1:443",
251+ ],
252+ "deny": [
253+ "192.168.169.1:443",
254+ ],
206255 },
207256 ],
208- // Define test ACLs
209- "tests": [
210- {
211- // Admin user test ACLs
212- "src": "rajsinghtech@github",
213- "accept": [
214- "192.168.50.1:443",
215- "192.168.169.1:443",
216- "10.0.0.1:443",
217- "10.1.0.1:443",
218- "10.2.0.1:443",
219- "10.69.0.1:443",
220- "10.169.0.1:443",
221- "tag:k8s-operator:443",
222- "tag:k8s:443",
223- "tag:k8s:80",
224- "tag:robbinsdale:443",
225- "rajsinghtech@github:53",
226- ]
227- },
228- {
229- // K8s user
230- "src": "tag:k8s",
231- "accept": [
232- "tag:k8s-operator:443",
233- "tag:k8s:443",
234- ]
235- },
236- {
237- // Robbinsdale cannot reach it's own LAN
238- "src": "tag:robbinsdale",
239- "accept": [
240- "192.168.169.1:443",
241- ],
242- "deny": [
243- "192.168.50.1:443",
244- ]
245- },
246- {
247- // Ottawa cannot reach it's own LAN
248- "src": "tag:ottawa",
249- "accept": [
250- "192.168.50.1:443",
251- ],
252- "deny": [
253- "192.168.169.1:443",
254- ]
255- },
256- ],
257257 // Legacy ACL rules (deprecated - using grants instead)
258258 "acls": [{
259259 // Private log streaming enables audit and network logs to be directly
265265 "src": ["logstream@tailscale"],
266266 "dst": ["[fd7a:115c:a1e0::801:1578]:8088"],
267267 }],
268- }
268+ }
0 commit comments