17 from typing
import Optional
19 from absl
import flags
20 from absl.testing
import absltest
23 from framework
import xds_k8s_testcase
26 flags.adopt_module_key_flags(xds_k8s_testcase)
29 _XdsTestServer = xds_k8s_testcase.XdsTestServer
30 _XdsTestClient = xds_k8s_testcase.XdsTestClient
31 _SecurityMode = xds_k8s_testcase.SecurityXdsKubernetesTestCase.SecurityMode
40 _SETTLE_DURATION = datetime.timedelta(seconds=5)
41 _SAMPLE_DURATION = datetime.timedelta(seconds=0.5)
44 class AuthzTest(xds_k8s_testcase.SecurityXdsKubernetesTestCase):
46 'UNARY_CALL':
'EMPTY_CALL',
47 'EMPTY_CALL':
'UNARY_CALL',
54 if config.client_lang
in _Lang.CPP | _Lang.PYTHON:
55 return config.version_gte(
'v1.44.x')
56 elif config.client_lang
in _Lang.GO | _Lang.JAVA:
57 return config.version_gte(
'v1.42.x')
68 "hosts": [f
"*:{self.server_xds_port}"],
69 "ports": [self.server_port],
72 "regexMatch":
"host-wildcard",
78 "hosts": [f
"*:{self.server_xds_port}"],
79 "ports": [self.server_port],
82 "regexMatch":
"header-regex-a+",
88 "hosts": [f
"{self.server_xds_host}:{self.server_xds_port}"],
89 "ports": [self.server_port],
92 "regexMatch":
"host-match1",
96 f
"a-not-it.com:{self.server_xds_port}",
97 f
"{self.server_xds_host}:{self.server_xds_port}",
100 "ports": [1, self.server_port, 65535],
102 "headerName":
"test",
103 "regexMatch":
"host-match2",
110 f
"not-the-host:{self.server_xds_port}",
113 "ports": [self.server_port],
115 "headerName":
"test",
116 "regexMatch":
"never-match-host",
122 "hosts": [f
"*:{self.server_xds_port}"],
125 "headerName":
"test",
126 "regexMatch":
"never-match-port",
147 f
"spiffe://{self.project}.svc.id.goog/not/the/client",
151 f
"spiffe://{self.project}.svc.id.goog/not/the/client",
152 f
"spiffe://{self.project}.svc.id.goog/ns/"
153 f
"{self.client_namespace}/sa/{self.client_name}",
157 "hosts": [f
"*:{self.server_xds_port}"],
158 "ports": [self.server_port],
160 "headerName":
"test",
161 "regexMatch":
"match-principal",
168 f
"spiffe://{self.project}.svc.id.goog/not/the/client",
172 "hosts": [f
"*:{self.server_xds_port}"],
173 "ports": [self.server_port],
175 "headerName":
"test",
176 "regexMatch":
"never-match-principal",
183 test_metadata_val: Optional[str],
188 stats = test_client.get_load_balancer_accumulated_stats()
190 if not stats.stats_per_method[t].rpcs_started:
192 self.assertIsNotNone(rpc_type,
"All RPC types already used")
196 if test_metadata_val
is not None:
197 metadata = ((rpc_type,
"test", test_metadata_val),)
198 test_client.update_config.configure(rpc_types=[rpc_type],
200 self.assertRpcStatusCodes(test_client,
201 status_code=status_code,
202 duration=_SAMPLE_DURATION,
206 self.setupTrafficDirectorGrpc()
207 self.td.create_authz_policy(action=
'ALLOW', rules=self.
authz_rules())
208 self.setupSecurityPolicies(server_tls=
False,
213 test_server: _XdsTestServer = self.startSecureTestServer()
214 self.setupServerBackends()
215 test_client: _XdsTestClient = self.startSecureTestClient(test_server)
216 time.sleep(_SETTLE_DURATION.total_seconds())
218 with self.subTest(
'01_host_wildcard'):
222 with self.subTest(
'02_no_match'):
224 grpc.StatusCode.PERMISSION_DENIED)
226 grpc.StatusCode.PERMISSION_DENIED)
228 with self.subTest(
'03_header_regex'):
234 grpc.StatusCode.PERMISSION_DENIED)
236 grpc.StatusCode.PERMISSION_DENIED)
238 grpc.StatusCode.PERMISSION_DENIED)
240 with self.subTest(
'04_host_match'):
246 with self.subTest(
'05_never_match_host'):
248 grpc.StatusCode.PERMISSION_DENIED)
250 with self.subTest(
'06_never_match_port'):
252 grpc.StatusCode.PERMISSION_DENIED)
260 self.setupTrafficDirectorGrpc()
261 self.td.create_authz_policy(action=
'ALLOW', rules=self.
authz_rules())
262 self.setupSecurityPolicies(server_tls=
True,
267 test_server: _XdsTestServer = self.startSecureTestServer()
268 self.setupServerBackends()
269 test_client: _XdsTestClient = self.startSecureTestClient(test_server)
270 time.sleep(_SETTLE_DURATION.total_seconds())
272 with self.subTest(
'01_host_wildcard'):
276 with self.subTest(
'02_no_match'):
278 grpc.StatusCode.PERMISSION_DENIED)
286 self.setupTrafficDirectorGrpc()
287 self.td.create_authz_policy(action=
'ALLOW', rules=self.
authz_rules())
288 self.setupSecurityPolicies(server_tls=
True,
293 test_server: _XdsTestServer = self.startSecureTestServer()
294 self.setupServerBackends()
295 test_client: _XdsTestClient = self.startSecureTestClient(test_server)
296 time.sleep(_SETTLE_DURATION.total_seconds())
298 with self.subTest(
'01_host_wildcard'):
302 with self.subTest(
'02_no_match'):
304 grpc.StatusCode.PERMISSION_DENIED)
311 with self.subTest(
'04_match_principal'):
315 with self.subTest(
'05_never_match_principal'):
317 grpc.StatusCode.PERMISSION_DENIED)
320 self.setupTrafficDirectorGrpc()
321 self.td.create_authz_policy(action=
'DENY', rules=self.
authz_rules())
322 self.setupSecurityPolicies(server_tls=
False,
327 test_server: _XdsTestServer = self.startSecureTestServer()
328 self.setupServerBackends()
329 test_client: _XdsTestClient = self.startSecureTestClient(test_server)
330 time.sleep(_SETTLE_DURATION.total_seconds())
332 with self.subTest(
'01_host_wildcard'):
334 grpc.StatusCode.PERMISSION_DENIED)
336 with self.subTest(
'02_no_match'):
340 if __name__ ==
'__main__':