@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.
- package/LICENSE.txt +661 -0
- package/README.md +203 -0
- package/dist/cjs/cli.d.ts +3 -0
- package/dist/cjs/cli.d.ts.map +1 -0
- package/dist/cjs/cli.js +206 -0
- package/dist/cjs/cli.js.map +1 -0
- package/dist/cjs/collect/client.d.ts +550 -0
- package/dist/cjs/collect/client.d.ts.map +1 -0
- package/dist/cjs/collect/client.js +1119 -0
- package/dist/cjs/collect/client.js.map +1 -0
- package/dist/cjs/collect/collect.d.ts +44 -0
- package/dist/cjs/collect/collect.d.ts.map +1 -0
- package/dist/cjs/collect/collect.js +55 -0
- package/dist/cjs/collect/collect.js.map +1 -0
- package/dist/cjs/collect/inMemoryClient.d.ts +6 -0
- package/dist/cjs/collect/inMemoryClient.d.ts.map +1 -0
- package/dist/cjs/collect/inMemoryClient.js +11 -0
- package/dist/cjs/collect/inMemoryClient.js.map +1 -0
- package/dist/cjs/index.d.ts +13 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +28 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/principalCan/permission.d.ts +125 -0
- package/dist/cjs/principalCan/permission.d.ts.map +1 -0
- package/dist/cjs/principalCan/permission.js +1229 -0
- package/dist/cjs/principalCan/permission.js.map +1 -0
- package/dist/cjs/principalCan/permissionSet.d.ts +140 -0
- package/dist/cjs/principalCan/permissionSet.d.ts.map +1 -0
- package/dist/cjs/principalCan/permissionSet.js +437 -0
- package/dist/cjs/principalCan/permissionSet.js.map +1 -0
- package/dist/cjs/principalCan/principalCan.d.ts +26 -0
- package/dist/cjs/principalCan/principalCan.d.ts.map +1 -0
- package/dist/cjs/principalCan/principalCan.js +195 -0
- package/dist/cjs/principalCan/principalCan.js.map +1 -0
- package/dist/cjs/principalCan/principalConstraints.d.ts +147 -0
- package/dist/cjs/principalCan/principalConstraints.d.ts.map +1 -0
- package/dist/cjs/principalCan/principalConstraints.js +472 -0
- package/dist/cjs/principalCan/principalConstraints.js.map +1 -0
- package/dist/cjs/principalCan/resources/actions.d.ts +9 -0
- package/dist/cjs/principalCan/resources/actions.d.ts.map +1 -0
- package/dist/cjs/principalCan/resources/actions.js +27 -0
- package/dist/cjs/principalCan/resources/actions.js.map +1 -0
- package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.d.ts +31 -0
- package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.d.ts.map +1 -0
- package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.js +114 -0
- package/dist/cjs/principalCan/resources/resourceTypes/iamRoles.js.map +1 -0
- package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.d.ts +30 -0
- package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.d.ts.map +1 -0
- package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.js +110 -0
- package/dist/cjs/principalCan/resources/resourceTypes/kmsKeys.js.map +1 -0
- package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.d.ts +18 -0
- package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.d.ts.map +1 -0
- package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.js +123 -0
- package/dist/cjs/principalCan/resources/resourceTypes/s3Buckets.js.map +1 -0
- package/dist/cjs/principalCan/resources/statements.d.ts +27 -0
- package/dist/cjs/principalCan/resources/statements.d.ts.map +1 -0
- package/dist/cjs/principalCan/resources/statements.js +119 -0
- package/dist/cjs/principalCan/resources/statements.js.map +1 -0
- package/dist/cjs/principalIndex/makePrincipalIndex.d.ts +8 -0
- package/dist/cjs/principalIndex/makePrincipalIndex.d.ts.map +1 -0
- package/dist/cjs/principalIndex/makePrincipalIndex.js +105 -0
- package/dist/cjs/principalIndex/makePrincipalIndex.js.map +1 -0
- package/dist/cjs/principals.d.ts +54 -0
- package/dist/cjs/principals.d.ts.map +1 -0
- package/dist/cjs/principals.js +143 -0
- package/dist/cjs/principals.js.map +1 -0
- package/dist/cjs/resources.d.ts +32 -0
- package/dist/cjs/resources.d.ts.map +1 -0
- package/dist/cjs/resources.js +71 -0
- package/dist/cjs/resources.js.map +1 -0
- package/dist/cjs/simulate/contextKeys.d.ts +68 -0
- package/dist/cjs/simulate/contextKeys.d.ts.map +1 -0
- package/dist/cjs/simulate/contextKeys.js +293 -0
- package/dist/cjs/simulate/contextKeys.js.map +1 -0
- package/dist/cjs/simulate/simulate.d.ts +72 -0
- package/dist/cjs/simulate/simulate.d.ts.map +1 -0
- package/dist/cjs/simulate/simulate.js +296 -0
- package/dist/cjs/simulate/simulate.js.map +1 -0
- package/dist/cjs/test-datasets/testClient.d.ts +17 -0
- package/dist/cjs/test-datasets/testClient.d.ts.map +1 -0
- package/dist/cjs/test-datasets/testClient.js +58 -0
- package/dist/cjs/test-datasets/testClient.js.map +1 -0
- package/dist/cjs/utils/arn.d.ts +22 -0
- package/dist/cjs/utils/arn.d.ts.map +1 -0
- package/dist/cjs/utils/arn.js +49 -0
- package/dist/cjs/utils/arn.js.map +1 -0
- package/dist/cjs/utils/bitset.d.ts +45 -0
- package/dist/cjs/utils/bitset.d.ts.map +1 -0
- package/dist/cjs/utils/bitset.js +149 -0
- package/dist/cjs/utils/bitset.js.map +1 -0
- package/dist/cjs/utils/dynamicImport.d.ts +31 -0
- package/dist/cjs/utils/dynamicImport.d.ts.map +1 -0
- package/dist/cjs/utils/dynamicImport.js +64 -0
- package/dist/cjs/utils/dynamicImport.js.map +1 -0
- package/dist/cjs/utils/packageVersion.d.ts +5 -0
- package/dist/cjs/utils/packageVersion.d.ts.map +1 -0
- package/dist/cjs/utils/packageVersion.js +25 -0
- package/dist/cjs/utils/packageVersion.js.map +1 -0
- package/dist/cjs/utils/readPackageFile.d.ts +3 -0
- package/dist/cjs/utils/readPackageFile.d.ts.map +1 -0
- package/dist/cjs/utils/readPackageFile.js +16 -0
- package/dist/cjs/utils/readPackageFile.js.map +1 -0
- package/dist/cjs/utils/s3Abac.d.ts +3 -0
- package/dist/cjs/utils/s3Abac.d.ts.map +1 -0
- package/dist/cjs/utils/s3Abac.js +5 -0
- package/dist/cjs/utils/s3Abac.js.map +1 -0
- package/dist/cjs/utils/stringOrFileArgument.d.ts +9 -0
- package/dist/cjs/utils/stringOrFileArgument.d.ts.map +1 -0
- package/dist/cjs/utils/stringOrFileArgument.js +25 -0
- package/dist/cjs/utils/stringOrFileArgument.js.map +1 -0
- package/dist/cjs/utils/sts.d.ts +2 -0
- package/dist/cjs/utils/sts.d.ts.map +1 -0
- package/dist/cjs/utils/sts.js +9 -0
- package/dist/cjs/utils/sts.js.map +1 -0
- package/dist/cjs/utils/testUtils.d.ts +56 -0
- package/dist/cjs/utils/testUtils.d.ts.map +1 -0
- package/dist/cjs/utils/testUtils.js +95 -0
- package/dist/cjs/utils/testUtils.js.map +1 -0
- package/dist/cjs/utils/workerScript.d.ts +8 -0
- package/dist/cjs/utils/workerScript.d.ts.map +1 -0
- package/dist/cjs/utils/workerScript.js +23 -0
- package/dist/cjs/utils/workerScript.js.map +1 -0
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts +73 -0
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -0
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.js +80 -0
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.js.map +1 -0
- package/dist/cjs/whoCan/WhoCanProcessor.d.ts +400 -0
- package/dist/cjs/whoCan/WhoCanProcessor.d.ts.map +1 -0
- package/dist/cjs/whoCan/WhoCanProcessor.js +1088 -0
- package/dist/cjs/whoCan/WhoCanProcessor.js.map +1 -0
- package/dist/cjs/whoCan/WhoCanWorker.d.ts +87 -0
- package/dist/cjs/whoCan/WhoCanWorker.d.ts.map +1 -0
- package/dist/cjs/whoCan/WhoCanWorker.js +201 -0
- package/dist/cjs/whoCan/WhoCanWorker.js.map +1 -0
- package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.d.ts +2 -0
- package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.d.ts.map +1 -0
- package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js +189 -0
- package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js.map +1 -0
- package/dist/cjs/whoCan/principalArnFilter.d.ts +84 -0
- package/dist/cjs/whoCan/principalArnFilter.d.ts.map +1 -0
- package/dist/cjs/whoCan/principalArnFilter.js +258 -0
- package/dist/cjs/whoCan/principalArnFilter.js.map +1 -0
- package/dist/cjs/whoCan/principalScope.d.ts +35 -0
- package/dist/cjs/whoCan/principalScope.d.ts.map +1 -0
- package/dist/cjs/whoCan/principalScope.js +104 -0
- package/dist/cjs/whoCan/principalScope.js.map +1 -0
- package/dist/cjs/whoCan/requestAnalysis.d.ts +73 -0
- package/dist/cjs/whoCan/requestAnalysis.d.ts.map +1 -0
- package/dist/cjs/whoCan/requestAnalysis.js +87 -0
- package/dist/cjs/whoCan/requestAnalysis.js.map +1 -0
- package/dist/cjs/whoCan/untrustingActions.d.ts +7 -0
- package/dist/cjs/whoCan/untrustingActions.d.ts.map +1 -0
- package/dist/cjs/whoCan/untrustingActions.js +30 -0
- package/dist/cjs/whoCan/untrustingActions.js.map +1 -0
- package/dist/cjs/whoCan/whoCan.d.ts +295 -0
- package/dist/cjs/whoCan/whoCan.d.ts.map +1 -0
- package/dist/cjs/whoCan/whoCan.js +574 -0
- package/dist/cjs/whoCan/whoCan.js.map +1 -0
- package/dist/cjs/whoCan/workerBootstrapPlugin.d.ts +17 -0
- package/dist/cjs/whoCan/workerBootstrapPlugin.d.ts.map +1 -0
- package/dist/cjs/whoCan/workerBootstrapPlugin.js +3 -0
- package/dist/cjs/whoCan/workerBootstrapPlugin.js.map +1 -0
- package/dist/cjs/workers/ArrayStreamingWorkQueue.d.ts +15 -0
- package/dist/cjs/workers/ArrayStreamingWorkQueue.d.ts.map +1 -0
- package/dist/cjs/workers/ArrayStreamingWorkQueue.js +35 -0
- package/dist/cjs/workers/ArrayStreamingWorkQueue.js.map +1 -0
- package/dist/cjs/workers/JobRunner.d.ts +47 -0
- package/dist/cjs/workers/JobRunner.d.ts.map +1 -0
- package/dist/cjs/workers/JobRunner.js +101 -0
- package/dist/cjs/workers/JobRunner.js.map +1 -0
- package/dist/cjs/workers/RingQueue.d.ts +14 -0
- package/dist/cjs/workers/RingQueue.d.ts.map +1 -0
- package/dist/cjs/workers/RingQueue.js +43 -0
- package/dist/cjs/workers/RingQueue.js.map +1 -0
- package/dist/cjs/workers/SharedArrayBufferMainCache.d.ts +10 -0
- package/dist/cjs/workers/SharedArrayBufferMainCache.d.ts.map +1 -0
- package/dist/cjs/workers/SharedArrayBufferMainCache.js +37 -0
- package/dist/cjs/workers/SharedArrayBufferMainCache.js.map +1 -0
- package/dist/cjs/workers/SharedArrayBufferWorkerCache.d.ts +10 -0
- package/dist/cjs/workers/SharedArrayBufferWorkerCache.d.ts.map +1 -0
- package/dist/cjs/workers/SharedArrayBufferWorkerCache.js +49 -0
- package/dist/cjs/workers/SharedArrayBufferWorkerCache.js.map +1 -0
- package/dist/cjs/workers/StreamingWorkQueue.d.ts +18 -0
- package/dist/cjs/workers/StreamingWorkQueue.d.ts.map +1 -0
- package/dist/cjs/workers/StreamingWorkQueue.js +67 -0
- package/dist/cjs/workers/StreamingWorkQueue.js.map +1 -0
- package/dist/cjs/workers/buffers.d.ts +4 -0
- package/dist/cjs/workers/buffers.d.ts.map +1 -0
- package/dist/cjs/workers/buffers.js +26 -0
- package/dist/cjs/workers/buffers.js.map +1 -0
- package/dist/esm/cli.d.ts +3 -0
- package/dist/esm/cli.d.ts.map +1 -0
- package/dist/esm/cli.js +204 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/collect/client.d.ts +550 -0
- package/dist/esm/collect/client.d.ts.map +1 -0
- package/dist/esm/collect/client.js +1114 -0
- package/dist/esm/collect/client.js.map +1 -0
- package/dist/esm/collect/collect.d.ts +44 -0
- package/dist/esm/collect/collect.d.ts.map +1 -0
- package/dist/esm/collect/collect.js +51 -0
- package/dist/esm/collect/collect.js.map +1 -0
- package/dist/esm/collect/inMemoryClient.d.ts +6 -0
- package/dist/esm/collect/inMemoryClient.d.ts.map +1 -0
- package/dist/esm/collect/inMemoryClient.js +8 -0
- package/dist/esm/collect/inMemoryClient.js.map +1 -0
- package/dist/esm/index.d.ts +13 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/principalCan/permission.d.ts +125 -0
- package/dist/esm/principalCan/permission.d.ts.map +1 -0
- package/dist/esm/principalCan/permission.js +1212 -0
- package/dist/esm/principalCan/permission.js.map +1 -0
- package/dist/esm/principalCan/permissionSet.d.ts +140 -0
- package/dist/esm/principalCan/permissionSet.d.ts.map +1 -0
- package/dist/esm/principalCan/permissionSet.js +429 -0
- package/dist/esm/principalCan/permissionSet.js.map +1 -0
- package/dist/esm/principalCan/principalCan.d.ts +26 -0
- package/dist/esm/principalCan/principalCan.d.ts.map +1 -0
- package/dist/esm/principalCan/principalCan.js +193 -0
- package/dist/esm/principalCan/principalCan.js.map +1 -0
- package/dist/esm/principalCan/principalConstraints.d.ts +147 -0
- package/dist/esm/principalCan/principalConstraints.d.ts.map +1 -0
- package/dist/esm/principalCan/principalConstraints.js +456 -0
- package/dist/esm/principalCan/principalConstraints.js.map +1 -0
- package/dist/esm/principalCan/resources/actions.d.ts +9 -0
- package/dist/esm/principalCan/resources/actions.d.ts.map +1 -0
- package/dist/esm/principalCan/resources/actions.js +24 -0
- package/dist/esm/principalCan/resources/actions.js.map +1 -0
- package/dist/esm/principalCan/resources/resourceTypes/iamRoles.d.ts +31 -0
- package/dist/esm/principalCan/resources/resourceTypes/iamRoles.d.ts.map +1 -0
- package/dist/esm/principalCan/resources/resourceTypes/iamRoles.js +110 -0
- package/dist/esm/principalCan/resources/resourceTypes/iamRoles.js.map +1 -0
- package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.d.ts +30 -0
- package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.d.ts.map +1 -0
- package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.js +106 -0
- package/dist/esm/principalCan/resources/resourceTypes/kmsKeys.js.map +1 -0
- package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.d.ts +18 -0
- package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.d.ts.map +1 -0
- package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.js +120 -0
- package/dist/esm/principalCan/resources/resourceTypes/s3Buckets.js.map +1 -0
- package/dist/esm/principalCan/resources/statements.d.ts +27 -0
- package/dist/esm/principalCan/resources/statements.d.ts.map +1 -0
- package/dist/esm/principalCan/resources/statements.js +117 -0
- package/dist/esm/principalCan/resources/statements.js.map +1 -0
- package/dist/esm/principalIndex/makePrincipalIndex.d.ts +8 -0
- package/dist/esm/principalIndex/makePrincipalIndex.d.ts.map +1 -0
- package/dist/esm/principalIndex/makePrincipalIndex.js +104 -0
- package/dist/esm/principalIndex/makePrincipalIndex.js.map +1 -0
- package/dist/esm/principals.d.ts +54 -0
- package/dist/esm/principals.d.ts.map +1 -0
- package/dist/esm/principals.js +133 -0
- package/dist/esm/principals.js.map +1 -0
- package/dist/esm/resources.d.ts +32 -0
- package/dist/esm/resources.d.ts.map +1 -0
- package/dist/esm/resources.js +69 -0
- package/dist/esm/resources.js.map +1 -0
- package/dist/esm/simulate/contextKeys.d.ts +68 -0
- package/dist/esm/simulate/contextKeys.d.ts.map +1 -0
- package/dist/esm/simulate/contextKeys.js +287 -0
- package/dist/esm/simulate/contextKeys.js.map +1 -0
- package/dist/esm/simulate/simulate.d.ts +72 -0
- package/dist/esm/simulate/simulate.d.ts.map +1 -0
- package/dist/esm/simulate/simulate.js +295 -0
- package/dist/esm/simulate/simulate.js.map +1 -0
- package/dist/esm/test-datasets/testClient.d.ts +17 -0
- package/dist/esm/test-datasets/testClient.d.ts.map +1 -0
- package/dist/esm/test-datasets/testClient.js +56 -0
- package/dist/esm/test-datasets/testClient.js.map +1 -0
- package/dist/esm/utils/arn.d.ts +22 -0
- package/dist/esm/utils/arn.d.ts.map +1 -0
- package/dist/esm/utils/arn.js +43 -0
- package/dist/esm/utils/arn.js.map +1 -0
- package/dist/esm/utils/bitset.d.ts +45 -0
- package/dist/esm/utils/bitset.d.ts.map +1 -0
- package/dist/esm/utils/bitset.js +141 -0
- package/dist/esm/utils/bitset.js.map +1 -0
- package/dist/esm/utils/dynamicImport.d.ts +31 -0
- package/dist/esm/utils/dynamicImport.d.ts.map +1 -0
- package/dist/esm/utils/dynamicImport.js +60 -0
- package/dist/esm/utils/dynamicImport.js.map +1 -0
- package/dist/esm/utils/packageVersion.d.ts +5 -0
- package/dist/esm/utils/packageVersion.d.ts.map +1 -0
- package/dist/esm/utils/packageVersion.js +22 -0
- package/dist/esm/utils/packageVersion.js.map +1 -0
- package/dist/esm/utils/readPackageFile.d.ts +3 -0
- package/dist/esm/utils/readPackageFile.d.ts.map +1 -0
- package/dist/esm/utils/readPackageFile.js +15 -0
- package/dist/esm/utils/readPackageFile.js.map +1 -0
- package/dist/esm/utils/readPackageFileEsm.d.ts.map +1 -0
- package/dist/esm/utils/s3Abac.d.ts +3 -0
- package/dist/esm/utils/s3Abac.d.ts.map +1 -0
- package/dist/esm/utils/s3Abac.js +2 -0
- package/dist/esm/utils/s3Abac.js.map +1 -0
- package/dist/esm/utils/stringOrFileArgument.d.ts +9 -0
- package/dist/esm/utils/stringOrFileArgument.d.ts.map +1 -0
- package/dist/esm/utils/stringOrFileArgument.js +22 -0
- package/dist/esm/utils/stringOrFileArgument.js.map +1 -0
- package/dist/esm/utils/sts.d.ts +2 -0
- package/dist/esm/utils/sts.d.ts.map +1 -0
- package/dist/esm/utils/sts.js +6 -0
- package/dist/esm/utils/sts.js.map +1 -0
- package/dist/esm/utils/testUtils.d.ts +56 -0
- package/dist/esm/utils/testUtils.d.ts.map +1 -0
- package/dist/esm/utils/testUtils.js +90 -0
- package/dist/esm/utils/testUtils.js.map +1 -0
- package/dist/esm/utils/workerScript.d.ts +8 -0
- package/dist/esm/utils/workerScript.d.ts.map +1 -0
- package/dist/esm/utils/workerScript.js +18 -0
- package/dist/esm/utils/workerScript.js.map +1 -0
- package/dist/esm/utils/workerScriptEsm.d.ts.map +1 -0
- package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts +73 -0
- package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -0
- package/dist/esm/whoCan/WhoCanMainThreadWorker.js +81 -0
- package/dist/esm/whoCan/WhoCanMainThreadWorker.js.map +1 -0
- package/dist/esm/whoCan/WhoCanProcessor.d.ts +400 -0
- package/dist/esm/whoCan/WhoCanProcessor.d.ts.map +1 -0
- package/dist/esm/whoCan/WhoCanProcessor.js +1080 -0
- package/dist/esm/whoCan/WhoCanProcessor.js.map +1 -0
- package/dist/esm/whoCan/WhoCanWorker.d.ts +87 -0
- package/dist/esm/whoCan/WhoCanWorker.d.ts.map +1 -0
- package/dist/esm/whoCan/WhoCanWorker.js +198 -0
- package/dist/esm/whoCan/WhoCanWorker.js.map +1 -0
- package/dist/esm/whoCan/WhoCanWorkerThreadWorker.d.ts +2 -0
- package/dist/esm/whoCan/WhoCanWorkerThreadWorker.d.ts.map +1 -0
- package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js +193 -0
- package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js.map +1 -0
- package/dist/esm/whoCan/principalArnFilter.d.ts +84 -0
- package/dist/esm/whoCan/principalArnFilter.d.ts.map +1 -0
- package/dist/esm/whoCan/principalArnFilter.js +253 -0
- package/dist/esm/whoCan/principalArnFilter.js.map +1 -0
- package/dist/esm/whoCan/principalScope.d.ts +35 -0
- package/dist/esm/whoCan/principalScope.d.ts.map +1 -0
- package/dist/esm/whoCan/principalScope.js +102 -0
- package/dist/esm/whoCan/principalScope.js.map +1 -0
- package/dist/esm/whoCan/requestAnalysis.d.ts +73 -0
- package/dist/esm/whoCan/requestAnalysis.d.ts.map +1 -0
- package/dist/esm/whoCan/requestAnalysis.js +83 -0
- package/dist/esm/whoCan/requestAnalysis.js.map +1 -0
- package/dist/esm/whoCan/untrustingActions.d.ts +7 -0
- package/dist/esm/whoCan/untrustingActions.d.ts.map +1 -0
- package/dist/esm/whoCan/untrustingActions.js +27 -0
- package/dist/esm/whoCan/untrustingActions.js.map +1 -0
- package/dist/esm/whoCan/whoCan.d.ts +295 -0
- package/dist/esm/whoCan/whoCan.d.ts.map +1 -0
- package/dist/esm/whoCan/whoCan.js +571 -0
- package/dist/esm/whoCan/whoCan.js.map +1 -0
- package/dist/esm/whoCan/workerBootstrapPlugin.d.ts +17 -0
- package/dist/esm/whoCan/workerBootstrapPlugin.d.ts.map +1 -0
- package/dist/esm/whoCan/workerBootstrapPlugin.js +2 -0
- package/dist/esm/whoCan/workerBootstrapPlugin.js.map +1 -0
- package/dist/esm/workers/ArrayStreamingWorkQueue.d.ts +15 -0
- package/dist/esm/workers/ArrayStreamingWorkQueue.d.ts.map +1 -0
- package/dist/esm/workers/ArrayStreamingWorkQueue.js +31 -0
- package/dist/esm/workers/ArrayStreamingWorkQueue.js.map +1 -0
- package/dist/esm/workers/JobRunner.d.ts +47 -0
- package/dist/esm/workers/JobRunner.d.ts.map +1 -0
- package/dist/esm/workers/JobRunner.js +94 -0
- package/dist/esm/workers/JobRunner.js.map +1 -0
- package/dist/esm/workers/RingQueue.d.ts +14 -0
- package/dist/esm/workers/RingQueue.d.ts.map +1 -0
- package/dist/esm/workers/RingQueue.js +36 -0
- package/dist/esm/workers/RingQueue.js.map +1 -0
- package/dist/esm/workers/SharedArrayBufferMainCache.d.ts +10 -0
- package/dist/esm/workers/SharedArrayBufferMainCache.d.ts.map +1 -0
- package/dist/esm/workers/SharedArrayBufferMainCache.js +34 -0
- package/dist/esm/workers/SharedArrayBufferMainCache.js.map +1 -0
- package/dist/esm/workers/SharedArrayBufferWorkerCache.d.ts +10 -0
- package/dist/esm/workers/SharedArrayBufferWorkerCache.d.ts.map +1 -0
- package/dist/esm/workers/SharedArrayBufferWorkerCache.js +46 -0
- package/dist/esm/workers/SharedArrayBufferWorkerCache.js.map +1 -0
- package/dist/esm/workers/StreamingWorkQueue.d.ts +18 -0
- package/dist/esm/workers/StreamingWorkQueue.d.ts.map +1 -0
- package/dist/esm/workers/StreamingWorkQueue.js +61 -0
- package/dist/esm/workers/StreamingWorkQueue.js.map +1 -0
- package/dist/esm/workers/buffers.d.ts +4 -0
- package/dist/esm/workers/buffers.d.ts.map +1 -0
- package/dist/esm/workers/buffers.js +21 -0
- package/dist/esm/workers/buffers.js.map +1 -0
- package/package.json +132 -0
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
import {} from '@actsecurity/iam-collect';
|
|
2
|
+
import { IamCollectClient } from '../collect/client.js';
|
|
3
|
+
import {} from '../collect/collect.js';
|
|
4
|
+
import { iamActionDetails, iamActionExists, iamActionsForService, iamResourceTypeDetails, iamResourceTypesForService, iamServiceExists } from '@actsecurity/iam-data';
|
|
5
|
+
import { loadPolicy } from '@actsecurity/iam-policy';
|
|
6
|
+
import {} from '@actsecurity/iam-simulate';
|
|
7
|
+
import { mostSpecificMatchingResourceTypePatterns, splitArnParts } from '@actsecurity/iam-utils';
|
|
8
|
+
import { Arn } from '../utils/arn.js';
|
|
9
|
+
import {} from '../utils/s3Abac.js';
|
|
10
|
+
import { AssumeRoleActions } from '../utils/sts.js';
|
|
11
|
+
import {} from './requestAnalysis.js';
|
|
12
|
+
import { WhoCanProcessor } from './WhoCanProcessor.js';
|
|
13
|
+
/**
|
|
14
|
+
* Processes a single whoCan request by creating a temporary WhoCanProcessor,
|
|
15
|
+
* enqueuing the request, waiting for it to settle, and shutting down. This
|
|
16
|
+
* preserves the original one-shot behavior where workers and cache are created
|
|
17
|
+
* and destroyed per call.
|
|
18
|
+
*
|
|
19
|
+
* For better performance when running multiple requests, use WhoCanProcessor
|
|
20
|
+
* directly to keep workers and cache alive across calls.
|
|
21
|
+
*
|
|
22
|
+
* @param collectConfigs the collect configurations for loading IAM data
|
|
23
|
+
* @param partition the AWS partition (e.g. 'aws', 'aws-cn')
|
|
24
|
+
* @param request the whoCan request parameters
|
|
25
|
+
* @returns the whoCan response with allowed principals and optional deny details
|
|
26
|
+
*/
|
|
27
|
+
export async function whoCan(collectConfigs, partition, request) {
|
|
28
|
+
let settledEvent;
|
|
29
|
+
const processor = await WhoCanProcessor.create({
|
|
30
|
+
collectConfigs,
|
|
31
|
+
partition,
|
|
32
|
+
tuning: {
|
|
33
|
+
workerThreads: request.workerThreads
|
|
34
|
+
},
|
|
35
|
+
ignorePrincipalIndex: request.ignorePrincipalIndex,
|
|
36
|
+
clientFactoryPlugin: request.clientFactoryPlugin,
|
|
37
|
+
workerBootstrapPlugin: request.workerBootstrapPlugin,
|
|
38
|
+
s3AbacOverride: request.s3AbacOverride,
|
|
39
|
+
collectGrantDetails: !!request.collectGrantDetails,
|
|
40
|
+
onRequestSettled: async (event) => {
|
|
41
|
+
settledEvent = event;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
try {
|
|
45
|
+
processor.enqueueWhoCan({
|
|
46
|
+
resource: request.resource,
|
|
47
|
+
resourceAccount: request.resourceAccount,
|
|
48
|
+
actions: request.actions,
|
|
49
|
+
sort: request.sort,
|
|
50
|
+
denyDetailsCallback: request.denyDetailsCallback,
|
|
51
|
+
principalScope: request.principalScope,
|
|
52
|
+
strictContextKeys: request.strictContextKeys
|
|
53
|
+
});
|
|
54
|
+
await processor.waitForIdle();
|
|
55
|
+
if (!settledEvent) {
|
|
56
|
+
throw new Error('whoCan request did not settle');
|
|
57
|
+
}
|
|
58
|
+
if (settledEvent.status === 'rejected') {
|
|
59
|
+
throw settledEvent.error;
|
|
60
|
+
}
|
|
61
|
+
return settledEvent.result;
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
await processor.shutdown();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function uniqueAccountsToCheck(collectClient, accountsToCheck) {
|
|
68
|
+
const returnValue = {
|
|
69
|
+
accountsNotFound: [],
|
|
70
|
+
organizationsNotFound: [],
|
|
71
|
+
organizationalUnitsNotFound: [],
|
|
72
|
+
accounts: []
|
|
73
|
+
};
|
|
74
|
+
if (accountsToCheck.allAccounts) {
|
|
75
|
+
returnValue.accounts = await collectClient.allAccounts();
|
|
76
|
+
return returnValue;
|
|
77
|
+
}
|
|
78
|
+
const uniqueAccounts = new Set();
|
|
79
|
+
for (const account of accountsToCheck.specificAccounts || []) {
|
|
80
|
+
const accountExists = await collectClient.accountExists(account);
|
|
81
|
+
if (accountExists) {
|
|
82
|
+
uniqueAccounts.add(account);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
returnValue.accountsNotFound.push(account);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
for (const ouPath of accountsToCheck.specificOrganizationalUnits || []) {
|
|
89
|
+
const parts = ouPath.split('/');
|
|
90
|
+
const orgId = parts[0];
|
|
91
|
+
const pathParts = parts.slice(1);
|
|
92
|
+
const [found, accounts] = await collectClient.getAccountsForOrgPath(orgId, pathParts);
|
|
93
|
+
for (const account of accounts) {
|
|
94
|
+
uniqueAccounts.add(account);
|
|
95
|
+
}
|
|
96
|
+
if (!found) {
|
|
97
|
+
returnValue.organizationalUnitsNotFound.push(ouPath);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
for (const orgId of accountsToCheck.specificOrganizations || []) {
|
|
101
|
+
const [found, accounts] = await collectClient.getAccountsForOrganization(orgId);
|
|
102
|
+
for (const account of accounts) {
|
|
103
|
+
uniqueAccounts.add(account);
|
|
104
|
+
}
|
|
105
|
+
if (!found) {
|
|
106
|
+
returnValue.organizationsNotFound.push(orgId);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
returnValue.accounts = Array.from(uniqueAccounts);
|
|
110
|
+
return returnValue;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Splits an ARN-like string on `:` while treating `${...}` blocks as opaque.
|
|
114
|
+
* Colons inside `${...}` dynamic variable references are not used as split points.
|
|
115
|
+
*
|
|
116
|
+
* For example, `arn:${aws:Partition}:iam::999999999999:role/*` splits into
|
|
117
|
+
* `['arn', '${aws:Partition}', 'iam', '', '999999999999', 'role/*']`.
|
|
118
|
+
*
|
|
119
|
+
* @param value - The raw ARN string, possibly containing `${...}` references.
|
|
120
|
+
* @returns An array of colon-delimited segments.
|
|
121
|
+
*/
|
|
122
|
+
function splitArnIgnoringDynamicVars(value) {
|
|
123
|
+
const segments = [];
|
|
124
|
+
let current = '';
|
|
125
|
+
let depth = 0;
|
|
126
|
+
for (let i = 0; i < value.length; i++) {
|
|
127
|
+
const ch = value[i];
|
|
128
|
+
if (ch === '$' && i + 1 < value.length && value[i + 1] === '{') {
|
|
129
|
+
depth++;
|
|
130
|
+
current += '${';
|
|
131
|
+
i++; // skip the '{'
|
|
132
|
+
}
|
|
133
|
+
else if (ch === '}' && depth > 0) {
|
|
134
|
+
depth--;
|
|
135
|
+
current += '}';
|
|
136
|
+
}
|
|
137
|
+
else if (ch === ':' && depth === 0) {
|
|
138
|
+
segments.push(current);
|
|
139
|
+
current = '';
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
current += ch;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
segments.push(current);
|
|
146
|
+
return segments;
|
|
147
|
+
}
|
|
148
|
+
const PRINCIPAL_ARN_PATTERN_OPERATORS = new Set(['stringlike', 'arnequals', 'arnlike']);
|
|
149
|
+
/**
|
|
150
|
+
* Checks whether a string contains any wildcard or dynamic variable characters
|
|
151
|
+
* (`*`, `?`, or `$`).
|
|
152
|
+
*
|
|
153
|
+
* @param value - The string to check.
|
|
154
|
+
* @returns `true` if the string contains `*`, `?`, or `$`.
|
|
155
|
+
*/
|
|
156
|
+
function hasWildcardOrDynamic(value) {
|
|
157
|
+
return value.includes('*') || value.includes('?') || value.includes('$');
|
|
158
|
+
}
|
|
159
|
+
/** The 3 scalar condition keys that are only populated for service principal requests. */
|
|
160
|
+
const UNNAMED_SERVICE_SCALAR_KEYS = new Set([
|
|
161
|
+
'aws:sourceaccount',
|
|
162
|
+
'aws:sourceowner',
|
|
163
|
+
'aws:sourceorgid'
|
|
164
|
+
]);
|
|
165
|
+
/**
|
|
166
|
+
* Checks whether a positive operator is used on a scalar service-principal-only key.
|
|
167
|
+
* Accepts `StringEquals` family and `StringLike`.
|
|
168
|
+
*
|
|
169
|
+
* @param op - The condition operation to check.
|
|
170
|
+
* @returns `true` if the operator is a positive match for a scalar key.
|
|
171
|
+
*/
|
|
172
|
+
function isPositiveScalarOperator(op) {
|
|
173
|
+
return (op.value().toLowerCase().startsWith('stringequals') ||
|
|
174
|
+
op.baseOperator().toLowerCase() === 'stringlike');
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Checks whether a positive operator is used on the `aws:SourceOrgPaths` array key.
|
|
178
|
+
* Only `ForAnyValue:StringEquals*` and `ForAnyValue:StringLike` qualify.
|
|
179
|
+
* `ForAllValues` and plain operators without a set operator do not.
|
|
180
|
+
*
|
|
181
|
+
* @param op - The condition operation to check.
|
|
182
|
+
* @returns `true` if the operator is a valid positive match for the array key.
|
|
183
|
+
*/
|
|
184
|
+
function isPositiveOrgPathsOperator(op) {
|
|
185
|
+
if (op.setOperator() !== 'ForAnyValue')
|
|
186
|
+
return false;
|
|
187
|
+
const base = op.baseOperator().toLowerCase();
|
|
188
|
+
return base.startsWith('stringequals') || base === 'stringlike';
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Inspects a statement's conditions to determine if the statement effectively
|
|
192
|
+
* requires an AWS service principal. Used for wildcard-principal Allow statements
|
|
193
|
+
* to avoid unnecessarily widening the whoCan search scope.
|
|
194
|
+
*
|
|
195
|
+
* @param conditions - The conditions from the statement to inspect.
|
|
196
|
+
* @returns A classification indicating whether the statement is not service-only,
|
|
197
|
+
* requires an unnamed service principal (skip entirely), or names specific
|
|
198
|
+
* service principals (extract for simulation).
|
|
199
|
+
*/
|
|
200
|
+
function checkForServicePrincipalConditions(conditions) {
|
|
201
|
+
let hasUnnamedServiceKey = false;
|
|
202
|
+
const namedServicePrincipals = [];
|
|
203
|
+
for (const cond of conditions) {
|
|
204
|
+
const key = cond.conditionKey().toLowerCase();
|
|
205
|
+
const op = cond.operation();
|
|
206
|
+
if (op.isIfExists())
|
|
207
|
+
continue;
|
|
208
|
+
// Category 1a: Scalar unnamed keys (aws:SourceAccount, aws:SourceOwner, aws:SourceOrgID)
|
|
209
|
+
if (UNNAMED_SERVICE_SCALAR_KEYS.has(key) && isPositiveScalarOperator(op)) {
|
|
210
|
+
hasUnnamedServiceKey = true;
|
|
211
|
+
}
|
|
212
|
+
// Category 1b: Array unnamed key (aws:SourceOrgPaths) — requires ForAnyValue
|
|
213
|
+
if (key === 'aws:sourceorgpaths' && isPositiveOrgPathsOperator(op)) {
|
|
214
|
+
hasUnnamedServiceKey = true;
|
|
215
|
+
}
|
|
216
|
+
// Category 1c: aws:PrincipalIsAWSService with Bool or StringEquals and value 'true'
|
|
217
|
+
// Multiple condition values are ORed, so mixed ['true', 'false'] is NOT service-only.
|
|
218
|
+
// All values must be 'true' for the condition to exclusively require a service principal.
|
|
219
|
+
if (key === 'aws:principalisawsservice') {
|
|
220
|
+
const baseOp = op.baseOperator().toLowerCase();
|
|
221
|
+
const opVal = op.value().toLowerCase();
|
|
222
|
+
const isBoolOrStringEquals = baseOp === 'bool' || opVal.startsWith('stringequals');
|
|
223
|
+
const values = cond.conditionValues();
|
|
224
|
+
if (isBoolOrStringEquals &&
|
|
225
|
+
values.length > 0 &&
|
|
226
|
+
values.every((v) => v.toLowerCase() === 'true')) {
|
|
227
|
+
hasUnnamedServiceKey = true;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Category 2: aws:PrincipalServiceName — extract named service principals
|
|
231
|
+
if (key === 'aws:principalservicename' &&
|
|
232
|
+
op.value().toLowerCase().startsWith('stringequals') &&
|
|
233
|
+
!cond.conditionValues().some((v) => v.includes('$'))) {
|
|
234
|
+
namedServicePrincipals.push(...cond.conditionValues());
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Named takes priority — the simulator fills aws:SourceAccount etc. for service principals
|
|
238
|
+
if (namedServicePrincipals.length > 0) {
|
|
239
|
+
return { type: 'named-service-only', principals: namedServicePrincipals };
|
|
240
|
+
}
|
|
241
|
+
if (hasUnnamedServiceKey) {
|
|
242
|
+
return { type: 'unnamed-service-only' };
|
|
243
|
+
}
|
|
244
|
+
return { type: 'not-service-only' };
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Derives the accounts and specific principals that should be considered from a resource policy.
|
|
248
|
+
*
|
|
249
|
+
* Specific STS session principals are resolved through collect data so account-enumeration
|
|
250
|
+
* paths can de-duplicate path-qualified roles that resolve from pathless session ARNs.
|
|
251
|
+
*
|
|
252
|
+
* @param resourcePolicy The resource policy document to inspect.
|
|
253
|
+
* @param resourceAccount The account ID that owns the resource, when known.
|
|
254
|
+
* @param collectClient The collect client used to resolve canonical principal ARNs.
|
|
255
|
+
* @returns The accounts, principals, organizations, and related flags to consider for whoCan.
|
|
256
|
+
*/
|
|
257
|
+
export async function accountsToCheckBasedOnResourcePolicy(resourcePolicy, resourceAccount, collectClient) {
|
|
258
|
+
const accountsToCheck = {
|
|
259
|
+
allAccounts: false,
|
|
260
|
+
specificAccounts: [],
|
|
261
|
+
specificPrincipals: [],
|
|
262
|
+
specificOrganizations: [],
|
|
263
|
+
specificOrganizationalUnits: [],
|
|
264
|
+
checkAnonymous: false,
|
|
265
|
+
checkAllFromResourceAccount: false,
|
|
266
|
+
resourceAccountTrustedByPolicy: false
|
|
267
|
+
};
|
|
268
|
+
if (!resourcePolicy) {
|
|
269
|
+
return accountsToCheck;
|
|
270
|
+
}
|
|
271
|
+
const policy = loadPolicy(resourcePolicy);
|
|
272
|
+
for (const statement of policy.statements()) {
|
|
273
|
+
if (statement.isAllow() && statement.isNotPrincipalStatement()) {
|
|
274
|
+
accountsToCheck.allAccounts = true;
|
|
275
|
+
accountsToCheck.checkAllFromResourceAccount = true;
|
|
276
|
+
accountsToCheck.resourceAccountTrustedByPolicy = true;
|
|
277
|
+
}
|
|
278
|
+
if (statement.isAllow() && statement.isPrincipalStatement()) {
|
|
279
|
+
const principals = statement.principals();
|
|
280
|
+
let hasWildcardPrincipal = false;
|
|
281
|
+
for (const principal of principals) {
|
|
282
|
+
if (principal.isWildcardPrincipal()) {
|
|
283
|
+
hasWildcardPrincipal = true;
|
|
284
|
+
}
|
|
285
|
+
else if (principal.isAccountPrincipal()) {
|
|
286
|
+
accountsToCheck.specificAccounts.push(principal.accountId());
|
|
287
|
+
if (principal.accountId() === resourceAccount) {
|
|
288
|
+
accountsToCheck.resourceAccountTrustedByPolicy = true;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
accountsToCheck.specificPrincipals.push(await resolveResourcePolicyPrincipalArn(principal.value(), collectClient));
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (hasWildcardPrincipal) {
|
|
296
|
+
const serviceCheck = checkForServicePrincipalConditions(statement.conditions());
|
|
297
|
+
if (serviceCheck.type === 'unnamed-service-only') {
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
if (serviceCheck.type === 'named-service-only') {
|
|
301
|
+
accountsToCheck.specificPrincipals.push(...serviceCheck.principals);
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
const specificOrgs = [];
|
|
305
|
+
const specificOus = [];
|
|
306
|
+
const specificAccounts = [];
|
|
307
|
+
const specificPrincipals = [];
|
|
308
|
+
let principalArnRequiresAllAccounts = false;
|
|
309
|
+
let hasNonPrincipalArnAccountNarrowing = false;
|
|
310
|
+
const conditions = statement.conditions();
|
|
311
|
+
for (const cond of conditions) {
|
|
312
|
+
const condKey = cond.conditionKey().toLowerCase();
|
|
313
|
+
if (condKey === 'aws:principalorgid' &&
|
|
314
|
+
cond.operation().value().toLowerCase().startsWith('stringequals') &&
|
|
315
|
+
!cond.conditionValues().some((v) => v.includes('$'))) {
|
|
316
|
+
specificOrgs.push(...cond.conditionValues());
|
|
317
|
+
}
|
|
318
|
+
if (condKey === 'aws:principalorgpaths' &&
|
|
319
|
+
cond.operation().baseOperator().toLowerCase().startsWith('stringequals') &&
|
|
320
|
+
!cond.conditionValues().some((v) => v.includes('$'))) {
|
|
321
|
+
specificOus.push(...cond.conditionValues());
|
|
322
|
+
}
|
|
323
|
+
if (condKey === 'aws:principalaccount' || condKey === 'kms:calleraccount') {
|
|
324
|
+
const opVal = cond.operation().value().toLowerCase();
|
|
325
|
+
const baseOp = cond.operation().baseOperator().toLowerCase();
|
|
326
|
+
const values = cond.conditionValues();
|
|
327
|
+
const hasDynamic = values.some((v) => v.includes('$'));
|
|
328
|
+
if (opVal.startsWith('stringequals') && !hasDynamic) {
|
|
329
|
+
// StringEquals family — all values are literal account IDs
|
|
330
|
+
specificAccounts.push(...values);
|
|
331
|
+
hasNonPrincipalArnAccountNarrowing = true;
|
|
332
|
+
}
|
|
333
|
+
else if (baseOp === 'stringlike' &&
|
|
334
|
+
!hasDynamic &&
|
|
335
|
+
values.every((v) => !v.includes('*') && !v.includes('?'))) {
|
|
336
|
+
// StringLike where ALL values are literal (no wildcards or dynamic vars)
|
|
337
|
+
specificAccounts.push(...values);
|
|
338
|
+
hasNonPrincipalArnAccountNarrowing = true;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
if (condKey === 'aws:principalarn') {
|
|
342
|
+
const opValue = cond.operation().value().toLowerCase();
|
|
343
|
+
const baseOp = cond.operation().baseOperator().toLowerCase();
|
|
344
|
+
const isExactOperator = opValue.startsWith('stringequals');
|
|
345
|
+
const isPatternOperator = PRINCIPAL_ARN_PATTERN_OPERATORS.has(baseOp);
|
|
346
|
+
if (!isExactOperator && !isPatternOperator) {
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
if (cond.operation().isIfExists()) {
|
|
350
|
+
accountsToCheck.checkAnonymous = true;
|
|
351
|
+
}
|
|
352
|
+
for (const value of cond.conditionValues()) {
|
|
353
|
+
let extractedPrincipalArnScope = false;
|
|
354
|
+
if (!hasWildcardOrDynamic(value)) {
|
|
355
|
+
// Exact literal — push as a specific principal
|
|
356
|
+
specificPrincipals.push(await resolveResourcePolicyPrincipalArn(value, collectClient));
|
|
357
|
+
extractedPrincipalArnScope = true;
|
|
358
|
+
}
|
|
359
|
+
else if (isExactOperator && !value.includes('*') && !value.includes('?')) {
|
|
360
|
+
// Exact operator with a dynamic variable but no wildcards — try account extraction
|
|
361
|
+
const segments = splitArnIgnoringDynamicVars(value);
|
|
362
|
+
if (segments.length >= 6 && segments[0].toLowerCase() === 'arn') {
|
|
363
|
+
const account = segments[4];
|
|
364
|
+
if (account && !hasWildcardOrDynamic(account)) {
|
|
365
|
+
specificAccounts.push(account);
|
|
366
|
+
extractedPrincipalArnScope = true;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
// Pattern operator or value with wildcards — try account extraction
|
|
372
|
+
const segments = splitArnIgnoringDynamicVars(value);
|
|
373
|
+
if (segments.length >= 6 && segments[0].toLowerCase() === 'arn') {
|
|
374
|
+
const account = segments[4];
|
|
375
|
+
if (account && !hasWildcardOrDynamic(account)) {
|
|
376
|
+
specificAccounts.push(account);
|
|
377
|
+
extractedPrincipalArnScope = true;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
if (!extractedPrincipalArnScope) {
|
|
382
|
+
// Wildcard-account or otherwise non-extractable PrincipalArn patterns can match any account.
|
|
383
|
+
principalArnRequiresAllAccounts = true;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (specificPrincipals.length > 0) {
|
|
389
|
+
accountsToCheck.specificPrincipals.push(...specificPrincipals);
|
|
390
|
+
}
|
|
391
|
+
if (principalArnRequiresAllAccounts &&
|
|
392
|
+
specificOus.length === 0 &&
|
|
393
|
+
specificOrgs.length === 0 &&
|
|
394
|
+
!hasNonPrincipalArnAccountNarrowing) {
|
|
395
|
+
accountsToCheck.allAccounts = true;
|
|
396
|
+
accountsToCheck.resourceAccountTrustedByPolicy = true;
|
|
397
|
+
accountsToCheck.checkAllFromResourceAccount = true;
|
|
398
|
+
if (specificAccounts.length > 0) {
|
|
399
|
+
accountsToCheck.specificAccounts.push(...specificAccounts);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
else if (specificAccounts.length > 0) {
|
|
403
|
+
accountsToCheck.specificAccounts.push(...specificAccounts);
|
|
404
|
+
if (resourceAccount && specificAccounts.includes(resourceAccount)) {
|
|
405
|
+
accountsToCheck.resourceAccountTrustedByPolicy = true;
|
|
406
|
+
accountsToCheck.checkAllFromResourceAccount = true;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
else if (specificOus.length > 0) {
|
|
410
|
+
accountsToCheck.specificOrganizationalUnits.push(...specificOus);
|
|
411
|
+
// The resource account may be in these OUs; conservatively assume trusted
|
|
412
|
+
accountsToCheck.resourceAccountTrustedByPolicy = true;
|
|
413
|
+
accountsToCheck.checkAllFromResourceAccount = true;
|
|
414
|
+
}
|
|
415
|
+
else if (specificOrgs.length > 0) {
|
|
416
|
+
accountsToCheck.specificOrganizations.push(...specificOrgs);
|
|
417
|
+
// The resource account may be in these orgs; conservatively assume trusted
|
|
418
|
+
accountsToCheck.resourceAccountTrustedByPolicy = true;
|
|
419
|
+
accountsToCheck.checkAllFromResourceAccount = true;
|
|
420
|
+
}
|
|
421
|
+
else if (specificPrincipals.length === 0) {
|
|
422
|
+
accountsToCheck.allAccounts = true;
|
|
423
|
+
accountsToCheck.resourceAccountTrustedByPolicy = true;
|
|
424
|
+
accountsToCheck.checkAllFromResourceAccount = true;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
return accountsToCheck;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Resolves a resource-policy principal to the canonical collected principal ARN.
|
|
433
|
+
*
|
|
434
|
+
* Resource policies can name STS assumed-role sessions, including pathless session
|
|
435
|
+
* ARNs for path-qualified IAM roles. Resolve through collect data first so
|
|
436
|
+
* whoCan can de-duplicate those principals before simulation, then preserve the
|
|
437
|
+
* previous session-to-role conversion behavior when the principal is not found.
|
|
438
|
+
*
|
|
439
|
+
* @param principalArn The resource-policy principal ARN or service principal to resolve.
|
|
440
|
+
* @param collectClient The collect client used to resolve canonical principal ARNs.
|
|
441
|
+
* @returns The canonical collected ARN when found, otherwise the original principal ARN.
|
|
442
|
+
*/
|
|
443
|
+
async function resolveResourcePolicyPrincipalArn(principalArn, collectClient) {
|
|
444
|
+
if (!principalArn.startsWith('arn:')) {
|
|
445
|
+
return principalArn;
|
|
446
|
+
}
|
|
447
|
+
return (await collectClient.resolvePrincipalArn(principalArn)) ?? principalArn;
|
|
448
|
+
}
|
|
449
|
+
export async function actionsForWhoCan(request) {
|
|
450
|
+
const { actions } = request;
|
|
451
|
+
if (actions && actions.length > 0) {
|
|
452
|
+
const validActions = [];
|
|
453
|
+
for (const action of actions) {
|
|
454
|
+
const parts = action.split(':');
|
|
455
|
+
if (parts.length !== 2) {
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
const [service, actionName] = parts;
|
|
459
|
+
const serviceExists = await iamServiceExists(service);
|
|
460
|
+
if (!serviceExists) {
|
|
461
|
+
continue;
|
|
462
|
+
}
|
|
463
|
+
const actionExists = await iamActionExists(service, actionName);
|
|
464
|
+
if (!actionExists) {
|
|
465
|
+
continue;
|
|
466
|
+
}
|
|
467
|
+
validActions.push(action);
|
|
468
|
+
}
|
|
469
|
+
return validActions;
|
|
470
|
+
}
|
|
471
|
+
if (!request.resource) {
|
|
472
|
+
return [];
|
|
473
|
+
}
|
|
474
|
+
return lookupActionsForResourceArn(request.resource);
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Get the the possible resource types for an action and resource
|
|
478
|
+
*
|
|
479
|
+
* @param service the service the action belongs to
|
|
480
|
+
* @param action the action to get the resource type for
|
|
481
|
+
* @param resourceArn the resource type matching the action, if any
|
|
482
|
+
* @throws an error if the service or action does not exist, or if the action is a wildcard only action
|
|
483
|
+
*/
|
|
484
|
+
export async function lookupActionsForResourceArn(resourceArn) {
|
|
485
|
+
const [service, resourceType] = await findResourceTypeForArn(resourceArn);
|
|
486
|
+
const resourceTypeKey = resourceType.key;
|
|
487
|
+
const selectedActions = [];
|
|
488
|
+
const serviceActions = await iamActionsForService(service);
|
|
489
|
+
for (const action of serviceActions) {
|
|
490
|
+
const actionDetails = await iamActionDetails(service, action);
|
|
491
|
+
for (const rt of actionDetails.resourceTypes) {
|
|
492
|
+
if (rt.name == resourceTypeKey) {
|
|
493
|
+
selectedActions.push(`${service}:${action}`);
|
|
494
|
+
break; // No need to check other resource types for this action
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
const isRole = new Arn(resourceArn).matches({ service: 'iam', resourceType: 'role' });
|
|
499
|
+
if (isRole) {
|
|
500
|
+
selectedActions.push(...AssumeRoleActions.values());
|
|
501
|
+
}
|
|
502
|
+
return selectedActions;
|
|
503
|
+
}
|
|
504
|
+
export async function findResourceTypeForArn(resourceArn) {
|
|
505
|
+
const arnParts = splitArnParts(resourceArn);
|
|
506
|
+
const service = arnParts.service.toLowerCase();
|
|
507
|
+
const serviceExists = await iamServiceExists(service);
|
|
508
|
+
if (!serviceExists) {
|
|
509
|
+
throw new Error(`Unable to find service ${service} for resource ${resourceArn}`);
|
|
510
|
+
}
|
|
511
|
+
const sortedResourceTypes = await allResourceTypesByArnLength(service);
|
|
512
|
+
const matchingPatterns = mostSpecificMatchingResourceTypePatterns(resourceArn, sortedResourceTypes.map((resourceType) => resourceType.arn));
|
|
513
|
+
const resourceType = sortedResourceTypes.find((rt) => matchingPatterns.includes(rt.arn));
|
|
514
|
+
if (resourceType) {
|
|
515
|
+
return [service, resourceType];
|
|
516
|
+
}
|
|
517
|
+
throw new Error(`Unable to find resource type for service ${service} and resource ${resourceArn}.`);
|
|
518
|
+
}
|
|
519
|
+
async function allResourceTypesByArnLength(service) {
|
|
520
|
+
const resourceTypeKeys = await iamResourceTypesForService(service);
|
|
521
|
+
const sortedResourceTypes = [];
|
|
522
|
+
for (const key of resourceTypeKeys) {
|
|
523
|
+
const details = await iamResourceTypeDetails(service, key);
|
|
524
|
+
sortedResourceTypes.push(details);
|
|
525
|
+
}
|
|
526
|
+
return sortedResourceTypes.sort((a, b) => {
|
|
527
|
+
return b.arn.length - a.arn.length;
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Sort the results in a WhoCanResponse in place for consistent output
|
|
532
|
+
*
|
|
533
|
+
* @param whoCanResponse the WhoCanResponse to sort
|
|
534
|
+
*/
|
|
535
|
+
export function sortWhoCanResults(whoCanResponse) {
|
|
536
|
+
whoCanResponse.allowed.sort((a, b) => {
|
|
537
|
+
if (a.principal < b.principal)
|
|
538
|
+
return -1;
|
|
539
|
+
if (a.principal > b.principal)
|
|
540
|
+
return 1;
|
|
541
|
+
if (a.service < b.service)
|
|
542
|
+
return -1;
|
|
543
|
+
if (a.service > b.service)
|
|
544
|
+
return 1;
|
|
545
|
+
if (a.action < b.action)
|
|
546
|
+
return -1;
|
|
547
|
+
if (a.action > b.action)
|
|
548
|
+
return 1;
|
|
549
|
+
return 0;
|
|
550
|
+
});
|
|
551
|
+
whoCanResponse.denyDetails?.sort((a, b) => {
|
|
552
|
+
if (a.principal < b.principal)
|
|
553
|
+
return -1;
|
|
554
|
+
if (a.principal > b.principal)
|
|
555
|
+
return 1;
|
|
556
|
+
if (a.service < b.service)
|
|
557
|
+
return -1;
|
|
558
|
+
if (a.service > b.service)
|
|
559
|
+
return 1;
|
|
560
|
+
if (a.action < b.action)
|
|
561
|
+
return -1;
|
|
562
|
+
if (a.action > b.action)
|
|
563
|
+
return 1;
|
|
564
|
+
return 0;
|
|
565
|
+
});
|
|
566
|
+
whoCanResponse.accountsNotFound.sort();
|
|
567
|
+
whoCanResponse.organizationsNotFound.sort();
|
|
568
|
+
whoCanResponse.organizationalUnitsNotFound.sort();
|
|
569
|
+
whoCanResponse.principalsNotFound.sort();
|
|
570
|
+
}
|
|
571
|
+
//# sourceMappingURL=whoCan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoCan.js","sourceRoot":"","sources":["../../../src/whoCan/whoCan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for a consumer-provided module that runs once per worker thread
|
|
3
|
+
* at startup, before any work is processed. Intended for loading instrumentation
|
|
4
|
+
* (e.g. dd-trace), initializing logging context, or similar worker-lifetime setup.
|
|
5
|
+
*
|
|
6
|
+
* The referenced export must be a function matching
|
|
7
|
+
* `(context: { data: unknown; threadId: number; isMainThread: false }) => void | Promise<void>`.
|
|
8
|
+
*/
|
|
9
|
+
export interface WorkerBootstrapPlugin {
|
|
10
|
+
/** Package name (e.g. '@my-app/worker-bootstrap') or absolute path — resolved via dynamic import. */
|
|
11
|
+
module: string;
|
|
12
|
+
/** Name of the exported bootstrap function. */
|
|
13
|
+
factoryExport: string;
|
|
14
|
+
/** JSON-serializable data passed to the bootstrap function. */
|
|
15
|
+
data: unknown;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=workerBootstrapPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workerBootstrapPlugin.d.ts","sourceRoot":"","sources":["../../../src/whoCan/workerBootstrapPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,qGAAqG;IACrG,MAAM,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAA;IACrB,+DAA+D;IAC/D,IAAI,EAAE,OAAO,CAAA;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workerBootstrapPlugin.js","sourceRoot":"","sources":["../../../src/whoCan/workerBootstrapPlugin.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ArrayStreamingWorkQueueOptions {
|
|
2
|
+
ringCapacity?: number;
|
|
3
|
+
}
|
|
4
|
+
export declare class ArrayStreamingWorkQueue<T> {
|
|
5
|
+
private onWorkAvailable?;
|
|
6
|
+
private notifyScheduled;
|
|
7
|
+
private work;
|
|
8
|
+
constructor(options?: ArrayStreamingWorkQueueOptions);
|
|
9
|
+
setWorkAvailableCallback(callback: () => void): void;
|
|
10
|
+
enqueue(item: T): void;
|
|
11
|
+
dequeue(): T | undefined;
|
|
12
|
+
length(): number;
|
|
13
|
+
private scheduleNotify;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ArrayStreamingWorkQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrayStreamingWorkQueue.d.ts","sourceRoot":"","sources":["../../../src/workers/ArrayStreamingWorkQueue.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,8BAA8B;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,uBAAuB,CAAC,CAAC;IACpC,OAAO,CAAC,eAAe,CAAC,CAAY;IACpC,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,IAAI,CAAY;gBAEZ,OAAO,GAAE,8BAAmC;IAEjD,wBAAwB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIpD,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAKtB,OAAO,IAAI,CAAC,GAAG,SAAS;IAIxB,MAAM,IAAI,MAAM;IAIvB,OAAO,CAAC,cAAc;CAavB"}
|