securityContext.yaml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591
  1. suite: pod securityContext test
  2. templates:
  3. - common.yaml
  4. tests:
  5. - it: should pass with securityContext from "global"
  6. set:
  7. securityContext:
  8. pod:
  9. fsGroup: 1000
  10. fsGroupChangePolicy: OnRootMismatch
  11. supplementalGroups:
  12. - 1000
  13. - 1001
  14. sysctls:
  15. - name: some_name
  16. value: "some_value"
  17. - name: some_other_name
  18. value: "some_other_value"
  19. workload:
  20. workload-name1:
  21. enabled: true
  22. primary: true
  23. type: Deployment
  24. podSpec: {}
  25. asserts:
  26. - documentIndex: &deploymentDoc 0
  27. isKind:
  28. of: Deployment
  29. - documentIndex: *deploymentDoc
  30. equal:
  31. path: spec.template.spec.securityContext
  32. value:
  33. fsGroup: 1000
  34. fsGroupChangePolicy: OnRootMismatch
  35. supplementalGroups:
  36. - 1000
  37. - 1001
  38. sysctls:
  39. - name: some_name
  40. value: "some_value"
  41. - name: some_other_name
  42. value: "some_other_value"
  43. - it: should pass with securityContext from "global" and partial override with "pod"
  44. set:
  45. securityContext:
  46. pod:
  47. fsGroup: 1000
  48. fsGroupChangePolicy: OnRootMismatch
  49. supplementalGroups:
  50. - 1000
  51. - 1001
  52. sysctls:
  53. - name: some_name
  54. value: "some_value"
  55. - name: some_other_name
  56. value: "some_other_value"
  57. workload:
  58. workload-name1:
  59. enabled: true
  60. primary: true
  61. type: Deployment
  62. podSpec:
  63. securityContext:
  64. fsGroup: 1001
  65. asserts:
  66. - documentIndex: *deploymentDoc
  67. isKind:
  68. of: Deployment
  69. - documentIndex: *deploymentDoc
  70. equal:
  71. path: spec.template.spec.securityContext
  72. value:
  73. fsGroup: 1001
  74. fsGroupChangePolicy: OnRootMismatch
  75. supplementalGroups:
  76. - 1000
  77. - 1001
  78. sysctls:
  79. - name: some_name
  80. value: "some_value"
  81. - name: some_other_name
  82. value: "some_other_value"
  83. - it: should pass with securityContext from "global" and full override with "pod"
  84. set:
  85. some_sysctl_name: some_name
  86. some_sysctl_value: 2
  87. securityContext:
  88. pod:
  89. fsGroup: 1000
  90. fsGroupChangePolicy: OnRootMismatch
  91. supplementalGroups:
  92. - 1000
  93. - 1001
  94. sysctls:
  95. - name: some_name
  96. value: "some_value"
  97. - name: some_other_name
  98. value: "some_other_value"
  99. workload:
  100. workload-name1:
  101. enabled: true
  102. primary: true
  103. type: Deployment
  104. podSpec:
  105. securityContext:
  106. fsGroup: 1001
  107. fsGroupChangePolicy: Always
  108. supplementalGroups:
  109. - 1002
  110. - 1003
  111. sysctls:
  112. - name: "{{ .Values.some_sysctl_name }}"
  113. value: "{{ .Values.some_sysctl_value }}"
  114. - name: some_other_name
  115. value: "some_different_value"
  116. asserts:
  117. - documentIndex: *deploymentDoc
  118. isKind:
  119. of: Deployment
  120. - documentIndex: *deploymentDoc
  121. equal:
  122. path: spec.template.spec.securityContext
  123. value:
  124. fsGroup: 1001
  125. fsGroupChangePolicy: Always
  126. supplementalGroups:
  127. - 1002
  128. - 1003
  129. sysctls:
  130. - name: some_name
  131. value: "2"
  132. - name: some_other_name
  133. value: "some_different_value"
  134. - it: should pass with fsGroup and supplementalGroups with long int
  135. set:
  136. workload:
  137. workload-name1:
  138. enabled: true
  139. primary: true
  140. type: Deployment
  141. podSpec:
  142. securityContext:
  143. fsGroup: 100000514
  144. fsGroupChangePolicy: Always
  145. supplementalGroups:
  146. - 1002
  147. - 100000514
  148. asserts:
  149. - documentIndex: *deploymentDoc
  150. isKind:
  151. of: Deployment
  152. - documentIndex: *deploymentDoc
  153. equal:
  154. path: spec.template.spec.securityContext
  155. value:
  156. fsGroup: 100000514
  157. fsGroupChangePolicy: Always
  158. supplementalGroups:
  159. - 1002
  160. - 100000514
  161. sysctls: []
  162. - it: should pass with sysctls automatically appended based on services
  163. set:
  164. some_sysctl_name: some_name
  165. some_sysctl_value: 2
  166. workload:
  167. workload-name1:
  168. enabled: true
  169. primary: true
  170. type: Deployment
  171. podSpec:
  172. securityContext:
  173. fsGroup: 1001
  174. fsGroupChangePolicy: Always
  175. supplementalGroups:
  176. - 1002
  177. - 1003
  178. sysctls:
  179. - name: "{{ .Values.some_sysctl_name }}"
  180. value: "{{ .Values.some_sysctl_value }}"
  181. - name: some_other_name
  182. value: "some_different_value"
  183. workload-name2:
  184. enabled: true
  185. type: Deployment
  186. podSpec: {}
  187. service:
  188. service-name1:
  189. enabled: true
  190. primary: true
  191. type: ClusterIP
  192. ports:
  193. port-name:
  194. enabled: true
  195. primary: true
  196. port: 80
  197. service-name2:
  198. enabled: true
  199. type: ClusterIP
  200. ports:
  201. port-name:
  202. enabled: true
  203. primary: true
  204. port: 53
  205. service-name3:
  206. enabled: true
  207. type: ClusterIP
  208. targetSelector: workload-name2
  209. ports:
  210. port-name:
  211. enabled: true
  212. primary: true
  213. port: 443
  214. asserts:
  215. - documentIndex: *deploymentDoc
  216. isKind:
  217. of: Deployment
  218. - documentIndex: *deploymentDoc
  219. equal:
  220. path: spec.template.spec.securityContext
  221. value:
  222. fsGroup: 1001
  223. fsGroupChangePolicy: Always
  224. supplementalGroups:
  225. - 1002
  226. - 1003
  227. sysctls:
  228. - name: some_name
  229. value: "2"
  230. - name: some_other_name
  231. value: "some_different_value"
  232. - name: net.ipv4.ip_unprivileged_port_start
  233. value: "53"
  234. - documentIndex: &otherdeploymentDoc 1
  235. isKind:
  236. of: Deployment
  237. - documentIndex: *otherdeploymentDoc
  238. equal:
  239. path: spec.template.spec.securityContext
  240. value:
  241. fsGroup: 568
  242. fsGroupChangePolicy: OnRootMismatch
  243. supplementalGroups: []
  244. sysctls:
  245. - name: net.ipv4.ip_unprivileged_port_start
  246. value: "443"
  247. - it: should pass with sysctls net.ipv4.ip_unprivileged_port_start NOT appended with hostnet
  248. set:
  249. workload:
  250. workload-name1:
  251. enabled: true
  252. primary: true
  253. type: Deployment
  254. podSpec:
  255. hostNetwork: true
  256. workload-name2:
  257. enabled: true
  258. type: Deployment
  259. podSpec: {}
  260. service:
  261. service-name:
  262. enabled: true
  263. primary: true
  264. type: ClusterIP
  265. targetSelector: workload-name2
  266. ports:
  267. port-name:
  268. enabled: true
  269. primary: true
  270. port: 443
  271. asserts:
  272. - documentIndex: &deploymentDoc 0
  273. isKind:
  274. of: Deployment
  275. - documentIndex: *deploymentDoc
  276. equal:
  277. path: spec.template.spec.securityContext
  278. value:
  279. fsGroup: 568
  280. fsGroupChangePolicy: OnRootMismatch
  281. supplementalGroups: []
  282. sysctls: []
  283. - it: should pass with fsGroup 0
  284. set:
  285. securityContext:
  286. pod:
  287. fsGroup: 0
  288. workload:
  289. workload-name1:
  290. enabled: true
  291. primary: true
  292. type: Deployment
  293. podSpec: {}
  294. asserts:
  295. - documentIndex: &deploymentDoc 0
  296. isKind:
  297. of: Deployment
  298. - documentIndex: *deploymentDoc
  299. equal:
  300. path: spec.template.spec.securityContext
  301. value:
  302. fsGroup: 0
  303. fsGroupChangePolicy: OnRootMismatch
  304. supplementalGroups: []
  305. sysctls: []
  306. - it: should pass with no sysctls port_start automatically appended based on services when port is higher than 1024
  307. set:
  308. workload:
  309. workload-name1:
  310. enabled: true
  311. primary: true
  312. type: Deployment
  313. podSpec: {}
  314. service:
  315. service-name1:
  316. enabled: true
  317. primary: true
  318. type: ClusterIP
  319. ports:
  320. port-name:
  321. enabled: true
  322. primary: true
  323. port: 25000
  324. targetPort: 3000
  325. asserts:
  326. - documentIndex: &deploymentDoc 0
  327. isKind:
  328. of: Deployment
  329. - documentIndex: *deploymentDoc
  330. equal:
  331. path: spec.template.spec.securityContext
  332. value:
  333. fsGroup: 568
  334. fsGroupChangePolicy: OnRootMismatch
  335. supplementalGroups: []
  336. sysctls: []
  337. - it: should pass with with gpu assigned to primary pod
  338. set:
  339. workload:
  340. workload-name1:
  341. enabled: true
  342. primary: true
  343. type: Deployment
  344. podSpec:
  345. securityContext:
  346. supplementalGroups:
  347. - 1000
  348. workload-name2:
  349. enabled: true
  350. primary: false
  351. type: Deployment
  352. podSpec: {}
  353. scaleGPU:
  354. - gpu:
  355. nvidia: "1"
  356. asserts:
  357. - documentIndex: &deploymentDoc 0
  358. isKind:
  359. of: Deployment
  360. - documentIndex: *deploymentDoc
  361. equal:
  362. path: spec.template.spec.securityContext
  363. value:
  364. fsGroup: 568
  365. fsGroupChangePolicy: OnRootMismatch
  366. supplementalGroups:
  367. - 1000
  368. - 44
  369. - 107
  370. sysctls: []
  371. - documentIndex: &otherDeploymentDoc 1
  372. isKind:
  373. of: Deployment
  374. - documentIndex: *otherDeploymentDoc
  375. equal:
  376. path: spec.template.spec.securityContext
  377. value:
  378. fsGroup: 568
  379. fsGroupChangePolicy: OnRootMismatch
  380. supplementalGroups: []
  381. sysctls: []
  382. - it: should pass with with gpu assigned to specific pod
  383. set:
  384. workload:
  385. workload-name1:
  386. enabled: true
  387. primary: true
  388. type: Deployment
  389. podSpec:
  390. securityContext:
  391. supplementalGroups:
  392. - 1000
  393. workload-name2:
  394. enabled: true
  395. primary: false
  396. type: Deployment
  397. podSpec: {}
  398. scaleGPU:
  399. - gpu:
  400. nvidia: "1"
  401. targetSelector:
  402. workload-name1:
  403. - container-name1
  404. asserts:
  405. - documentIndex: &deploymentDoc 0
  406. isKind:
  407. of: Deployment
  408. - documentIndex: *deploymentDoc
  409. equal:
  410. path: spec.template.spec.securityContext
  411. value:
  412. fsGroup: 568
  413. fsGroupChangePolicy: OnRootMismatch
  414. supplementalGroups:
  415. - 1000
  416. - 44
  417. - 107
  418. sysctls: []
  419. - documentIndex: &otherDeploymentDoc 1
  420. isKind:
  421. of: Deployment
  422. - documentIndex: *otherDeploymentDoc
  423. equal:
  424. path: spec.template.spec.securityContext
  425. value:
  426. fsGroup: 568
  427. fsGroupChangePolicy: OnRootMismatch
  428. supplementalGroups: []
  429. sysctls: []
  430. - it: should pass with with gpu assigned to multiple pod
  431. set:
  432. workload:
  433. workload-name1:
  434. enabled: true
  435. primary: true
  436. type: Deployment
  437. podSpec:
  438. securityContext:
  439. supplementalGroups:
  440. - 1000
  441. workload-name2:
  442. enabled: true
  443. primary: false
  444. type: Deployment
  445. podSpec: {}
  446. scaleGPU:
  447. - gpu:
  448. nvidia: "1"
  449. targetSelector:
  450. workload-name1:
  451. - container-name1
  452. workload-name2:
  453. - container-name1
  454. asserts:
  455. - documentIndex: &deploymentDoc 0
  456. isKind:
  457. of: Deployment
  458. - documentIndex: *deploymentDoc
  459. equal:
  460. path: spec.template.spec.securityContext
  461. value:
  462. fsGroup: 568
  463. fsGroupChangePolicy: OnRootMismatch
  464. supplementalGroups:
  465. - 1000
  466. - 44
  467. - 107
  468. sysctls: []
  469. - documentIndex: &otherDeploymentDoc 1
  470. isKind:
  471. of: Deployment
  472. - documentIndex: *otherDeploymentDoc
  473. equal:
  474. path: spec.template.spec.securityContext
  475. value:
  476. fsGroup: 568
  477. fsGroupChangePolicy: OnRootMismatch
  478. supplementalGroups:
  479. - 44
  480. - 107
  481. sysctls: []
  482. # Failures
  483. - it: should fail with empty securityContext from "global"
  484. set:
  485. securityContext:
  486. pod: null
  487. workload:
  488. workload-name1:
  489. enabled: true
  490. primary: true
  491. type: Deployment
  492. podSpec: {}
  493. asserts:
  494. - failedTemplate:
  495. errorMessage: Pod - Expected non-empty <.Values.securityContext.pod>
  496. - it: should fail with empty fsGroup
  497. set:
  498. securityContext:
  499. pod:
  500. fsGroup: ""
  501. workload:
  502. workload-name1:
  503. enabled: true
  504. primary: true
  505. type: Deployment
  506. podSpec: {}
  507. asserts:
  508. - failedTemplate:
  509. errorMessage: Pod - Expected non-empty <fsGroup>
  510. - it: should fail with empty fsGroupChangePolicy
  511. set:
  512. securityContext:
  513. pod:
  514. fsGroup: 568
  515. fsGroupChangePolicy: ""
  516. workload:
  517. workload-name1:
  518. enabled: true
  519. primary: true
  520. type: Deployment
  521. podSpec: {}
  522. asserts:
  523. - failedTemplate:
  524. errorMessage: Pod - Expected non-empty <fsGroupChangePolicy>
  525. - it: should fail with invalid fsGroupChangePolicy
  526. set:
  527. securityContext:
  528. pod:
  529. fsGroup: 568
  530. fsGroupChangePolicy: invalid
  531. workload:
  532. workload-name1:
  533. enabled: true
  534. primary: true
  535. type: Deployment
  536. podSpec: {}
  537. asserts:
  538. - failedTemplate:
  539. errorMessage: Pod - Expected <fsGroupChangePolicy> to be one of [Always, OnRootMismatch], but got [invalid]
  540. - it: should fail with empty name in sysctls
  541. set:
  542. securityContext:
  543. pod:
  544. fsGroup: 568
  545. fsGroupChangePolicy: OnRootMismatch
  546. sysctls:
  547. - name: ""
  548. value: "some_value"
  549. workload:
  550. workload-name1:
  551. enabled: true
  552. primary: true
  553. type: Deployment
  554. podSpec: {}
  555. asserts:
  556. - failedTemplate:
  557. errorMessage: Pod - Expected non-empty <name> in <sysctls>
  558. - it: should fail with empty value in sysctls
  559. set:
  560. securityContext:
  561. pod:
  562. fsGroup: 568
  563. fsGroupChangePolicy: OnRootMismatch
  564. sysctls:
  565. - name: some_name
  566. value: ""
  567. workload:
  568. workload-name1:
  569. enabled: true
  570. primary: true
  571. type: Deployment
  572. podSpec: {}
  573. asserts:
  574. - failedTemplate:
  575. errorMessage: Pod - Expected non-empty <value> in <sysctls>