@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,110 @@
1
+ import { expandIamActions } from '@actsecurity/iam-expand';
2
+ import { isValidatedPolicy, loadPolicy } from '@actsecurity/iam-policy';
3
+ import { splitArnParts } from '@actsecurity/iam-utils';
4
+ import { IamCollectClient } from '../../../collect/client.js';
5
+ import { Permission } from '../../permission.js';
6
+ import { addStatementToPermissionSet, PermissionSet } from '../../permissionSet.js';
7
+ import { statementAppliesToPrincipal } from '../statements.js';
8
+ /**
9
+ * Get the list of IAM Actions to assume a role.
10
+ *
11
+ * @returns the list of IAM Actions to assume a role
12
+ */
13
+ export async function stsRoleActions() {
14
+ const serviceActions = await expandIamActions('sts:AssumeRole*');
15
+ const actions = serviceActions.map((a) => a.split(':').at(1));
16
+ return [...actions, 'SetContext', 'TagSession', 'SetSourceIdentity'];
17
+ }
18
+ /**
19
+ * Get the permission sets for all IAM roles to assume a role.
20
+ *
21
+ * @returns the permission sets for all IAM roles to assume a role
22
+ */
23
+ export async function allIamRolesAssumeRolePermissionSets() {
24
+ const assumeRoleActions = await stsRoleActions();
25
+ const allowPerimeter = new PermissionSet('Allow');
26
+ const denyPerimeter = new PermissionSet('Deny');
27
+ for (const action of assumeRoleActions) {
28
+ allowPerimeter.addPermission(new Permission('Allow', 'sts', action, ['*'], undefined, undefined));
29
+ denyPerimeter.addPermission(new Permission('Deny', 'sts', action, ['*'], undefined, undefined));
30
+ }
31
+ return { roleAllows: allowPerimeter, roleDenies: denyPerimeter };
32
+ }
33
+ /**
34
+ * Get the permissions a principal has to assume roles in the same account.
35
+ * This will only return permissions for sts:AssumeRole and not other assume role actions.
36
+ *
37
+ * @param collectClient the client to use to collect IAM information
38
+ * @param principal the principal to check permissions for
39
+ * @returns the permissions the principal has to assume roles in the same account
40
+ */
41
+ export async function iamRolesSameAccount(collectClient, principal) {
42
+ const principalArnParts = splitArnParts(principal);
43
+ const principalAccountId = principalArnParts.accountId;
44
+ const assumeRoleActions = ['AssumeRole', 'SetContext', 'TagSession', 'SetSourceIdentity'];
45
+ const allRoles = await collectClient.listResources(principalAccountId, 'iam', 'role', undefined);
46
+ const accountAllows = [];
47
+ const principalAllows = [];
48
+ const denies = [];
49
+ for (const roleArn of allRoles) {
50
+ const rawPolicy = await collectClient.getResourcePolicyForArn(roleArn, principalAccountId);
51
+ if (!rawPolicy) {
52
+ continue;
53
+ }
54
+ const allowPerimeter = new PermissionSet('Allow');
55
+ const denyPerimeter = new PermissionSet('Deny');
56
+ for (const action of assumeRoleActions) {
57
+ allowPerimeter.addPermission(new Permission('Allow', 'sts', action, [roleArn], undefined, undefined));
58
+ denyPerimeter.addPermission(new Permission('Deny', 'sts', action, [roleArn], undefined, undefined));
59
+ }
60
+ const roleAcctAllow = new PermissionSet('Allow');
61
+ const rolePrincipalAllow = new PermissionSet('Allow');
62
+ const roleDeny = new PermissionSet('Deny');
63
+ addRoleArnToStatements(rawPolicy, roleArn);
64
+ const trustPolicy = loadPolicy(rawPolicy);
65
+ for (const statement of trustPolicy.statements()) {
66
+ const applies = await statementAppliesToPrincipal(statement, principal, collectClient);
67
+ if (applies === 'PrincipalMatch') {
68
+ if (statement.isAllow()) {
69
+ await addStatementToPermissionSet(statement, rolePrincipalAllow);
70
+ }
71
+ else {
72
+ await addStatementToPermissionSet(statement, roleDeny);
73
+ }
74
+ }
75
+ else if (applies === 'AccountMatch' && statement.isAllow()) {
76
+ await addStatementToPermissionSet(statement, roleAcctAllow);
77
+ }
78
+ }
79
+ const effectivePrincipalAllow = rolePrincipalAllow.intersection(allowPerimeter);
80
+ const effectiveAccountAllow = roleAcctAllow.intersection(allowPerimeter);
81
+ const effectiveDeny = roleDeny.intersection(denyPerimeter);
82
+ if (!effectivePrincipalAllow.isEmpty()) {
83
+ principalAllows.push(effectivePrincipalAllow);
84
+ }
85
+ if (!effectiveAccountAllow.isEmpty()) {
86
+ accountAllows.push(effectiveAccountAllow);
87
+ }
88
+ if (!effectiveDeny.isEmpty()) {
89
+ denies.push(effectiveDeny);
90
+ }
91
+ }
92
+ return {
93
+ accountAllows,
94
+ principalAllows,
95
+ denies
96
+ };
97
+ }
98
+ function addRoleArnToStatements(policy, roleArn) {
99
+ const policyDoc = isValidatedPolicy(policy) ? policy.policyDocument : policy;
100
+ const statement = policyDoc.Statement;
101
+ if (Array.isArray(statement)) {
102
+ for (const stmt of statement) {
103
+ stmt.Resource = [roleArn];
104
+ }
105
+ }
106
+ else if (statement) {
107
+ statement.Resource = [roleArn];
108
+ }
109
+ }
110
+ //# 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,106 @@
1
+ import { loadPolicy } from '@actsecurity/iam-policy';
2
+ import { splitArnParts } from '@actsecurity/iam-utils';
3
+ import { IamCollectClient } from '../../../collect/client.js';
4
+ import { Permission } from '../../permission.js';
5
+ import { addStatementToPermissionSet, PermissionSet } from '../../permissionSet.js';
6
+ import { actionsForResourceType } from '../actions.js';
7
+ import { statementAppliesToPrincipal } from '../statements.js';
8
+ /**
9
+ * Get the list of KMS actions.
10
+ *
11
+ * @returns All options available for KMS keys.
12
+ */
13
+ export async function kmsKeyActions() {
14
+ return actionsForResourceType('kms', 'key');
15
+ }
16
+ /**
17
+ * Create permission sets that include all KMS key actions on all resources.
18
+ *
19
+ * @returns Permission sets that include all KMS key actions on all resources both for Allow and Deny.
20
+ */
21
+ export async function allKmsKeysAllActionsPermissionSets() {
22
+ const keyActions = await kmsKeyActions();
23
+ const allowPerimeter = new PermissionSet('Allow');
24
+ const denyPerimeter = new PermissionSet('Deny');
25
+ for (const action of keyActions) {
26
+ allowPerimeter.addPermission(new Permission('Allow', 'kms', action, ['*'], undefined, undefined));
27
+ denyPerimeter.addPermission(new Permission('Deny', 'kms', action, ['*'], undefined, undefined));
28
+ }
29
+ return { keyAllows: allowPerimeter, keyDenies: denyPerimeter };
30
+ }
31
+ /**
32
+ * Get the permissions a principal has on KMS keys in the same account.
33
+ *
34
+ * @param collectClient the IAM collect client to use for retrieving policies.
35
+ * @param principal the principal to check permissions for.
36
+ * @returns the permissions the principal has on KMS keys in the same account.
37
+ */
38
+ export async function kmsKeysSameAccount(collectClient, principal) {
39
+ const principalArnParts = splitArnParts(principal);
40
+ const principalAccountId = principalArnParts.accountId;
41
+ const keyActions = await kmsKeyActions();
42
+ const allKeys = await collectClient.listResources(principalAccountId, 'kms', 'key', '*');
43
+ const accountAllows = [];
44
+ const principalAllows = [];
45
+ const denies = [];
46
+ for (const keyArn of allKeys) {
47
+ const rawKeyPolicy = await collectClient.getResourcePolicyForArn(keyArn, principalAccountId);
48
+ if (!rawKeyPolicy) {
49
+ continue;
50
+ }
51
+ const allowPerimeter = new PermissionSet('Allow');
52
+ const denyPerimeter = new PermissionSet('Deny');
53
+ for (const action of keyActions) {
54
+ allowPerimeter.addPermission(new Permission('Allow', 'kms', action, [keyArn], undefined, undefined));
55
+ denyPerimeter.addPermission(new Permission('Deny', 'kms', action, [keyArn], undefined, undefined));
56
+ }
57
+ const keyAcctAllow = new PermissionSet('Allow');
58
+ const keyPrincipalAllow = new PermissionSet('Allow');
59
+ const keyDeny = new PermissionSet('Deny');
60
+ const keyPolicy = loadPolicy(rawKeyPolicy);
61
+ for (const statement of keyPolicy.statements()) {
62
+ const applies = await statementAppliesToPrincipal(statement, principal, collectClient);
63
+ const hasViaService = statementHasViaServiceCondition(statement);
64
+ if (applies === 'PrincipalMatch') {
65
+ if (statement.isAllow()) {
66
+ if (!hasViaService) {
67
+ await addStatementToPermissionSet(statement, keyPrincipalAllow);
68
+ }
69
+ }
70
+ else {
71
+ await addStatementToPermissionSet(statement, keyDeny);
72
+ }
73
+ }
74
+ else if (applies === 'AccountMatch' && statement.isAllow() && !hasViaService) {
75
+ await addStatementToPermissionSet(statement, keyAcctAllow);
76
+ }
77
+ }
78
+ const effectivePrincipalAllow = keyPrincipalAllow.intersection(allowPerimeter);
79
+ const effectiveAccountAllow = keyAcctAllow.intersection(allowPerimeter);
80
+ const effectiveDeny = keyDeny.intersection(denyPerimeter);
81
+ if (!effectivePrincipalAllow.isEmpty()) {
82
+ principalAllows.push(effectivePrincipalAllow);
83
+ }
84
+ if (!effectiveAccountAllow.isEmpty()) {
85
+ accountAllows.push(effectiveAccountAllow);
86
+ }
87
+ if (!effectiveDeny.isEmpty()) {
88
+ denies.push(effectiveDeny);
89
+ }
90
+ }
91
+ return {
92
+ accountAllows,
93
+ principalAllows,
94
+ denies
95
+ };
96
+ }
97
+ /**
98
+ * Check if the statement has the condition key kms:ViaService.
99
+ *
100
+ * @param statement the statement to check
101
+ * @returns true if the statement has a kms:ViaService condition, false otherwise
102
+ */
103
+ function statementHasViaServiceCondition(statement) {
104
+ return statement.conditions().some((c) => c.conditionKey().toLowerCase() === 'kms:viaservice');
105
+ }
106
+ //# 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,120 @@
1
+ import { loadPolicy } from '@actsecurity/iam-policy';
2
+ import { splitArnParts } from '@actsecurity/iam-utils';
3
+ import { IamCollectClient } from '../../../collect/client.js';
4
+ import { Permission } from '../../permission.js';
5
+ import { addStatementToPermissionSet, PermissionSet } from '../../permissionSet.js';
6
+ import { actionsForResourceType } from '../actions.js';
7
+ import { statementAppliesToPrincipal } from '../statements.js';
8
+ /**
9
+ * Get the permission sets for S3 buckets in the same account as the principal.
10
+ *
11
+ * @param collectClient the IAM collect client to use for retrieving policies and resources
12
+ * @param principal the ARN of the principal to check
13
+ * @returns the Allow and Deny permission sets for S3 buckets in the same account as the principal
14
+ */
15
+ export async function s3BucketsSameAccount(collectClient, principal) {
16
+ const principalArnParts = splitArnParts(principal);
17
+ const principalAccountId = principalArnParts.accountId;
18
+ const allBuckets = await collectClient.listResources(principalAccountId, 's3', 'bucket', undefined);
19
+ const bucketActions = await actionsForResourceType('s3', 'bucket');
20
+ const objectActions = await actionsForResourceType('s3', 'object');
21
+ const s3Actions = [...bucketActions, ...objectActions];
22
+ const bucketAllowPermissionSets = [];
23
+ const bucketDenyPermissionSets = [];
24
+ for (const bucket of allBuckets) {
25
+ const bucketPolicy = await collectClient.getResourcePolicyForArn(bucket, principalAccountId);
26
+ if (bucketPolicy) {
27
+ const loadedPolicy = loadPolicy(bucketPolicy);
28
+ if (loadedPolicy) {
29
+ const bucketArns = [bucket, `${bucket}/*`];
30
+ const bucketAllowPerimeter = new PermissionSet('Allow');
31
+ const bucketDenyPerimeter = new PermissionSet('Deny');
32
+ for (const action of s3Actions) {
33
+ bucketAllowPerimeter.addPermission(new Permission('Allow', 's3', action, bucketArns, undefined, undefined));
34
+ bucketDenyPerimeter.addPermission(new Permission('Deny', 's3', action, bucketArns, undefined, undefined));
35
+ }
36
+ const allowPermissionSet = new PermissionSet('Allow');
37
+ const denyPermissionSet = new PermissionSet('Deny');
38
+ for (const statement of loadedPolicy.statements()) {
39
+ const applies = await statementAppliesToPrincipal(statement, principal, collectClient);
40
+ if (applies === 'PrincipalMatch') {
41
+ if (statement.isAllow()) {
42
+ await addStatementToPermissionSet(statement, allowPermissionSet);
43
+ }
44
+ else {
45
+ await addStatementToPermissionSet(statement, denyPermissionSet);
46
+ }
47
+ }
48
+ }
49
+ const effectiveAllows = allowPermissionSet.intersection(bucketAllowPerimeter);
50
+ const effectiveDenies = denyPermissionSet.intersection(bucketDenyPerimeter);
51
+ if (!effectiveAllows.isEmpty()) {
52
+ bucketAllowPermissionSets.push(effectiveAllows);
53
+ }
54
+ if (!effectiveDenies.isEmpty()) {
55
+ bucketDenyPermissionSets.push(effectiveDenies);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ return { allows: bucketAllowPermissionSets, denies: bucketDenyPermissionSets };
61
+ }
62
+ export async function s3BucketsCrossAccount(collectClient, accountId, rcpDenies, principal) {
63
+ // For every account:
64
+ // List the buckets
65
+ // Get the allow statements in the account buckets intersected with the bucket perimeter
66
+ // Collect all the deny statements intersected with the bucket perimeter
67
+ // Intersect the allow statements with the account RCPs
68
+ const bucketActions = await actionsForResourceType('s3', 'bucket');
69
+ const objectActions = await actionsForResourceType('s3', 'object');
70
+ const s3Actions = [...bucketActions, ...objectActions];
71
+ const bucketAllowPermissionSets = [];
72
+ const bucketDenyPermissionSets = [];
73
+ const allBuckets = await collectClient.listResources(accountId, 's3', 'bucket', undefined);
74
+ for (const bucket of allBuckets) {
75
+ const bucketPolicy = await collectClient.getResourcePolicyForArn(bucket, accountId);
76
+ if (!bucketPolicy) {
77
+ continue;
78
+ }
79
+ const loadedPolicy = loadPolicy(bucketPolicy);
80
+ const bucketArns = [bucket, `${bucket}/*`];
81
+ const bucketAllowPerimeter = new PermissionSet('Allow');
82
+ const bucketDenyPerimeter = new PermissionSet('Deny');
83
+ for (const action of s3Actions) {
84
+ bucketAllowPerimeter.addPermission(new Permission('Allow', 's3', action, bucketArns, undefined, undefined));
85
+ bucketDenyPerimeter.addPermission(new Permission('Deny', 's3', action, bucketArns, undefined, undefined));
86
+ }
87
+ const allowPermissionSet = new PermissionSet('Allow');
88
+ const denyPermissionSet = new PermissionSet('Deny');
89
+ for (const statement of loadedPolicy.statements()) {
90
+ const applies = await statementAppliesToPrincipal(statement, principal, collectClient);
91
+ if (applies === 'PrincipalMatch' || applies === 'AccountMatch') {
92
+ if (statement.isAllow()) {
93
+ await addStatementToPermissionSet(statement, allowPermissionSet);
94
+ }
95
+ else {
96
+ await addStatementToPermissionSet(statement, denyPermissionSet);
97
+ }
98
+ }
99
+ }
100
+ // Intersect the allows with the perimeter and subtract RCP denies
101
+ // Intersect the RCP denies with the perimeter
102
+ let { allow: effectiveAllows, deny: effectiveDenies } = allowPermissionSet
103
+ .intersection(bucketAllowPerimeter)
104
+ .subtract(rcpDenies.intersection(bucketDenyPerimeter));
105
+ const maximumDenies = denyPermissionSet.intersection(bucketDenyPerimeter);
106
+ const afterDenies = effectiveAllows.subtract(maximumDenies);
107
+ effectiveAllows = afterDenies.allow;
108
+ effectiveDenies.addAll(afterDenies.deny);
109
+ // For cross account only, we only add denies if there was a corresponding allow
110
+ if (!effectiveAllows.isEmpty()) {
111
+ bucketAllowPermissionSets.push(effectiveAllows);
112
+ // For cross account only, we only add denies if there was a corresponding allow
113
+ if (!effectiveDenies.isEmpty()) {
114
+ bucketDenyPermissionSets.push(effectiveDenies);
115
+ }
116
+ }
117
+ }
118
+ return { allows: bucketAllowPermissionSets, denies: bucketDenyPermissionSets };
119
+ }
120
+ //# 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,117 @@
1
+ import { loadPolicy } from '@actsecurity/iam-policy';
2
+ import { runSimulation } from '@actsecurity/iam-simulate';
3
+ import { splitArnParts } from '@actsecurity/iam-utils';
4
+ import { IamCollectClient } from '../../collect/client.js';
5
+ import { createContextKeys } from '../../simulate/contextKeys.js';
6
+ import {} from '../../simulate/simulate.js';
7
+ /**
8
+ * Checks to see if a statement applies to a principal by running a simulation.
9
+ *
10
+ * If the principal is a match return 'PrincipalMatch'
11
+ * If the account is a match return 'AccountMatch'
12
+ * Otherwise return 'NoMatch'
13
+ *
14
+ * @param statement the statement to check
15
+ * @param principalArn the arn of the principal to check
16
+ * @param client the IAM collect client to use for retrieving principal information
17
+ * @returns Whether the statement applies to the principal
18
+ */
19
+ export async function statementAppliesToPrincipal(statement, principalArn, client) {
20
+ const principalAccount = splitArnParts(principalArn).accountId;
21
+ const resourcePolicy = makePrincipalOnlyPolicyFromStatement(statement);
22
+ const simulationRequest = {
23
+ principal: principalArn,
24
+ action: 'kms:DescribeKey',
25
+ resourceAccount: principalAccount,
26
+ resourceArn: undefined,
27
+ customContextKeys: {},
28
+ simulationMode: 'Strict'
29
+ };
30
+ // We use KMS, so we get kms:CallerAccount context key support
31
+ const { contextKeys } = await createContextKeys(client, simulationRequest, 'kms', {});
32
+ const request = {
33
+ action: 'kms:DescribeKey',
34
+ resource: {
35
+ resource: 'arn:aws:kms:us-east-1:123456789012:key/abcd1234-ab12-cd34-ef23-456789abcdef',
36
+ accountId: principalAccount
37
+ },
38
+ principal: principalArn,
39
+ contextVariables: contextKeys
40
+ };
41
+ const simulation = {
42
+ request,
43
+ identityPolicies: [],
44
+ resourcePolicy: resourcePolicy.toJSON(),
45
+ serviceControlPolicies: [],
46
+ resourceControlPolicies: []
47
+ };
48
+ const result = await runSimulation(simulation, {
49
+ simulationMode: simulationRequest.simulationMode
50
+ });
51
+ if (result.resultType === 'error') {
52
+ return 'NoMatch';
53
+ }
54
+ const analysis = result.resultType === 'single' ? result.result.analysis : undefined;
55
+ if (analysis?.result === 'Allowed') {
56
+ return 'PrincipalMatch';
57
+ }
58
+ if (analysis?.resourceAnalysis?.result === 'AllowedForAccount') {
59
+ return 'AccountMatch';
60
+ }
61
+ return 'NoMatch';
62
+ }
63
+ const principalKeys = new Set([
64
+ 'aws:PrincipalArn',
65
+ 'aws:PrincipalAccount',
66
+ 'aws:PrincipalOrgId',
67
+ 'aws:PrincipalOrgPaths',
68
+ 'aws:PrincipalType',
69
+ 'aws:userid',
70
+ 'aws:username',
71
+ 'aws:PrincipalIsAWSService',
72
+ 'kms:CallerAccount'
73
+ ].map((k) => k.toLowerCase()));
74
+ /**
75
+ * Makes a policy that captures the principal and principal conditions from a statement
76
+ * and allows all actions on all resources.
77
+ *
78
+ * The conditions returned are only those that relate to the principal.
79
+ *
80
+ * @param statement the statement to extract the principal from
81
+ * @returns
82
+ */
83
+ export function makePrincipalOnlyPolicyFromStatement(statement) {
84
+ const rawStatement = structuredClone(statement.toJSON());
85
+ const rawStatementValues = {};
86
+ if (statement.isPrincipalStatement()) {
87
+ rawStatementValues.Principal = rawStatement.Principal;
88
+ }
89
+ else if (statement.isNotPrincipalStatement()) {
90
+ rawStatementValues.NotPrincipal = rawStatement.NotPrincipal;
91
+ }
92
+ if (rawStatement.Condition) {
93
+ for (const operator of Object.keys(rawStatement.Condition)) {
94
+ for (const key of Object.keys(rawStatement.Condition[operator])) {
95
+ if (!principalKeys.has(key.toLowerCase())) {
96
+ delete rawStatement.Condition[operator][key];
97
+ }
98
+ }
99
+ if (Object.keys(rawStatement.Condition[operator]).length === 0) {
100
+ delete rawStatement.Condition[operator];
101
+ }
102
+ }
103
+ if (Object.keys(rawStatement.Condition).length > 0) {
104
+ rawStatementValues.Condition = rawStatement.Condition;
105
+ }
106
+ }
107
+ return loadPolicy({
108
+ Version: '2012-10-17',
109
+ Statement: {
110
+ Effect: 'Allow',
111
+ Resource: '*',
112
+ Action: '*',
113
+ ...rawStatementValues
114
+ }
115
+ });
116
+ }
117
+ //# sourceMappingURL=statements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statements.js","sourceRoot":"","sources":["../../../../src/principalCan/resources/statements.ts"],"names":[],"mappings":"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"}
@@ -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"}