@actsecurity/iam-lens 0.1.156

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/LICENSE.txt +661 -0
  2. package/README.md +203 -0
  3. package/dist/cjs/cli.d.ts +3 -0
  4. package/dist/cjs/cli.d.ts.map +1 -0
  5. package/dist/cjs/cli.js +206 -0
  6. package/dist/cjs/cli.js.map +1 -0
  7. package/dist/cjs/collect/client.d.ts +550 -0
  8. package/dist/cjs/collect/client.d.ts.map +1 -0
  9. package/dist/cjs/collect/client.js +1119 -0
  10. package/dist/cjs/collect/client.js.map +1 -0
  11. package/dist/cjs/collect/collect.d.ts +44 -0
  12. package/dist/cjs/collect/collect.d.ts.map +1 -0
  13. package/dist/cjs/collect/collect.js +55 -0
  14. package/dist/cjs/collect/collect.js.map +1 -0
  15. package/dist/cjs/collect/inMemoryClient.d.ts +6 -0
  16. package/dist/cjs/collect/inMemoryClient.d.ts.map +1 -0
  17. package/dist/cjs/collect/inMemoryClient.js +11 -0
  18. package/dist/cjs/collect/inMemoryClient.js.map +1 -0
  19. package/dist/cjs/index.d.ts +13 -0
  20. package/dist/cjs/index.d.ts.map +1 -0
  21. package/dist/cjs/index.js +28 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/package.json +3 -0
  24. package/dist/cjs/principalCan/permission.d.ts +125 -0
  25. package/dist/cjs/principalCan/permission.d.ts.map +1 -0
  26. package/dist/cjs/principalCan/permission.js +1229 -0
  27. package/dist/cjs/principalCan/permission.js.map +1 -0
  28. package/dist/cjs/principalCan/permissionSet.d.ts +140 -0
  29. package/dist/cjs/principalCan/permissionSet.d.ts.map +1 -0
  30. package/dist/cjs/principalCan/permissionSet.js +437 -0
  31. package/dist/cjs/principalCan/permissionSet.js.map +1 -0
  32. package/dist/cjs/principalCan/principalCan.d.ts +26 -0
  33. package/dist/cjs/principalCan/principalCan.d.ts.map +1 -0
  34. package/dist/cjs/principalCan/principalCan.js +195 -0
  35. package/dist/cjs/principalCan/principalCan.js.map +1 -0
  36. package/dist/cjs/principalCan/principalConstraints.d.ts +147 -0
  37. package/dist/cjs/principalCan/principalConstraints.d.ts.map +1 -0
  38. package/dist/cjs/principalCan/principalConstraints.js +472 -0
  39. package/dist/cjs/principalCan/principalConstraints.js.map +1 -0
  40. package/dist/cjs/principalCan/resources/actions.d.ts +9 -0
  41. package/dist/cjs/principalCan/resources/actions.d.ts.map +1 -0
  42. package/dist/cjs/principalCan/resources/actions.js +27 -0
  43. package/dist/cjs/principalCan/resources/actions.js.map +1 -0
  44. package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.d.ts +31 -0
  45. package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.d.ts.map +1 -0
  46. package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.js +114 -0
  47. package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.js.map +1 -0
  48. package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.d.ts +30 -0
  49. package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.d.ts.map +1 -0
  50. package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.js +110 -0
  51. package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.js.map +1 -0
  52. package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.d.ts +18 -0
  53. package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.d.ts.map +1 -0
  54. package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.js +123 -0
  55. package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.js.map +1 -0
  56. package/dist/cjs/principalCan/resources/statements.d.ts +27 -0
  57. package/dist/cjs/principalCan/resources/statements.d.ts.map +1 -0
  58. package/dist/cjs/principalCan/resources/statements.js +119 -0
  59. package/dist/cjs/principalCan/resources/statements.js.map +1 -0
  60. package/dist/cjs/principalIndex/makePrincipalIndex.d.ts +8 -0
  61. package/dist/cjs/principalIndex/makePrincipalIndex.d.ts.map +1 -0
  62. package/dist/cjs/principalIndex/makePrincipalIndex.js +105 -0
  63. package/dist/cjs/principalIndex/makePrincipalIndex.js.map +1 -0
  64. package/dist/cjs/principals.d.ts +54 -0
  65. package/dist/cjs/principals.d.ts.map +1 -0
  66. package/dist/cjs/principals.js +143 -0
  67. package/dist/cjs/principals.js.map +1 -0
  68. package/dist/cjs/resources.d.ts +32 -0
  69. package/dist/cjs/resources.d.ts.map +1 -0
  70. package/dist/cjs/resources.js +71 -0
  71. package/dist/cjs/resources.js.map +1 -0
  72. package/dist/cjs/simulate/contextKeys.d.ts +68 -0
  73. package/dist/cjs/simulate/contextKeys.d.ts.map +1 -0
  74. package/dist/cjs/simulate/contextKeys.js +293 -0
  75. package/dist/cjs/simulate/contextKeys.js.map +1 -0
  76. package/dist/cjs/simulate/simulate.d.ts +72 -0
  77. package/dist/cjs/simulate/simulate.d.ts.map +1 -0
  78. package/dist/cjs/simulate/simulate.js +296 -0
  79. package/dist/cjs/simulate/simulate.js.map +1 -0
  80. package/dist/cjs/test-datasets/testClient.d.ts +17 -0
  81. package/dist/cjs/test-datasets/testClient.d.ts.map +1 -0
  82. package/dist/cjs/test-datasets/testClient.js +58 -0
  83. package/dist/cjs/test-datasets/testClient.js.map +1 -0
  84. package/dist/cjs/utils/arn.d.ts +22 -0
  85. package/dist/cjs/utils/arn.d.ts.map +1 -0
  86. package/dist/cjs/utils/arn.js +49 -0
  87. package/dist/cjs/utils/arn.js.map +1 -0
  88. package/dist/cjs/utils/bitset.d.ts +45 -0
  89. package/dist/cjs/utils/bitset.d.ts.map +1 -0
  90. package/dist/cjs/utils/bitset.js +149 -0
  91. package/dist/cjs/utils/bitset.js.map +1 -0
  92. package/dist/cjs/utils/dynamicImport.d.ts +31 -0
  93. package/dist/cjs/utils/dynamicImport.d.ts.map +1 -0
  94. package/dist/cjs/utils/dynamicImport.js +64 -0
  95. package/dist/cjs/utils/dynamicImport.js.map +1 -0
  96. package/dist/cjs/utils/packageVersion.d.ts +5 -0
  97. package/dist/cjs/utils/packageVersion.d.ts.map +1 -0
  98. package/dist/cjs/utils/packageVersion.js +25 -0
  99. package/dist/cjs/utils/packageVersion.js.map +1 -0
  100. package/dist/cjs/utils/readPackageFile.d.ts +3 -0
  101. package/dist/cjs/utils/readPackageFile.d.ts.map +1 -0
  102. package/dist/cjs/utils/readPackageFile.js +16 -0
  103. package/dist/cjs/utils/readPackageFile.js.map +1 -0
  104. package/dist/cjs/utils/s3Abac.d.ts +3 -0
  105. package/dist/cjs/utils/s3Abac.d.ts.map +1 -0
  106. package/dist/cjs/utils/s3Abac.js +5 -0
  107. package/dist/cjs/utils/s3Abac.js.map +1 -0
  108. package/dist/cjs/utils/stringOrFileArgument.d.ts +9 -0
  109. package/dist/cjs/utils/stringOrFileArgument.d.ts.map +1 -0
  110. package/dist/cjs/utils/stringOrFileArgument.js +25 -0
  111. package/dist/cjs/utils/stringOrFileArgument.js.map +1 -0
  112. package/dist/cjs/utils/sts.d.ts +2 -0
  113. package/dist/cjs/utils/sts.d.ts.map +1 -0
  114. package/dist/cjs/utils/sts.js +9 -0
  115. package/dist/cjs/utils/sts.js.map +1 -0
  116. package/dist/cjs/utils/testUtils.d.ts +56 -0
  117. package/dist/cjs/utils/testUtils.d.ts.map +1 -0
  118. package/dist/cjs/utils/testUtils.js +95 -0
  119. package/dist/cjs/utils/testUtils.js.map +1 -0
  120. package/dist/cjs/utils/workerScript.d.ts +8 -0
  121. package/dist/cjs/utils/workerScript.d.ts.map +1 -0
  122. package/dist/cjs/utils/workerScript.js +23 -0
  123. package/dist/cjs/utils/workerScript.js.map +1 -0
  124. package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts +73 -0
  125. package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -0
  126. package/dist/cjs/whoCan/WhoCanMainThreadWorker.js +80 -0
  127. package/dist/cjs/whoCan/WhoCanMainThreadWorker.js.map +1 -0
  128. package/dist/cjs/whoCan/WhoCanProcessor.d.ts +400 -0
  129. package/dist/cjs/whoCan/WhoCanProcessor.d.ts.map +1 -0
  130. package/dist/cjs/whoCan/WhoCanProcessor.js +1088 -0
  131. package/dist/cjs/whoCan/WhoCanProcessor.js.map +1 -0
  132. package/dist/cjs/whoCan/WhoCanWorker.d.ts +87 -0
  133. package/dist/cjs/whoCan/WhoCanWorker.d.ts.map +1 -0
  134. package/dist/cjs/whoCan/WhoCanWorker.js +201 -0
  135. package/dist/cjs/whoCan/WhoCanWorker.js.map +1 -0
  136. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.d.ts +2 -0
  137. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.d.ts.map +1 -0
  138. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js +189 -0
  139. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js.map +1 -0
  140. package/dist/cjs/whoCan/principalArnFilter.d.ts +84 -0
  141. package/dist/cjs/whoCan/principalArnFilter.d.ts.map +1 -0
  142. package/dist/cjs/whoCan/principalArnFilter.js +258 -0
  143. package/dist/cjs/whoCan/principalArnFilter.js.map +1 -0
  144. package/dist/cjs/whoCan/principalScope.d.ts +35 -0
  145. package/dist/cjs/whoCan/principalScope.d.ts.map +1 -0
  146. package/dist/cjs/whoCan/principalScope.js +104 -0
  147. package/dist/cjs/whoCan/principalScope.js.map +1 -0
  148. package/dist/cjs/whoCan/requestAnalysis.d.ts +73 -0
  149. package/dist/cjs/whoCan/requestAnalysis.d.ts.map +1 -0
  150. package/dist/cjs/whoCan/requestAnalysis.js +87 -0
  151. package/dist/cjs/whoCan/requestAnalysis.js.map +1 -0
  152. package/dist/cjs/whoCan/untrustingActions.d.ts +7 -0
  153. package/dist/cjs/whoCan/untrustingActions.d.ts.map +1 -0
  154. package/dist/cjs/whoCan/untrustingActions.js +30 -0
  155. package/dist/cjs/whoCan/untrustingActions.js.map +1 -0
  156. package/dist/cjs/whoCan/whoCan.d.ts +295 -0
  157. package/dist/cjs/whoCan/whoCan.d.ts.map +1 -0
  158. package/dist/cjs/whoCan/whoCan.js +574 -0
  159. package/dist/cjs/whoCan/whoCan.js.map +1 -0
  160. package/dist/cjs/whoCan/workerBootstrapPlugin.d.ts +17 -0
  161. package/dist/cjs/whoCan/workerBootstrapPlugin.d.ts.map +1 -0
  162. package/dist/cjs/whoCan/workerBootstrapPlugin.js +3 -0
  163. package/dist/cjs/whoCan/workerBootstrapPlugin.js.map +1 -0
  164. package/dist/cjs/workers/ArrayStreamingWorkQueue.d.ts +15 -0
  165. package/dist/cjs/workers/ArrayStreamingWorkQueue.d.ts.map +1 -0
  166. package/dist/cjs/workers/ArrayStreamingWorkQueue.js +35 -0
  167. package/dist/cjs/workers/ArrayStreamingWorkQueue.js.map +1 -0
  168. package/dist/cjs/workers/JobRunner.d.ts +47 -0
  169. package/dist/cjs/workers/JobRunner.d.ts.map +1 -0
  170. package/dist/cjs/workers/JobRunner.js +101 -0
  171. package/dist/cjs/workers/JobRunner.js.map +1 -0
  172. package/dist/cjs/workers/RingQueue.d.ts +14 -0
  173. package/dist/cjs/workers/RingQueue.d.ts.map +1 -0
  174. package/dist/cjs/workers/RingQueue.js +43 -0
  175. package/dist/cjs/workers/RingQueue.js.map +1 -0
  176. package/dist/cjs/workers/SharedArrayBufferMainCache.d.ts +10 -0
  177. package/dist/cjs/workers/SharedArrayBufferMainCache.d.ts.map +1 -0
  178. package/dist/cjs/workers/SharedArrayBufferMainCache.js +37 -0
  179. package/dist/cjs/workers/SharedArrayBufferMainCache.js.map +1 -0
  180. package/dist/cjs/workers/SharedArrayBufferWorkerCache.d.ts +10 -0
  181. package/dist/cjs/workers/SharedArrayBufferWorkerCache.d.ts.map +1 -0
  182. package/dist/cjs/workers/SharedArrayBufferWorkerCache.js +49 -0
  183. package/dist/cjs/workers/SharedArrayBufferWorkerCache.js.map +1 -0
  184. package/dist/cjs/workers/StreamingWorkQueue.d.ts +18 -0
  185. package/dist/cjs/workers/StreamingWorkQueue.d.ts.map +1 -0
  186. package/dist/cjs/workers/StreamingWorkQueue.js +67 -0
  187. package/dist/cjs/workers/StreamingWorkQueue.js.map +1 -0
  188. package/dist/cjs/workers/buffers.d.ts +4 -0
  189. package/dist/cjs/workers/buffers.d.ts.map +1 -0
  190. package/dist/cjs/workers/buffers.js +26 -0
  191. package/dist/cjs/workers/buffers.js.map +1 -0
  192. package/dist/esm/cli.d.ts +3 -0
  193. package/dist/esm/cli.d.ts.map +1 -0
  194. package/dist/esm/cli.js +204 -0
  195. package/dist/esm/cli.js.map +1 -0
  196. package/dist/esm/collect/client.d.ts +550 -0
  197. package/dist/esm/collect/client.d.ts.map +1 -0
  198. package/dist/esm/collect/client.js +1114 -0
  199. package/dist/esm/collect/client.js.map +1 -0
  200. package/dist/esm/collect/collect.d.ts +44 -0
  201. package/dist/esm/collect/collect.d.ts.map +1 -0
  202. package/dist/esm/collect/collect.js +51 -0
  203. package/dist/esm/collect/collect.js.map +1 -0
  204. package/dist/esm/collect/inMemoryClient.d.ts +6 -0
  205. package/dist/esm/collect/inMemoryClient.d.ts.map +1 -0
  206. package/dist/esm/collect/inMemoryClient.js +8 -0
  207. package/dist/esm/collect/inMemoryClient.js.map +1 -0
  208. package/dist/esm/index.d.ts +13 -0
  209. package/dist/esm/index.d.ts.map +1 -0
  210. package/dist/esm/index.js +11 -0
  211. package/dist/esm/index.js.map +1 -0
  212. package/dist/esm/package.json +3 -0
  213. package/dist/esm/principalCan/permission.d.ts +125 -0
  214. package/dist/esm/principalCan/permission.d.ts.map +1 -0
  215. package/dist/esm/principalCan/permission.js +1212 -0
  216. package/dist/esm/principalCan/permission.js.map +1 -0
  217. package/dist/esm/principalCan/permissionSet.d.ts +140 -0
  218. package/dist/esm/principalCan/permissionSet.d.ts.map +1 -0
  219. package/dist/esm/principalCan/permissionSet.js +429 -0
  220. package/dist/esm/principalCan/permissionSet.js.map +1 -0
  221. package/dist/esm/principalCan/principalCan.d.ts +26 -0
  222. package/dist/esm/principalCan/principalCan.d.ts.map +1 -0
  223. package/dist/esm/principalCan/principalCan.js +193 -0
  224. package/dist/esm/principalCan/principalCan.js.map +1 -0
  225. package/dist/esm/principalCan/principalConstraints.d.ts +147 -0
  226. package/dist/esm/principalCan/principalConstraints.d.ts.map +1 -0
  227. package/dist/esm/principalCan/principalConstraints.js +456 -0
  228. package/dist/esm/principalCan/principalConstraints.js.map +1 -0
  229. package/dist/esm/principalCan/resources/actions.d.ts +9 -0
  230. package/dist/esm/principalCan/resources/actions.d.ts.map +1 -0
  231. package/dist/esm/principalCan/resources/actions.js +24 -0
  232. package/dist/esm/principalCan/resources/actions.js.map +1 -0
  233. package/dist/esm/principalCan/resources/resourceTypes/iamRoles.d.ts +31 -0
  234. package/dist/esm/principalCan/resources/resourceTypes/iamRoles.d.ts.map +1 -0
  235. package/dist/esm/principalCan/resources/resourceTypes/iamRoles.js +110 -0
  236. package/dist/esm/principalCan/resources/resourceTypes/iamRoles.js.map +1 -0
  237. package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.d.ts +30 -0
  238. package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.d.ts.map +1 -0
  239. package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.js +106 -0
  240. package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.js.map +1 -0
  241. package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.d.ts +18 -0
  242. package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.d.ts.map +1 -0
  243. package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.js +120 -0
  244. package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.js.map +1 -0
  245. package/dist/esm/principalCan/resources/statements.d.ts +27 -0
  246. package/dist/esm/principalCan/resources/statements.d.ts.map +1 -0
  247. package/dist/esm/principalCan/resources/statements.js +117 -0
  248. package/dist/esm/principalCan/resources/statements.js.map +1 -0
  249. package/dist/esm/principalIndex/makePrincipalIndex.d.ts +8 -0
  250. package/dist/esm/principalIndex/makePrincipalIndex.d.ts.map +1 -0
  251. package/dist/esm/principalIndex/makePrincipalIndex.js +104 -0
  252. package/dist/esm/principalIndex/makePrincipalIndex.js.map +1 -0
  253. package/dist/esm/principals.d.ts +54 -0
  254. package/dist/esm/principals.d.ts.map +1 -0
  255. package/dist/esm/principals.js +133 -0
  256. package/dist/esm/principals.js.map +1 -0
  257. package/dist/esm/resources.d.ts +32 -0
  258. package/dist/esm/resources.d.ts.map +1 -0
  259. package/dist/esm/resources.js +69 -0
  260. package/dist/esm/resources.js.map +1 -0
  261. package/dist/esm/simulate/contextKeys.d.ts +68 -0
  262. package/dist/esm/simulate/contextKeys.d.ts.map +1 -0
  263. package/dist/esm/simulate/contextKeys.js +287 -0
  264. package/dist/esm/simulate/contextKeys.js.map +1 -0
  265. package/dist/esm/simulate/simulate.d.ts +72 -0
  266. package/dist/esm/simulate/simulate.d.ts.map +1 -0
  267. package/dist/esm/simulate/simulate.js +295 -0
  268. package/dist/esm/simulate/simulate.js.map +1 -0
  269. package/dist/esm/test-datasets/testClient.d.ts +17 -0
  270. package/dist/esm/test-datasets/testClient.d.ts.map +1 -0
  271. package/dist/esm/test-datasets/testClient.js +56 -0
  272. package/dist/esm/test-datasets/testClient.js.map +1 -0
  273. package/dist/esm/utils/arn.d.ts +22 -0
  274. package/dist/esm/utils/arn.d.ts.map +1 -0
  275. package/dist/esm/utils/arn.js +43 -0
  276. package/dist/esm/utils/arn.js.map +1 -0
  277. package/dist/esm/utils/bitset.d.ts +45 -0
  278. package/dist/esm/utils/bitset.d.ts.map +1 -0
  279. package/dist/esm/utils/bitset.js +141 -0
  280. package/dist/esm/utils/bitset.js.map +1 -0
  281. package/dist/esm/utils/dynamicImport.d.ts +31 -0
  282. package/dist/esm/utils/dynamicImport.d.ts.map +1 -0
  283. package/dist/esm/utils/dynamicImport.js +60 -0
  284. package/dist/esm/utils/dynamicImport.js.map +1 -0
  285. package/dist/esm/utils/packageVersion.d.ts +5 -0
  286. package/dist/esm/utils/packageVersion.d.ts.map +1 -0
  287. package/dist/esm/utils/packageVersion.js +22 -0
  288. package/dist/esm/utils/packageVersion.js.map +1 -0
  289. package/dist/esm/utils/readPackageFile.d.ts +3 -0
  290. package/dist/esm/utils/readPackageFile.d.ts.map +1 -0
  291. package/dist/esm/utils/readPackageFile.js +15 -0
  292. package/dist/esm/utils/readPackageFile.js.map +1 -0
  293. package/dist/esm/utils/readPackageFileEsm.d.ts.map +1 -0
  294. package/dist/esm/utils/s3Abac.d.ts +3 -0
  295. package/dist/esm/utils/s3Abac.d.ts.map +1 -0
  296. package/dist/esm/utils/s3Abac.js +2 -0
  297. package/dist/esm/utils/s3Abac.js.map +1 -0
  298. package/dist/esm/utils/stringOrFileArgument.d.ts +9 -0
  299. package/dist/esm/utils/stringOrFileArgument.d.ts.map +1 -0
  300. package/dist/esm/utils/stringOrFileArgument.js +22 -0
  301. package/dist/esm/utils/stringOrFileArgument.js.map +1 -0
  302. package/dist/esm/utils/sts.d.ts +2 -0
  303. package/dist/esm/utils/sts.d.ts.map +1 -0
  304. package/dist/esm/utils/sts.js +6 -0
  305. package/dist/esm/utils/sts.js.map +1 -0
  306. package/dist/esm/utils/testUtils.d.ts +56 -0
  307. package/dist/esm/utils/testUtils.d.ts.map +1 -0
  308. package/dist/esm/utils/testUtils.js +90 -0
  309. package/dist/esm/utils/testUtils.js.map +1 -0
  310. package/dist/esm/utils/workerScript.d.ts +8 -0
  311. package/dist/esm/utils/workerScript.d.ts.map +1 -0
  312. package/dist/esm/utils/workerScript.js +18 -0
  313. package/dist/esm/utils/workerScript.js.map +1 -0
  314. package/dist/esm/utils/workerScriptEsm.d.ts.map +1 -0
  315. package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts +73 -0
  316. package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -0
  317. package/dist/esm/whoCan/WhoCanMainThreadWorker.js +81 -0
  318. package/dist/esm/whoCan/WhoCanMainThreadWorker.js.map +1 -0
  319. package/dist/esm/whoCan/WhoCanProcessor.d.ts +400 -0
  320. package/dist/esm/whoCan/WhoCanProcessor.d.ts.map +1 -0
  321. package/dist/esm/whoCan/WhoCanProcessor.js +1080 -0
  322. package/dist/esm/whoCan/WhoCanProcessor.js.map +1 -0
  323. package/dist/esm/whoCan/WhoCanWorker.d.ts +87 -0
  324. package/dist/esm/whoCan/WhoCanWorker.d.ts.map +1 -0
  325. package/dist/esm/whoCan/WhoCanWorker.js +198 -0
  326. package/dist/esm/whoCan/WhoCanWorker.js.map +1 -0
  327. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.d.ts +2 -0
  328. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.d.ts.map +1 -0
  329. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js +193 -0
  330. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js.map +1 -0
  331. package/dist/esm/whoCan/principalArnFilter.d.ts +84 -0
  332. package/dist/esm/whoCan/principalArnFilter.d.ts.map +1 -0
  333. package/dist/esm/whoCan/principalArnFilter.js +253 -0
  334. package/dist/esm/whoCan/principalArnFilter.js.map +1 -0
  335. package/dist/esm/whoCan/principalScope.d.ts +35 -0
  336. package/dist/esm/whoCan/principalScope.d.ts.map +1 -0
  337. package/dist/esm/whoCan/principalScope.js +102 -0
  338. package/dist/esm/whoCan/principalScope.js.map +1 -0
  339. package/dist/esm/whoCan/requestAnalysis.d.ts +73 -0
  340. package/dist/esm/whoCan/requestAnalysis.d.ts.map +1 -0
  341. package/dist/esm/whoCan/requestAnalysis.js +83 -0
  342. package/dist/esm/whoCan/requestAnalysis.js.map +1 -0
  343. package/dist/esm/whoCan/untrustingActions.d.ts +7 -0
  344. package/dist/esm/whoCan/untrustingActions.d.ts.map +1 -0
  345. package/dist/esm/whoCan/untrustingActions.js +27 -0
  346. package/dist/esm/whoCan/untrustingActions.js.map +1 -0
  347. package/dist/esm/whoCan/whoCan.d.ts +295 -0
  348. package/dist/esm/whoCan/whoCan.d.ts.map +1 -0
  349. package/dist/esm/whoCan/whoCan.js +571 -0
  350. package/dist/esm/whoCan/whoCan.js.map +1 -0
  351. package/dist/esm/whoCan/workerBootstrapPlugin.d.ts +17 -0
  352. package/dist/esm/whoCan/workerBootstrapPlugin.d.ts.map +1 -0
  353. package/dist/esm/whoCan/workerBootstrapPlugin.js +2 -0
  354. package/dist/esm/whoCan/workerBootstrapPlugin.js.map +1 -0
  355. package/dist/esm/workers/ArrayStreamingWorkQueue.d.ts +15 -0
  356. package/dist/esm/workers/ArrayStreamingWorkQueue.d.ts.map +1 -0
  357. package/dist/esm/workers/ArrayStreamingWorkQueue.js +31 -0
  358. package/dist/esm/workers/ArrayStreamingWorkQueue.js.map +1 -0
  359. package/dist/esm/workers/JobRunner.d.ts +47 -0
  360. package/dist/esm/workers/JobRunner.d.ts.map +1 -0
  361. package/dist/esm/workers/JobRunner.js +94 -0
  362. package/dist/esm/workers/JobRunner.js.map +1 -0
  363. package/dist/esm/workers/RingQueue.d.ts +14 -0
  364. package/dist/esm/workers/RingQueue.d.ts.map +1 -0
  365. package/dist/esm/workers/RingQueue.js +36 -0
  366. package/dist/esm/workers/RingQueue.js.map +1 -0
  367. package/dist/esm/workers/SharedArrayBufferMainCache.d.ts +10 -0
  368. package/dist/esm/workers/SharedArrayBufferMainCache.d.ts.map +1 -0
  369. package/dist/esm/workers/SharedArrayBufferMainCache.js +34 -0
  370. package/dist/esm/workers/SharedArrayBufferMainCache.js.map +1 -0
  371. package/dist/esm/workers/SharedArrayBufferWorkerCache.d.ts +10 -0
  372. package/dist/esm/workers/SharedArrayBufferWorkerCache.d.ts.map +1 -0
  373. package/dist/esm/workers/SharedArrayBufferWorkerCache.js +46 -0
  374. package/dist/esm/workers/SharedArrayBufferWorkerCache.js.map +1 -0
  375. package/dist/esm/workers/StreamingWorkQueue.d.ts +18 -0
  376. package/dist/esm/workers/StreamingWorkQueue.d.ts.map +1 -0
  377. package/dist/esm/workers/StreamingWorkQueue.js +61 -0
  378. package/dist/esm/workers/StreamingWorkQueue.js.map +1 -0
  379. package/dist/esm/workers/buffers.d.ts +4 -0
  380. package/dist/esm/workers/buffers.d.ts.map +1 -0
  381. package/dist/esm/workers/buffers.js +21 -0
  382. package/dist/esm/workers/buffers.js.map +1 -0
  383. package/package.json +132 -0
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stsRoleActions = stsRoleActions;
4
+ exports.allIamRolesAssumeRolePermissionSets = allIamRolesAssumeRolePermissionSets;
5
+ exports.iamRolesSameAccount = iamRolesSameAccount;
6
+ const iam_expand_1 = require("@actsecurity/iam-expand");
7
+ const iam_policy_1 = require("@actsecurity/iam-policy");
8
+ const iam_utils_1 = require("@actsecurity/iam-utils");
9
+ const permission_js_1 = require("../../permission.js");
10
+ const permissionSet_js_1 = require("../../permissionSet.js");
11
+ const statements_js_1 = require("../statements.js");
12
+ /**
13
+ * Get the list of IAM Actions to assume a role.
14
+ *
15
+ * @returns the list of IAM Actions to assume a role
16
+ */
17
+ async function stsRoleActions() {
18
+ const serviceActions = await (0, iam_expand_1.expandIamActions)('sts:AssumeRole*');
19
+ const actions = serviceActions.map((a) => a.split(':').at(1));
20
+ return [...actions, 'SetContext', 'TagSession', 'SetSourceIdentity'];
21
+ }
22
+ /**
23
+ * Get the permission sets for all IAM roles to assume a role.
24
+ *
25
+ * @returns the permission sets for all IAM roles to assume a role
26
+ */
27
+ async function allIamRolesAssumeRolePermissionSets() {
28
+ const assumeRoleActions = await stsRoleActions();
29
+ const allowPerimeter = new permissionSet_js_1.PermissionSet('Allow');
30
+ const denyPerimeter = new permissionSet_js_1.PermissionSet('Deny');
31
+ for (const action of assumeRoleActions) {
32
+ allowPerimeter.addPermission(new permission_js_1.Permission('Allow', 'sts', action, ['*'], undefined, undefined));
33
+ denyPerimeter.addPermission(new permission_js_1.Permission('Deny', 'sts', action, ['*'], undefined, undefined));
34
+ }
35
+ return { roleAllows: allowPerimeter, roleDenies: denyPerimeter };
36
+ }
37
+ /**
38
+ * Get the permissions a principal has to assume roles in the same account.
39
+ * This will only return permissions for sts:AssumeRole and not other assume role actions.
40
+ *
41
+ * @param collectClient the client to use to collect IAM information
42
+ * @param principal the principal to check permissions for
43
+ * @returns the permissions the principal has to assume roles in the same account
44
+ */
45
+ async function iamRolesSameAccount(collectClient, principal) {
46
+ const principalArnParts = (0, iam_utils_1.splitArnParts)(principal);
47
+ const principalAccountId = principalArnParts.accountId;
48
+ const assumeRoleActions = ['AssumeRole', 'SetContext', 'TagSession', 'SetSourceIdentity'];
49
+ const allRoles = await collectClient.listResources(principalAccountId, 'iam', 'role', undefined);
50
+ const accountAllows = [];
51
+ const principalAllows = [];
52
+ const denies = [];
53
+ for (const roleArn of allRoles) {
54
+ const rawPolicy = await collectClient.getResourcePolicyForArn(roleArn, principalAccountId);
55
+ if (!rawPolicy) {
56
+ continue;
57
+ }
58
+ const allowPerimeter = new permissionSet_js_1.PermissionSet('Allow');
59
+ const denyPerimeter = new permissionSet_js_1.PermissionSet('Deny');
60
+ for (const action of assumeRoleActions) {
61
+ allowPerimeter.addPermission(new permission_js_1.Permission('Allow', 'sts', action, [roleArn], undefined, undefined));
62
+ denyPerimeter.addPermission(new permission_js_1.Permission('Deny', 'sts', action, [roleArn], undefined, undefined));
63
+ }
64
+ const roleAcctAllow = new permissionSet_js_1.PermissionSet('Allow');
65
+ const rolePrincipalAllow = new permissionSet_js_1.PermissionSet('Allow');
66
+ const roleDeny = new permissionSet_js_1.PermissionSet('Deny');
67
+ addRoleArnToStatements(rawPolicy, roleArn);
68
+ const trustPolicy = (0, iam_policy_1.loadPolicy)(rawPolicy);
69
+ for (const statement of trustPolicy.statements()) {
70
+ const applies = await (0, statements_js_1.statementAppliesToPrincipal)(statement, principal, collectClient);
71
+ if (applies === 'PrincipalMatch') {
72
+ if (statement.isAllow()) {
73
+ await (0, permissionSet_js_1.addStatementToPermissionSet)(statement, rolePrincipalAllow);
74
+ }
75
+ else {
76
+ await (0, permissionSet_js_1.addStatementToPermissionSet)(statement, roleDeny);
77
+ }
78
+ }
79
+ else if (applies === 'AccountMatch' && statement.isAllow()) {
80
+ await (0, permissionSet_js_1.addStatementToPermissionSet)(statement, roleAcctAllow);
81
+ }
82
+ }
83
+ const effectivePrincipalAllow = rolePrincipalAllow.intersection(allowPerimeter);
84
+ const effectiveAccountAllow = roleAcctAllow.intersection(allowPerimeter);
85
+ const effectiveDeny = roleDeny.intersection(denyPerimeter);
86
+ if (!effectivePrincipalAllow.isEmpty()) {
87
+ principalAllows.push(effectivePrincipalAllow);
88
+ }
89
+ if (!effectiveAccountAllow.isEmpty()) {
90
+ accountAllows.push(effectiveAccountAllow);
91
+ }
92
+ if (!effectiveDeny.isEmpty()) {
93
+ denies.push(effectiveDeny);
94
+ }
95
+ }
96
+ return {
97
+ accountAllows,
98
+ principalAllows,
99
+ denies
100
+ };
101
+ }
102
+ function addRoleArnToStatements(policy, roleArn) {
103
+ const policyDoc = (0, iam_policy_1.isValidatedPolicy)(policy) ? policy.policyDocument : policy;
104
+ const statement = policyDoc.Statement;
105
+ if (Array.isArray(statement)) {
106
+ for (const stmt of statement) {
107
+ stmt.Resource = [roleArn];
108
+ }
109
+ }
110
+ else if (statement) {
111
+ statement.Resource = [roleArn];
112
+ }
113
+ }
114
+ //# sourceMappingURL=iamRoles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iamRoles.js","sourceRoot":"","sources":["../../../../../src/principalCan/resources/resourceTypes/iamRoles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { IamCollectClient } from '../../../collect/client.js';
2
+ import { PermissionSet } from '../../permissionSet.js';
3
+ /**
4
+ * Get the list of KMS actions.
5
+ *
6
+ * @returns All options available for KMS keys.
7
+ */
8
+ export declare function kmsKeyActions(): Promise<string[]>;
9
+ /**
10
+ * Create permission sets that include all KMS key actions on all resources.
11
+ *
12
+ * @returns Permission sets that include all KMS key actions on all resources both for Allow and Deny.
13
+ */
14
+ export declare function allKmsKeysAllActionsPermissionSets(): Promise<{
15
+ keyAllows: PermissionSet;
16
+ keyDenies: PermissionSet;
17
+ }>;
18
+ /**
19
+ * Get the permissions a principal has on KMS keys in the same account.
20
+ *
21
+ * @param collectClient the IAM collect client to use for retrieving policies.
22
+ * @param principal the principal to check permissions for.
23
+ * @returns the permissions the principal has on KMS keys in the same account.
24
+ */
25
+ export declare function kmsKeysSameAccount(collectClient: IamCollectClient, principal: string): Promise<{
26
+ accountAllows: PermissionSet[];
27
+ principalAllows: PermissionSet[];
28
+ denies: PermissionSet[];
29
+ }>;
30
+ //# sourceMappingURL=kmsKeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kmsKeys.d.ts","sourceRoot":"","sources":["../../../../../src/principalCan/resources/resourceTypes/kmsKeys.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAE7D,OAAO,EAA+B,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAInF;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAEvD;AAED;;;;GAIG;AACH,wBAAsB,kCAAkC,IAAI,OAAO,CAAC;IAClE,SAAS,EAAE,aAAa,CAAA;IACxB,SAAS,EAAE,aAAa,CAAA;CACzB,CAAC,CAYD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,gBAAgB,EAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IACT,aAAa,EAAE,aAAa,EAAE,CAAA;IAC9B,eAAe,EAAE,aAAa,EAAE,CAAA;IAChC,MAAM,EAAE,aAAa,EAAE,CAAA;CACxB,CAAC,CAsED"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kmsKeyActions = kmsKeyActions;
4
+ exports.allKmsKeysAllActionsPermissionSets = allKmsKeysAllActionsPermissionSets;
5
+ exports.kmsKeysSameAccount = kmsKeysSameAccount;
6
+ const iam_policy_1 = require("@actsecurity/iam-policy");
7
+ const iam_utils_1 = require("@actsecurity/iam-utils");
8
+ const permission_js_1 = require("../../permission.js");
9
+ const permissionSet_js_1 = require("../../permissionSet.js");
10
+ const actions_js_1 = require("../actions.js");
11
+ const statements_js_1 = require("../statements.js");
12
+ /**
13
+ * Get the list of KMS actions.
14
+ *
15
+ * @returns All options available for KMS keys.
16
+ */
17
+ async function kmsKeyActions() {
18
+ return (0, actions_js_1.actionsForResourceType)('kms', 'key');
19
+ }
20
+ /**
21
+ * Create permission sets that include all KMS key actions on all resources.
22
+ *
23
+ * @returns Permission sets that include all KMS key actions on all resources both for Allow and Deny.
24
+ */
25
+ async function allKmsKeysAllActionsPermissionSets() {
26
+ const keyActions = await kmsKeyActions();
27
+ const allowPerimeter = new permissionSet_js_1.PermissionSet('Allow');
28
+ const denyPerimeter = new permissionSet_js_1.PermissionSet('Deny');
29
+ for (const action of keyActions) {
30
+ allowPerimeter.addPermission(new permission_js_1.Permission('Allow', 'kms', action, ['*'], undefined, undefined));
31
+ denyPerimeter.addPermission(new permission_js_1.Permission('Deny', 'kms', action, ['*'], undefined, undefined));
32
+ }
33
+ return { keyAllows: allowPerimeter, keyDenies: denyPerimeter };
34
+ }
35
+ /**
36
+ * Get the permissions a principal has on KMS keys in the same account.
37
+ *
38
+ * @param collectClient the IAM collect client to use for retrieving policies.
39
+ * @param principal the principal to check permissions for.
40
+ * @returns the permissions the principal has on KMS keys in the same account.
41
+ */
42
+ async function kmsKeysSameAccount(collectClient, principal) {
43
+ const principalArnParts = (0, iam_utils_1.splitArnParts)(principal);
44
+ const principalAccountId = principalArnParts.accountId;
45
+ const keyActions = await kmsKeyActions();
46
+ const allKeys = await collectClient.listResources(principalAccountId, 'kms', 'key', '*');
47
+ const accountAllows = [];
48
+ const principalAllows = [];
49
+ const denies = [];
50
+ for (const keyArn of allKeys) {
51
+ const rawKeyPolicy = await collectClient.getResourcePolicyForArn(keyArn, principalAccountId);
52
+ if (!rawKeyPolicy) {
53
+ continue;
54
+ }
55
+ const allowPerimeter = new permissionSet_js_1.PermissionSet('Allow');
56
+ const denyPerimeter = new permissionSet_js_1.PermissionSet('Deny');
57
+ for (const action of keyActions) {
58
+ allowPerimeter.addPermission(new permission_js_1.Permission('Allow', 'kms', action, [keyArn], undefined, undefined));
59
+ denyPerimeter.addPermission(new permission_js_1.Permission('Deny', 'kms', action, [keyArn], undefined, undefined));
60
+ }
61
+ const keyAcctAllow = new permissionSet_js_1.PermissionSet('Allow');
62
+ const keyPrincipalAllow = new permissionSet_js_1.PermissionSet('Allow');
63
+ const keyDeny = new permissionSet_js_1.PermissionSet('Deny');
64
+ const keyPolicy = (0, iam_policy_1.loadPolicy)(rawKeyPolicy);
65
+ for (const statement of keyPolicy.statements()) {
66
+ const applies = await (0, statements_js_1.statementAppliesToPrincipal)(statement, principal, collectClient);
67
+ const hasViaService = statementHasViaServiceCondition(statement);
68
+ if (applies === 'PrincipalMatch') {
69
+ if (statement.isAllow()) {
70
+ if (!hasViaService) {
71
+ await (0, permissionSet_js_1.addStatementToPermissionSet)(statement, keyPrincipalAllow);
72
+ }
73
+ }
74
+ else {
75
+ await (0, permissionSet_js_1.addStatementToPermissionSet)(statement, keyDeny);
76
+ }
77
+ }
78
+ else if (applies === 'AccountMatch' && statement.isAllow() && !hasViaService) {
79
+ await (0, permissionSet_js_1.addStatementToPermissionSet)(statement, keyAcctAllow);
80
+ }
81
+ }
82
+ const effectivePrincipalAllow = keyPrincipalAllow.intersection(allowPerimeter);
83
+ const effectiveAccountAllow = keyAcctAllow.intersection(allowPerimeter);
84
+ const effectiveDeny = keyDeny.intersection(denyPerimeter);
85
+ if (!effectivePrincipalAllow.isEmpty()) {
86
+ principalAllows.push(effectivePrincipalAllow);
87
+ }
88
+ if (!effectiveAccountAllow.isEmpty()) {
89
+ accountAllows.push(effectiveAccountAllow);
90
+ }
91
+ if (!effectiveDeny.isEmpty()) {
92
+ denies.push(effectiveDeny);
93
+ }
94
+ }
95
+ return {
96
+ accountAllows,
97
+ principalAllows,
98
+ denies
99
+ };
100
+ }
101
+ /**
102
+ * Check if the statement has the condition key kms:ViaService.
103
+ *
104
+ * @param statement the statement to check
105
+ * @returns true if the statement has a kms:ViaService condition, false otherwise
106
+ */
107
+ function statementHasViaServiceCondition(statement) {
108
+ return statement.conditions().some((c) => c.conditionKey().toLowerCase() === 'kms:viaservice');
109
+ }
110
+ //# sourceMappingURL=kmsKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kmsKeys.js","sourceRoot":"","sources":["../../../../../src/principalCan/resources/resourceTypes/kmsKeys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { IamCollectClient } from '../../../collect/client.js';
2
+ import { PermissionSet } from '../../permissionSet.js';
3
+ /**
4
+ * Get the permission sets for S3 buckets in the same account as the principal.
5
+ *
6
+ * @param collectClient the IAM collect client to use for retrieving policies and resources
7
+ * @param principal the ARN of the principal to check
8
+ * @returns the Allow and Deny permission sets for S3 buckets in the same account as the principal
9
+ */
10
+ export declare function s3BucketsSameAccount(collectClient: IamCollectClient, principal: string): Promise<{
11
+ allows: PermissionSet[];
12
+ denies: PermissionSet[];
13
+ }>;
14
+ export declare function s3BucketsCrossAccount(collectClient: IamCollectClient, accountId: string, rcpDenies: PermissionSet, principal: string): Promise<{
15
+ allows: PermissionSet[];
16
+ denies: PermissionSet[];
17
+ }>;
18
+ //# sourceMappingURL=s3Buckets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3Buckets.d.ts","sourceRoot":"","sources":["../../../../../src/principalCan/resources/resourceTypes/s3Buckets.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAE7D,OAAO,EAA+B,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAInF;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,gBAAgB,EAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CA+D/D;AAED,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,gBAAgB,EAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAyE/D"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.s3BucketsSameAccount = s3BucketsSameAccount;
4
+ exports.s3BucketsCrossAccount = s3BucketsCrossAccount;
5
+ const iam_policy_1 = require("@actsecurity/iam-policy");
6
+ const iam_utils_1 = require("@actsecurity/iam-utils");
7
+ const permission_js_1 = require("../../permission.js");
8
+ const permissionSet_js_1 = require("../../permissionSet.js");
9
+ const actions_js_1 = require("../actions.js");
10
+ const statements_js_1 = require("../statements.js");
11
+ /**
12
+ * Get the permission sets for S3 buckets in the same account as the principal.
13
+ *
14
+ * @param collectClient the IAM collect client to use for retrieving policies and resources
15
+ * @param principal the ARN of the principal to check
16
+ * @returns the Allow and Deny permission sets for S3 buckets in the same account as the principal
17
+ */
18
+ async function s3BucketsSameAccount(collectClient, principal) {
19
+ const principalArnParts = (0, iam_utils_1.splitArnParts)(principal);
20
+ const principalAccountId = principalArnParts.accountId;
21
+ const allBuckets = await collectClient.listResources(principalAccountId, 's3', 'bucket', undefined);
22
+ const bucketActions = await (0, actions_js_1.actionsForResourceType)('s3', 'bucket');
23
+ const objectActions = await (0, actions_js_1.actionsForResourceType)('s3', 'object');
24
+ const s3Actions = [...bucketActions, ...objectActions];
25
+ const bucketAllowPermissionSets = [];
26
+ const bucketDenyPermissionSets = [];
27
+ for (const bucket of allBuckets) {
28
+ const bucketPolicy = await collectClient.getResourcePolicyForArn(bucket, principalAccountId);
29
+ if (bucketPolicy) {
30
+ const loadedPolicy = (0, iam_policy_1.loadPolicy)(bucketPolicy);
31
+ if (loadedPolicy) {
32
+ const bucketArns = [bucket, `${bucket}/*`];
33
+ const bucketAllowPerimeter = new permissionSet_js_1.PermissionSet('Allow');
34
+ const bucketDenyPerimeter = new permissionSet_js_1.PermissionSet('Deny');
35
+ for (const action of s3Actions) {
36
+ bucketAllowPerimeter.addPermission(new permission_js_1.Permission('Allow', 's3', action, bucketArns, undefined, undefined));
37
+ bucketDenyPerimeter.addPermission(new permission_js_1.Permission('Deny', 's3', action, bucketArns, undefined, undefined));
38
+ }
39
+ const allowPermissionSet = new permissionSet_js_1.PermissionSet('Allow');
40
+ const denyPermissionSet = new permissionSet_js_1.PermissionSet('Deny');
41
+ for (const statement of loadedPolicy.statements()) {
42
+ const applies = await (0, statements_js_1.statementAppliesToPrincipal)(statement, principal, collectClient);
43
+ if (applies === 'PrincipalMatch') {
44
+ if (statement.isAllow()) {
45
+ await (0, permissionSet_js_1.addStatementToPermissionSet)(statement, allowPermissionSet);
46
+ }
47
+ else {
48
+ await (0, permissionSet_js_1.addStatementToPermissionSet)(statement, denyPermissionSet);
49
+ }
50
+ }
51
+ }
52
+ const effectiveAllows = allowPermissionSet.intersection(bucketAllowPerimeter);
53
+ const effectiveDenies = denyPermissionSet.intersection(bucketDenyPerimeter);
54
+ if (!effectiveAllows.isEmpty()) {
55
+ bucketAllowPermissionSets.push(effectiveAllows);
56
+ }
57
+ if (!effectiveDenies.isEmpty()) {
58
+ bucketDenyPermissionSets.push(effectiveDenies);
59
+ }
60
+ }
61
+ }
62
+ }
63
+ return { allows: bucketAllowPermissionSets, denies: bucketDenyPermissionSets };
64
+ }
65
+ async function s3BucketsCrossAccount(collectClient, accountId, rcpDenies, principal) {
66
+ // For every account:
67
+ // List the buckets
68
+ // Get the allow statements in the account buckets intersected with the bucket perimeter
69
+ // Collect all the deny statements intersected with the bucket perimeter
70
+ // Intersect the allow statements with the account RCPs
71
+ const bucketActions = await (0, actions_js_1.actionsForResourceType)('s3', 'bucket');
72
+ const objectActions = await (0, actions_js_1.actionsForResourceType)('s3', 'object');
73
+ const s3Actions = [...bucketActions, ...objectActions];
74
+ const bucketAllowPermissionSets = [];
75
+ const bucketDenyPermissionSets = [];
76
+ const allBuckets = await collectClient.listResources(accountId, 's3', 'bucket', undefined);
77
+ for (const bucket of allBuckets) {
78
+ const bucketPolicy = await collectClient.getResourcePolicyForArn(bucket, accountId);
79
+ if (!bucketPolicy) {
80
+ continue;
81
+ }
82
+ const loadedPolicy = (0, iam_policy_1.loadPolicy)(bucketPolicy);
83
+ const bucketArns = [bucket, `${bucket}/*`];
84
+ const bucketAllowPerimeter = new permissionSet_js_1.PermissionSet('Allow');
85
+ const bucketDenyPerimeter = new permissionSet_js_1.PermissionSet('Deny');
86
+ for (const action of s3Actions) {
87
+ bucketAllowPerimeter.addPermission(new permission_js_1.Permission('Allow', 's3', action, bucketArns, undefined, undefined));
88
+ bucketDenyPerimeter.addPermission(new permission_js_1.Permission('Deny', 's3', action, bucketArns, undefined, undefined));
89
+ }
90
+ const allowPermissionSet = new permissionSet_js_1.PermissionSet('Allow');
91
+ const denyPermissionSet = new permissionSet_js_1.PermissionSet('Deny');
92
+ for (const statement of loadedPolicy.statements()) {
93
+ const applies = await (0, statements_js_1.statementAppliesToPrincipal)(statement, principal, collectClient);
94
+ if (applies === 'PrincipalMatch' || applies === 'AccountMatch') {
95
+ if (statement.isAllow()) {
96
+ await (0, permissionSet_js_1.addStatementToPermissionSet)(statement, allowPermissionSet);
97
+ }
98
+ else {
99
+ await (0, permissionSet_js_1.addStatementToPermissionSet)(statement, denyPermissionSet);
100
+ }
101
+ }
102
+ }
103
+ // Intersect the allows with the perimeter and subtract RCP denies
104
+ // Intersect the RCP denies with the perimeter
105
+ let { allow: effectiveAllows, deny: effectiveDenies } = allowPermissionSet
106
+ .intersection(bucketAllowPerimeter)
107
+ .subtract(rcpDenies.intersection(bucketDenyPerimeter));
108
+ const maximumDenies = denyPermissionSet.intersection(bucketDenyPerimeter);
109
+ const afterDenies = effectiveAllows.subtract(maximumDenies);
110
+ effectiveAllows = afterDenies.allow;
111
+ effectiveDenies.addAll(afterDenies.deny);
112
+ // For cross account only, we only add denies if there was a corresponding allow
113
+ if (!effectiveAllows.isEmpty()) {
114
+ bucketAllowPermissionSets.push(effectiveAllows);
115
+ // For cross account only, we only add denies if there was a corresponding allow
116
+ if (!effectiveDenies.isEmpty()) {
117
+ bucketDenyPermissionSets.push(effectiveDenies);
118
+ }
119
+ }
120
+ }
121
+ return { allows: bucketAllowPermissionSets, denies: bucketDenyPermissionSets };
122
+ }
123
+ //# sourceMappingURL=s3Buckets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3Buckets.js","sourceRoot":"","sources":["../../../../../src/principalCan/resources/resourceTypes/s3Buckets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type Policy, type Statement } from '@actsecurity/iam-policy';
2
+ import { IamCollectClient } from '../../collect/client.js';
3
+ export type StatementPrincipalMatchType = 'PrincipalMatch' | 'AccountMatch' | 'NoMatch';
4
+ /**
5
+ * Checks to see if a statement applies to a principal by running a simulation.
6
+ *
7
+ * If the principal is a match return 'PrincipalMatch'
8
+ * If the account is a match return 'AccountMatch'
9
+ * Otherwise return 'NoMatch'
10
+ *
11
+ * @param statement the statement to check
12
+ * @param principalArn the arn of the principal to check
13
+ * @param client the IAM collect client to use for retrieving principal information
14
+ * @returns Whether the statement applies to the principal
15
+ */
16
+ export declare function statementAppliesToPrincipal(statement: Statement, principalArn: string, client: IamCollectClient): Promise<StatementPrincipalMatchType>;
17
+ /**
18
+ * Makes a policy that captures the principal and principal conditions from a statement
19
+ * and allows all actions on all resources.
20
+ *
21
+ * The conditions returned are only those that relate to the principal.
22
+ *
23
+ * @param statement the statement to extract the principal from
24
+ * @returns
25
+ */
26
+ export declare function makePrincipalOnlyPolicyFromStatement(statement: Statement): Policy;
27
+ //# sourceMappingURL=statements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../../../src/principalCan/resources/statements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAI1D,MAAM,MAAM,2BAA2B,GAAG,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAAA;AAEvF;;;;;;;;;;;GAWG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,2BAA2B,CAAC,CAkDtC;AAgBD;;;;;;;;GAQG;AACH,wBAAgB,oCAAoC,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAiCjF"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.statementAppliesToPrincipal = statementAppliesToPrincipal;
4
+ exports.makePrincipalOnlyPolicyFromStatement = makePrincipalOnlyPolicyFromStatement;
5
+ const iam_policy_1 = require("@actsecurity/iam-policy");
6
+ const iam_simulate_1 = require("@actsecurity/iam-simulate");
7
+ const iam_utils_1 = require("@actsecurity/iam-utils");
8
+ const contextKeys_js_1 = require("../../simulate/contextKeys.js");
9
+ /**
10
+ * Checks to see if a statement applies to a principal by running a simulation.
11
+ *
12
+ * If the principal is a match return 'PrincipalMatch'
13
+ * If the account is a match return 'AccountMatch'
14
+ * Otherwise return 'NoMatch'
15
+ *
16
+ * @param statement the statement to check
17
+ * @param principalArn the arn of the principal to check
18
+ * @param client the IAM collect client to use for retrieving principal information
19
+ * @returns Whether the statement applies to the principal
20
+ */
21
+ async function statementAppliesToPrincipal(statement, principalArn, client) {
22
+ const principalAccount = (0, iam_utils_1.splitArnParts)(principalArn).accountId;
23
+ const resourcePolicy = makePrincipalOnlyPolicyFromStatement(statement);
24
+ const simulationRequest = {
25
+ principal: principalArn,
26
+ action: 'kms:DescribeKey',
27
+ resourceAccount: principalAccount,
28
+ resourceArn: undefined,
29
+ customContextKeys: {},
30
+ simulationMode: 'Strict'
31
+ };
32
+ // We use KMS, so we get kms:CallerAccount context key support
33
+ const { contextKeys } = await (0, contextKeys_js_1.createContextKeys)(client, simulationRequest, 'kms', {});
34
+ const request = {
35
+ action: 'kms:DescribeKey',
36
+ resource: {
37
+ resource: 'arn:aws:kms:us-east-1:123456789012:key/abcd1234-ab12-cd34-ef23-456789abcdef',
38
+ accountId: principalAccount
39
+ },
40
+ principal: principalArn,
41
+ contextVariables: contextKeys
42
+ };
43
+ const simulation = {
44
+ request,
45
+ identityPolicies: [],
46
+ resourcePolicy: resourcePolicy.toJSON(),
47
+ serviceControlPolicies: [],
48
+ resourceControlPolicies: []
49
+ };
50
+ const result = await (0, iam_simulate_1.runSimulation)(simulation, {
51
+ simulationMode: simulationRequest.simulationMode
52
+ });
53
+ if (result.resultType === 'error') {
54
+ return 'NoMatch';
55
+ }
56
+ const analysis = result.resultType === 'single' ? result.result.analysis : undefined;
57
+ if (analysis?.result === 'Allowed') {
58
+ return 'PrincipalMatch';
59
+ }
60
+ if (analysis?.resourceAnalysis?.result === 'AllowedForAccount') {
61
+ return 'AccountMatch';
62
+ }
63
+ return 'NoMatch';
64
+ }
65
+ const principalKeys = new Set([
66
+ 'aws:PrincipalArn',
67
+ 'aws:PrincipalAccount',
68
+ 'aws:PrincipalOrgId',
69
+ 'aws:PrincipalOrgPaths',
70
+ 'aws:PrincipalType',
71
+ 'aws:userid',
72
+ 'aws:username',
73
+ 'aws:PrincipalIsAWSService',
74
+ 'kms:CallerAccount'
75
+ ].map((k) => k.toLowerCase()));
76
+ /**
77
+ * Makes a policy that captures the principal and principal conditions from a statement
78
+ * and allows all actions on all resources.
79
+ *
80
+ * The conditions returned are only those that relate to the principal.
81
+ *
82
+ * @param statement the statement to extract the principal from
83
+ * @returns
84
+ */
85
+ function makePrincipalOnlyPolicyFromStatement(statement) {
86
+ const rawStatement = structuredClone(statement.toJSON());
87
+ const rawStatementValues = {};
88
+ if (statement.isPrincipalStatement()) {
89
+ rawStatementValues.Principal = rawStatement.Principal;
90
+ }
91
+ else if (statement.isNotPrincipalStatement()) {
92
+ rawStatementValues.NotPrincipal = rawStatement.NotPrincipal;
93
+ }
94
+ if (rawStatement.Condition) {
95
+ for (const operator of Object.keys(rawStatement.Condition)) {
96
+ for (const key of Object.keys(rawStatement.Condition[operator])) {
97
+ if (!principalKeys.has(key.toLowerCase())) {
98
+ delete rawStatement.Condition[operator][key];
99
+ }
100
+ }
101
+ if (Object.keys(rawStatement.Condition[operator]).length === 0) {
102
+ delete rawStatement.Condition[operator];
103
+ }
104
+ }
105
+ if (Object.keys(rawStatement.Condition).length > 0) {
106
+ rawStatementValues.Condition = rawStatement.Condition;
107
+ }
108
+ }
109
+ return (0, iam_policy_1.loadPolicy)({
110
+ Version: '2012-10-17',
111
+ Statement: {
112
+ Effect: 'Allow',
113
+ Resource: '*',
114
+ Action: '*',
115
+ ...rawStatementValues
116
+ }
117
+ });
118
+ }
119
+ //# sourceMappingURL=statements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statements.js","sourceRoot":"","sources":["../../../../src/principalCan/resources/statements.ts"],"names":[],"mappings":";;AAqBA,kEAsDC;AAyBD,oFAiCC;AArID,wDAAiF;AACjF,4DAA0E;AAC1E,sDAAsD;AAEtD,kEAAiE;AAKjE;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,2BAA2B,CAC/C,SAAoB,EACpB,YAAoB,EACpB,MAAwB;IAExB,MAAM,gBAAgB,GAAG,IAAA,yBAAa,EAAC,YAAY,CAAC,CAAC,SAAU,CAAA;IAC/D,MAAM,cAAc,GAAG,oCAAoC,CAAC,SAAS,CAAC,CAAA;IACtE,MAAM,iBAAiB,GAAsB;QAC3C,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE,iBAAiB;QACzB,eAAe,EAAE,gBAAgB;QACjC,WAAW,EAAE,SAAS;QACtB,iBAAiB,EAAE,EAAE;QACrB,cAAc,EAAE,QAAQ;KACzB,CAAA;IAED,8DAA8D;IAC9D,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,kCAAiB,EAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;IAErF,MAAM,OAAO,GAA0B;QACrC,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE;YACR,QAAQ,EAAE,6EAA6E;YACvF,SAAS,EAAE,gBAAgB;SAC5B;QACD,SAAS,EAAE,YAAY;QACvB,gBAAgB,EAAE,WAAW;KAC9B,CAAA;IAED,MAAM,UAAU,GAAe;QAC7B,OAAO;QACP,gBAAgB,EAAE,EAAE;QACpB,cAAc,EAAE,cAAc,CAAC,MAAM,EAAE;QACvC,sBAAsB,EAAE,EAAE;QAC1B,uBAAuB,EAAE,EAAE;KAC5B,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAa,EAAC,UAAU,EAAE;QAC7C,cAAc,EAAE,iBAAiB,CAAC,cAAc;KACjD,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;IACpF,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,gBAAgB,CAAA;IACzB,CAAC;IAED,IAAI,QAAQ,EAAE,gBAAgB,EAAE,MAAM,KAAK,mBAAmB,EAAE,CAAC;QAC/D,OAAO,cAAc,CAAA;IACvB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B;IACE,kBAAkB;IAClB,sBAAsB;IACtB,oBAAoB;IACpB,uBAAuB;IACvB,mBAAmB;IACnB,YAAY;IACZ,cAAc;IACd,2BAA2B;IAC3B,mBAAmB;CACpB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAC9B,CAAA;AAED;;;;;;;;GAQG;AACH,SAAgB,oCAAoC,CAAC,SAAoB;IACvE,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAA;IACxD,MAAM,kBAAkB,GAAQ,EAAE,CAAA;IAClC,IAAI,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;QACrC,kBAAkB,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;IACvD,CAAC;SAAM,IAAI,SAAS,CAAC,uBAAuB,EAAE,EAAE,CAAC;QAC/C,kBAAkB,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY,CAAA;IAC7D,CAAC;IACD,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;QAC3B,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC1C,OAAO,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/D,OAAO,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,kBAAkB,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;QACvD,CAAC;IACH,CAAC;IAED,OAAO,IAAA,uBAAU,EAAC;QAChB,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE;YACT,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,GAAG;YACX,GAAG,kBAAkB;SACtB;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { IamCollectClient } from '../collect/client.js';
2
+ /**
3
+ * Make a principal index for all principals in the collect client
4
+ *
5
+ * @param collectClient the collect client to use
6
+ */
7
+ export declare function makePrincipalIndex(collectClient: IamCollectClient): Promise<void>;
8
+ //# sourceMappingURL=makePrincipalIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makePrincipalIndex.d.ts","sourceRoot":"","sources":["../../../src/principalIndex/makePrincipalIndex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAG5E;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,gBAAgB,iBAgDvE"}