@cloud-copilot/iam-lens 0.1.108 → 0.1.110

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 (63) hide show
  1. package/dist/cjs/index.d.ts +2 -0
  2. package/dist/cjs/index.d.ts.map +1 -1
  3. package/dist/cjs/index.js +3 -1
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/utils/bitset.js +3 -3
  6. package/dist/cjs/utils/bitset.js.map +1 -1
  7. package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts +65 -3
  8. package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -1
  9. package/dist/cjs/whoCan/WhoCanMainThreadWorker.js +52 -31
  10. package/dist/cjs/whoCan/WhoCanMainThreadWorker.js.map +1 -1
  11. package/dist/cjs/whoCan/WhoCanProcessor.d.ts +371 -0
  12. package/dist/cjs/whoCan/WhoCanProcessor.d.ts.map +1 -0
  13. package/dist/cjs/whoCan/WhoCanProcessor.js +980 -0
  14. package/dist/cjs/whoCan/WhoCanProcessor.js.map +1 -0
  15. package/dist/cjs/whoCan/WhoCanWorker.d.ts +2 -0
  16. package/dist/cjs/whoCan/WhoCanWorker.d.ts.map +1 -1
  17. package/dist/cjs/whoCan/WhoCanWorker.js.map +1 -1
  18. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js +99 -80
  19. package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js.map +1 -1
  20. package/dist/cjs/whoCan/principalArnFilter.d.ts +84 -0
  21. package/dist/cjs/whoCan/principalArnFilter.d.ts.map +1 -0
  22. package/dist/cjs/whoCan/principalArnFilter.js +256 -0
  23. package/dist/cjs/whoCan/principalArnFilter.js.map +1 -0
  24. package/dist/cjs/whoCan/untrustingActions.d.ts +7 -0
  25. package/dist/cjs/whoCan/untrustingActions.d.ts.map +1 -0
  26. package/dist/cjs/whoCan/untrustingActions.js +30 -0
  27. package/dist/cjs/whoCan/untrustingActions.js.map +1 -0
  28. package/dist/cjs/whoCan/whoCan.d.ts +35 -2
  29. package/dist/cjs/whoCan/whoCan.d.ts.map +1 -1
  30. package/dist/cjs/whoCan/whoCan.js +277 -233
  31. package/dist/cjs/whoCan/whoCan.js.map +1 -1
  32. package/dist/esm/index.d.ts +2 -0
  33. package/dist/esm/index.d.ts.map +1 -1
  34. package/dist/esm/index.js +2 -0
  35. package/dist/esm/index.js.map +1 -1
  36. package/dist/esm/utils/bitset.js +3 -3
  37. package/dist/esm/utils/bitset.js.map +1 -1
  38. package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts +65 -3
  39. package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -1
  40. package/dist/esm/whoCan/WhoCanMainThreadWorker.js +53 -34
  41. package/dist/esm/whoCan/WhoCanMainThreadWorker.js.map +1 -1
  42. package/dist/esm/whoCan/WhoCanProcessor.d.ts +371 -0
  43. package/dist/esm/whoCan/WhoCanProcessor.d.ts.map +1 -0
  44. package/dist/esm/whoCan/WhoCanProcessor.js +970 -0
  45. package/dist/esm/whoCan/WhoCanProcessor.js.map +1 -0
  46. package/dist/esm/whoCan/WhoCanWorker.d.ts +2 -0
  47. package/dist/esm/whoCan/WhoCanWorker.d.ts.map +1 -1
  48. package/dist/esm/whoCan/WhoCanWorker.js.map +1 -1
  49. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js +102 -81
  50. package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js.map +1 -1
  51. package/dist/esm/whoCan/principalArnFilter.d.ts +84 -0
  52. package/dist/esm/whoCan/principalArnFilter.d.ts.map +1 -0
  53. package/dist/esm/whoCan/principalArnFilter.js +251 -0
  54. package/dist/esm/whoCan/principalArnFilter.js.map +1 -0
  55. package/dist/esm/whoCan/untrustingActions.d.ts +7 -0
  56. package/dist/esm/whoCan/untrustingActions.d.ts.map +1 -0
  57. package/dist/esm/whoCan/untrustingActions.js +27 -0
  58. package/dist/esm/whoCan/untrustingActions.js.map +1 -0
  59. package/dist/esm/whoCan/whoCan.d.ts +35 -2
  60. package/dist/esm/whoCan/whoCan.d.ts.map +1 -1
  61. package/dist/esm/whoCan/whoCan.js +278 -237
  62. package/dist/esm/whoCan/whoCan.js.map +1 -1
  63. package/package.json +3 -3
@@ -2,246 +2,70 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.whoCan = whoCan;
4
4
  exports.uniqueAccountsToCheck = uniqueAccountsToCheck;
5
+ exports.statementRequiresAllFromResourceAccount = statementRequiresAllFromResourceAccount;
5
6
  exports.accountsToCheckBasedOnResourcePolicy = accountsToCheckBasedOnResourcePolicy;
6
7
  exports.actionsForWhoCan = actionsForWhoCan;
7
8
  exports.lookupActionsForResourceArn = lookupActionsForResourceArn;
8
9
  exports.findResourceTypeForArn = findResourceTypeForArn;
9
10
  exports.convertResourcePatternToRegex = convertResourcePatternToRegex;
10
11
  exports.sortWhoCanResults = sortWhoCanResults;
11
- const log_1 = require("@cloud-copilot/log");
12
12
  const iam_data_1 = require("@cloud-copilot/iam-data");
13
13
  const iam_policy_1 = require("@cloud-copilot/iam-policy");
14
14
  const iam_utils_1 = require("@cloud-copilot/iam-utils");
15
- const job_1 = require("@cloud-copilot/job");
16
- const worker_threads_1 = require("worker_threads");
17
- const collect_js_1 = require("../collect/collect.js");
18
- const resources_js_1 = require("../resources.js");
19
15
  const arn_js_1 = require("../utils/arn.js");
20
16
  const sts_js_1 = require("../utils/sts.js");
21
- const workerScript_js_1 = require("../utils/workerScript.js");
22
- const SharedArrayBufferMainCache_js_1 = require("../workers/SharedArrayBufferMainCache.js");
23
- const StreamingWorkQueue_js_1 = require("../workers/StreamingWorkQueue.js");
24
- const WhoCanMainThreadWorker_js_1 = require("./WhoCanMainThreadWorker.js");
25
- const principalScope_js_1 = require("./principalScope.js");
17
+ const WhoCanProcessor_js_1 = require("./WhoCanProcessor.js");
26
18
  /**
27
- * Get the number of worker threads to use, defaulting to number of CPUs - 1
19
+ * Processes a single whoCan request by creating a temporary WhoCanProcessor,
20
+ * enqueuing the request, waiting for it to settle, and shutting down. This
21
+ * preserves the original one-shot behavior where workers and cache are created
22
+ * and destroyed per call.
28
23
  *
29
- * @param overrideValue the override value, if any
30
- * @returns the override value if provided, otherwise number of CPUs - 1
24
+ * For better performance when running multiple requests, use WhoCanProcessor
25
+ * directly to keep workers and cache alive across calls.
26
+ *
27
+ * @param collectConfigs the collect configurations for loading IAM data
28
+ * @param partition the AWS partition (e.g. 'aws', 'aws-cn')
29
+ * @param request the whoCan request parameters
30
+ * @returns the whoCan response with allowed principals and optional deny details
31
31
  */
32
- function getNumberOfWorkers(overrideValue) {
33
- if (typeof overrideValue === 'number' && overrideValue >= 0) {
34
- return Math.floor(overrideValue);
35
- }
36
- return Math.max(0, (0, job_1.numberOfCpus)() - 1);
37
- }
38
32
  async function whoCan(collectConfigs, partition, request) {
39
- const { resource } = request;
40
- // Get the number of workers and the worker script path.
41
- // It's possible in bundled environments that the worker script path may not be found, so handle that gracefully.
42
- const numWorkers = getNumberOfWorkers(request.workerThreads);
43
- const workerPath = (0, workerScript_js_1.getWorkerScriptPath)('whoCan/WhoCanWorkerThreadWorker.js');
44
- const collectDenyDetails = !!request.denyDetailsCallback;
45
- const collectGrantDetails = !!request.collectGrantDetails;
46
- const workers = !workerPath
47
- ? []
48
- : new Array(numWorkers).fill(undefined).map((val) => {
49
- return new worker_threads_1.Worker(workerPath, {
50
- workerData: {
51
- collectConfigs: collectConfigs,
52
- partition,
53
- concurrency: 50,
54
- s3AbacOverride: request.s3AbacOverride,
55
- collectDenyDetails,
56
- collectGrantDetails,
57
- strictContextKeys: request.strictContextKeys,
58
- clientFactoryPlugin: request.clientFactoryPlugin
59
- }
60
- });
61
- });
62
- const collectClient = await (0, collect_js_1.getCollectClient)(collectConfigs, partition, {
63
- cacheProvider: new SharedArrayBufferMainCache_js_1.SharedArrayBufferMainCache(workers),
64
- clientFactoryPlugin: request.clientFactoryPlugin
65
- });
66
- if (!request.resourceAccount && !request.resource) {
67
- throw new Error('Either resourceAccount or resource must be provided in the request.');
68
- }
69
- const resourceAccount = request.resourceAccount || (await (0, resources_js_1.getAccountIdForResource)(collectClient, resource));
70
- if (!resourceAccount) {
71
- throw new Error(`Could not determine account ID for resource ${resource}. Please use a different ARN or specify resourceAccount.`);
72
- }
73
- const actions = await actionsForWhoCan(request);
74
- if (!actions || actions.length === 0) {
75
- throw new Error('No valid actions provided or found for the resource.');
76
- }
77
- let resourcePolicy = undefined;
78
- if (resource) {
79
- resourcePolicy = await (0, resources_js_1.getResourcePolicyForResource)(collectClient, resource, resourceAccount);
80
- const resourceArn = new arn_js_1.Arn(resource);
81
- if ((resourceArn.matches({ service: 'iam', resourceType: 'role' }) ||
82
- resourceArn.matches({ service: 'kms', resourceType: 'key' })) &&
83
- !resourcePolicy) {
84
- throw new Error(`Unable to find resource policy for ${resource}. Cannot determine who can access the resource.`);
85
- }
86
- }
87
- const accountsToCheck = await accountsToCheckBasedOnResourcePolicy(resourcePolicy, resourceAccount);
88
- const uniqueAccounts = await uniqueAccountsToCheck(collectClient, accountsToCheck);
89
- let accountsForSearch = uniqueAccounts.accounts;
90
- let principalsForSearch = accountsToCheck.specificPrincipals;
91
- let scopeIncludesResourceAccount = true;
92
- if (request.principalScope) {
93
- const resolved = await (0, principalScope_js_1.resolvePrincipalScope)(collectClient, request.principalScope);
94
- const intersection = (0, principalScope_js_1.intersectWithPrincipalScope)(uniqueAccounts.accounts, accountsToCheck.specificPrincipals, accountsToCheck.allAccounts, resolved.accounts, resolved.principals);
95
- accountsForSearch = intersection.accounts;
96
- principalsForSearch = intersection.principals;
97
- scopeIncludesResourceAccount = resolved.accounts.has(resourceAccount);
98
- }
99
- const whoCanResults = [];
100
- const concurrency = Math.min(50, Math.max(1, (0, job_1.numberOfCpus)() * 2));
101
- let simulationCount = 0;
102
- const simulateQueue = new StreamingWorkQueue_js_1.StreamingWorkQueue();
103
- const simulationErrors = [];
104
- const denyDetails = [];
105
- const onComplete = (result) => {
106
- simulationCount++;
107
- if (result.status === 'fulfilled' && result.value) {
108
- whoCanResults.push(result.value);
33
+ let settledEvent;
34
+ const processor = await WhoCanProcessor_js_1.WhoCanProcessor.create({
35
+ collectConfigs,
36
+ partition,
37
+ tuning: {
38
+ workerThreads: request.workerThreads
39
+ },
40
+ ignorePrincipalIndex: request.ignorePrincipalIndex,
41
+ clientFactoryPlugin: request.clientFactoryPlugin,
42
+ s3AbacOverride: request.s3AbacOverride,
43
+ collectGrantDetails: !!request.collectGrantDetails,
44
+ onRequestSettled: async (event) => {
45
+ settledEvent = event;
109
46
  }
110
- else if (result.status === 'rejected') {
111
- log_1.log.error('Error running simulation', { error: result.reason });
112
- simulationErrors.push(result);
113
- }
114
- };
115
- const mainThreadWorker = (0, WhoCanMainThreadWorker_js_1.createMainThreadStreamingWorkQueue)(simulateQueue, collectClient, request.s3AbacOverride, onComplete, request.denyDetailsCallback, (detail) => denyDetails.push(detail), collectGrantDetails, request.strictContextKeys);
116
- workers.forEach((worker) => {
117
- worker.on('message', (msg) => {
118
- if (msg.type === 'requestTask') {
119
- const task = simulateQueue.dequeue();
120
- worker.postMessage({ type: 'task', workerId: msg.workerId, task });
121
- }
122
- if (msg.type === 'result') {
123
- onComplete(msg.result);
124
- }
125
- if (msg.type === 'checkDenyDetails') {
126
- // Run the callback on main thread to check if we should include deny details
127
- const shouldInclude = request.denyDetailsCallback?.(msg.lightAnalysis) ?? false;
128
- worker.postMessage({
129
- type: 'denyDetailsCheckResult',
130
- checkId: msg.checkId,
131
- shouldInclude
132
- });
133
- }
134
- if (msg.type === 'denyDetailsResult') {
135
- denyDetails.push(msg.denyDetail);
136
- }
137
- });
138
- });
139
- simulateQueue.setWorkAvailableCallback(() => {
140
- mainThreadWorker.notifyWorkAvailable();
141
- workers.forEach((w) => w.postMessage({ type: 'workAvailable' }));
142
47
  });
143
- const accountQueue = new job_1.StreamingJobQueue(concurrency, console, async (response) => { });
144
- const principalIndexExists = await collectClient.principalIndexExists();
145
- if (principalIndexExists) {
146
- const allFromAccount = scopeIncludesResourceAccount ? resourceAccount : undefined;
147
- for (const action of actions) {
148
- const indexedPrincipals = await collectClient.getPrincipalsWithActionAllowed(allFromAccount, accountsForSearch, action);
149
- for (const principal of indexedPrincipals || []) {
150
- simulateQueue.enqueue({
151
- resource,
152
- action,
153
- principal,
154
- resourceAccount
155
- });
156
- }
48
+ try {
49
+ processor.enqueueWhoCan({
50
+ resource: request.resource,
51
+ resourceAccount: request.resourceAccount,
52
+ actions: request.actions,
53
+ sort: request.sort,
54
+ denyDetailsCallback: request.denyDetailsCallback,
55
+ principalScope: request.principalScope,
56
+ strictContextKeys: request.strictContextKeys
57
+ });
58
+ await processor.waitForIdle();
59
+ if (!settledEvent) {
60
+ throw new Error('whoCan request did not settle');
157
61
  }
158
- }
159
- else {
160
- for (const account of accountsForSearch) {
161
- accountQueue.enqueue({
162
- properties: {},
163
- execute: async () => {
164
- const principals = await collectClient.getAllPrincipalsInAccount(account);
165
- for (const principal of principals) {
166
- await runPrincipalForActions(collectClient, simulateQueue, principal, resource, resourceAccount, actions);
167
- }
168
- }
169
- });
62
+ if (settledEvent.status === 'rejected') {
63
+ throw settledEvent.error;
170
64
  }
65
+ return settledEvent.result;
171
66
  }
172
- const principalsNotFound = [];
173
- for (const principal of principalsForSearch) {
174
- accountQueue.enqueue({
175
- properties: {},
176
- execute: async () => {
177
- if ((0, iam_utils_1.isServicePrincipal)(principal)) {
178
- await runPrincipalForActions(collectClient, simulateQueue, principal, resource, resourceAccount, actions);
179
- }
180
- else if ((0, iam_utils_1.isIamUserArn)(principal) ||
181
- (0, iam_utils_1.isIamRoleArn)(principal) ||
182
- (0, iam_utils_1.isAssumedRoleArn)(principal)) {
183
- const principalExists = await collectClient.principalExists(principal);
184
- if (!principalExists) {
185
- principalsNotFound.push(principal);
186
- }
187
- else {
188
- await runPrincipalForActions(collectClient, simulateQueue, principal, resource, resourceAccount, actions);
189
- }
190
- }
191
- else {
192
- // TODO: Add a check for OIDC and SAML providers here
193
- principalsNotFound.push(principal);
194
- }
195
- }
196
- });
197
- }
198
- await accountQueue.finishAllWork();
199
- const workerPromises = workers.map((worker) => {
200
- return new Promise((resolve, reject) => {
201
- worker.on('message', (msg) => {
202
- if (msg.type === 'finished') {
203
- worker.terminate().then(() => resolve());
204
- }
205
- });
206
- worker.on('error', (err) => {
207
- log_1.log.error('Worker error', { error: err });
208
- reject(err);
209
- });
210
- worker.postMessage({ type: 'finishWork' });
211
- });
212
- });
213
- await Promise.all([
214
- //
215
- mainThreadWorker.finishAllWork(),
216
- ...workerPromises
217
- ]);
218
- if (simulationErrors.length > 0) {
219
- log_1.log.error(`Completed with ${simulationErrors.length} simulation errors.`);
220
- throw new Error(`Completed with ${simulationErrors.length} simulation errors. See previous logs.`);
221
- }
222
- const results = {
223
- simulationCount,
224
- allowed: whoCanResults,
225
- allAccountsChecked: request.principalScope ? false : accountsToCheck.allAccounts,
226
- accountsNotFound: uniqueAccounts.accountsNotFound,
227
- organizationsNotFound: uniqueAccounts.organizationsNotFound,
228
- organizationalUnitsNotFound: uniqueAccounts.organizationalUnitsNotFound,
229
- principalsNotFound: principalsNotFound,
230
- denyDetails: request.denyDetailsCallback ? denyDetails : undefined
231
- };
232
- if (request.sort) {
233
- sortWhoCanResults(results);
234
- }
235
- return results;
236
- }
237
- async function runPrincipalForActions(collectClient, simulationQueue, principal, resource, resourceAccount, actions) {
238
- for (const action of actions) {
239
- simulationQueue.enqueue({
240
- resource,
241
- action,
242
- principal,
243
- resourceAccount
244
- });
67
+ finally {
68
+ await processor.shutdown();
245
69
  }
246
70
  }
247
71
  async function uniqueAccountsToCheck(collectClient, accountsToCheck) {
@@ -289,13 +113,171 @@ async function uniqueAccountsToCheck(collectClient, accountsToCheck) {
289
113
  returnValue.accounts = Array.from(uniqueAccounts);
290
114
  return returnValue;
291
115
  }
116
+ /**
117
+ * Splits an ARN-like string on `:` while treating `${...}` blocks as opaque.
118
+ * Colons inside `${...}` dynamic variable references are not used as split points.
119
+ *
120
+ * For example, `arn:${aws:Partition}:iam::999999999999:role/*` splits into
121
+ * `['arn', '${aws:Partition}', 'iam', '', '999999999999', 'role/*']`.
122
+ *
123
+ * @param value - The raw ARN string, possibly containing `${...}` references.
124
+ * @returns An array of colon-delimited segments.
125
+ */
126
+ function splitArnIgnoringDynamicVars(value) {
127
+ const segments = [];
128
+ let current = '';
129
+ let depth = 0;
130
+ for (let i = 0; i < value.length; i++) {
131
+ const ch = value[i];
132
+ if (ch === '$' && i + 1 < value.length && value[i + 1] === '{') {
133
+ depth++;
134
+ current += '${';
135
+ i++; // skip the '{'
136
+ }
137
+ else if (ch === '}' && depth > 0) {
138
+ depth--;
139
+ current += '}';
140
+ }
141
+ else if (ch === ':' && depth === 0) {
142
+ segments.push(current);
143
+ current = '';
144
+ }
145
+ else {
146
+ current += ch;
147
+ }
148
+ }
149
+ segments.push(current);
150
+ return segments;
151
+ }
152
+ const PRINCIPAL_ARN_PATTERN_OPERATORS = new Set(['stringlike', 'arnequals', 'arnlike']);
153
+ /**
154
+ * Checks whether a string contains any wildcard or dynamic variable characters
155
+ * (`*`, `?`, or `$`).
156
+ *
157
+ * @param value - The string to check.
158
+ * @returns `true` if the string contains `*`, `?`, or `$`.
159
+ */
160
+ function hasWildcardOrDynamic(value) {
161
+ return value.includes('*') || value.includes('?') || value.includes('$');
162
+ }
163
+ /** The 3 scalar condition keys that are only populated for service principal requests. */
164
+ const UNNAMED_SERVICE_SCALAR_KEYS = new Set([
165
+ 'aws:sourceaccount',
166
+ 'aws:sourceowner',
167
+ 'aws:sourceorgid'
168
+ ]);
169
+ /**
170
+ * Checks whether a positive operator is used on a scalar service-principal-only key.
171
+ * Accepts `StringEquals` family and `StringLike`.
172
+ *
173
+ * @param op - The condition operation to check.
174
+ * @returns `true` if the operator is a positive match for a scalar key.
175
+ */
176
+ function isPositiveScalarOperator(op) {
177
+ return (op.value().toLowerCase().startsWith('stringequals') ||
178
+ op.baseOperator().toLowerCase() === 'stringlike');
179
+ }
180
+ /**
181
+ * Checks whether a positive operator is used on the `aws:SourceOrgPaths` array key.
182
+ * Only `ForAnyValue:StringEquals*` and `ForAnyValue:StringLike` qualify.
183
+ * `ForAllValues` and plain operators without a set operator do not.
184
+ *
185
+ * @param op - The condition operation to check.
186
+ * @returns `true` if the operator is a valid positive match for the array key.
187
+ */
188
+ function isPositiveOrgPathsOperator(op) {
189
+ if (op.setOperator() !== 'ForAnyValue')
190
+ return false;
191
+ const base = op.baseOperator().toLowerCase();
192
+ return base.startsWith('stringequals') || base === 'stringlike';
193
+ }
194
+ /**
195
+ * Inspects a statement's conditions to determine if the statement effectively
196
+ * requires an AWS service principal. Used for wildcard-principal Allow statements
197
+ * to avoid unnecessarily widening the whoCan search scope.
198
+ *
199
+ * @param conditions - The conditions from the statement to inspect.
200
+ * @returns A classification indicating whether the statement is not service-only,
201
+ * requires an unnamed service principal (skip entirely), or names specific
202
+ * service principals (extract for simulation).
203
+ */
204
+ function checkForServicePrincipalConditions(conditions) {
205
+ let hasUnnamedServiceKey = false;
206
+ const namedServicePrincipals = [];
207
+ for (const cond of conditions) {
208
+ const key = cond.conditionKey().toLowerCase();
209
+ const op = cond.operation();
210
+ if (op.isIfExists())
211
+ continue;
212
+ // Category 1a: Scalar unnamed keys (aws:SourceAccount, aws:SourceOwner, aws:SourceOrgID)
213
+ if (UNNAMED_SERVICE_SCALAR_KEYS.has(key) && isPositiveScalarOperator(op)) {
214
+ hasUnnamedServiceKey = true;
215
+ }
216
+ // Category 1b: Array unnamed key (aws:SourceOrgPaths) — requires ForAnyValue
217
+ if (key === 'aws:sourceorgpaths' && isPositiveOrgPathsOperator(op)) {
218
+ hasUnnamedServiceKey = true;
219
+ }
220
+ // Category 1c: aws:PrincipalIsAWSService with Bool or StringEquals and value 'true'
221
+ // Multiple condition values are ORed, so mixed ['true', 'false'] is NOT service-only.
222
+ // All values must be 'true' for the condition to exclusively require a service principal.
223
+ if (key === 'aws:principalisawsservice') {
224
+ const baseOp = op.baseOperator().toLowerCase();
225
+ const opVal = op.value().toLowerCase();
226
+ const isBoolOrStringEquals = baseOp === 'bool' || opVal.startsWith('stringequals');
227
+ const values = cond.conditionValues();
228
+ if (isBoolOrStringEquals &&
229
+ values.length > 0 &&
230
+ values.every((v) => v.toLowerCase() === 'true')) {
231
+ hasUnnamedServiceKey = true;
232
+ }
233
+ }
234
+ // Category 2: aws:PrincipalServiceName — extract named service principals
235
+ if (key === 'aws:principalservicename' &&
236
+ op.value().toLowerCase().startsWith('stringequals') &&
237
+ !cond.conditionValues().some((v) => v.includes('$'))) {
238
+ namedServicePrincipals.push(...cond.conditionValues());
239
+ }
240
+ }
241
+ // Named takes priority — the simulator fills aws:SourceAccount etc. for service principals
242
+ if (namedServicePrincipals.length > 0) {
243
+ return { type: 'named-service-only', principals: namedServicePrincipals };
244
+ }
245
+ if (hasUnnamedServiceKey) {
246
+ return { type: 'unnamed-service-only' };
247
+ }
248
+ return { type: 'not-service-only' };
249
+ }
250
+ /**
251
+ * Determines whether a policy statement requires checking all principals from
252
+ * the resource account. This is true when the statement is an Allow with a
253
+ * wildcard principal (`*` or `{ AWS: "*" }`) or a `NotPrincipal` element,
254
+ * since either form could grant access to any principal in the resource account.
255
+ *
256
+ * @param statement - The policy statement to check.
257
+ * @returns `true` if the statement could allow any principal from the resource account.
258
+ */
259
+ function statementRequiresAllFromResourceAccount(statement) {
260
+ if (!statement.isAllow())
261
+ return false;
262
+ if (statement.isNotPrincipalStatement())
263
+ return true;
264
+ if (statement.isPrincipalStatement()) {
265
+ for (const principal of statement.principals()) {
266
+ if (principal.isWildcardPrincipal())
267
+ return true;
268
+ }
269
+ }
270
+ return false;
271
+ }
292
272
  async function accountsToCheckBasedOnResourcePolicy(resourcePolicy, resourceAccount) {
293
273
  const accountsToCheck = {
294
274
  allAccounts: false,
295
275
  specificAccounts: [],
296
276
  specificPrincipals: [],
297
277
  specificOrganizations: [],
298
- specificOrganizationalUnits: []
278
+ specificOrganizationalUnits: [],
279
+ checkAnonymous: false,
280
+ checkAllForCurrentAccount: false
299
281
  };
300
282
  if (resourceAccount) {
301
283
  accountsToCheck.specificAccounts.push(resourceAccount);
@@ -305,6 +287,9 @@ async function accountsToCheckBasedOnResourcePolicy(resourcePolicy, resourceAcco
305
287
  }
306
288
  const policy = (0, iam_policy_1.loadPolicy)(resourcePolicy);
307
289
  for (const statement of policy.statements()) {
290
+ if (statementRequiresAllFromResourceAccount(statement)) {
291
+ accountsToCheck.checkAllForCurrentAccount = true;
292
+ }
308
293
  if (statement.isAllow() && statement.isNotPrincipalStatement()) {
309
294
  accountsToCheck.allAccounts = true;
310
295
  }
@@ -323,30 +308,89 @@ async function accountsToCheckBasedOnResourcePolicy(resourcePolicy, resourceAcco
323
308
  }
324
309
  }
325
310
  if (hasWildcardPrincipal) {
311
+ const serviceCheck = checkForServicePrincipalConditions(statement.conditions());
312
+ if (serviceCheck.type === 'unnamed-service-only') {
313
+ continue;
314
+ }
315
+ if (serviceCheck.type === 'named-service-only') {
316
+ accountsToCheck.specificPrincipals.push(...serviceCheck.principals);
317
+ continue;
318
+ }
326
319
  const specificOrgs = [];
327
320
  const specificOus = [];
328
321
  const specificAccounts = [];
322
+ const specificPrincipals = [];
329
323
  const conditions = statement.conditions();
330
324
  for (const cond of conditions) {
331
- if (cond.conditionKey().toLowerCase() === 'aws:principalorgid' &&
325
+ const condKey = cond.conditionKey().toLowerCase();
326
+ if (condKey === 'aws:principalorgid' &&
332
327
  cond.operation().value().toLowerCase().startsWith('stringequals') &&
333
- !cond.conditionValues().some((v) => v.includes('$')) // Ignore dynamic values for now
334
- ) {
328
+ !cond.conditionValues().some((v) => v.includes('$'))) {
335
329
  specificOrgs.push(...cond.conditionValues());
336
330
  }
337
- if (cond.conditionKey().toLowerCase() === 'aws:principalorgpaths' &&
331
+ if (condKey === 'aws:principalorgpaths' &&
338
332
  cond.operation().baseOperator().toLowerCase().startsWith('stringequals') &&
339
- !cond.conditionValues().some((v) => v.includes('$')) // Ignore dynamic values for now
340
- ) {
333
+ !cond.conditionValues().some((v) => v.includes('$'))) {
341
334
  specificOus.push(...cond.conditionValues());
342
335
  }
343
- if (cond.conditionKey().toLowerCase() === 'aws:principalaccount' &&
344
- cond.operation().value().toLowerCase().startsWith('stringequals') &&
345
- !cond.conditionValues().some((v) => v.includes('$')) // Ignore dynamic values for now
346
- ) {
347
- specificAccounts.push(...cond.conditionValues());
336
+ if (condKey === 'aws:principalaccount' || condKey === 'kms:calleraccount') {
337
+ const opVal = cond.operation().value().toLowerCase();
338
+ const baseOp = cond.operation().baseOperator().toLowerCase();
339
+ const values = cond.conditionValues();
340
+ const hasDynamic = values.some((v) => v.includes('$'));
341
+ if (opVal.startsWith('stringequals') && !hasDynamic) {
342
+ // StringEquals family — all values are literal account IDs
343
+ specificAccounts.push(...values);
344
+ }
345
+ else if (baseOp === 'stringlike' &&
346
+ !hasDynamic &&
347
+ values.every((v) => !v.includes('*') && !v.includes('?'))) {
348
+ // StringLike where ALL values are literal (no wildcards or dynamic vars)
349
+ specificAccounts.push(...values);
350
+ }
351
+ }
352
+ if (condKey === 'aws:principalarn') {
353
+ const opValue = cond.operation().value().toLowerCase();
354
+ const baseOp = cond.operation().baseOperator().toLowerCase();
355
+ const isExactOperator = opValue.startsWith('stringequals');
356
+ const isPatternOperator = PRINCIPAL_ARN_PATTERN_OPERATORS.has(baseOp);
357
+ if (!isExactOperator && !isPatternOperator) {
358
+ continue;
359
+ }
360
+ if (cond.operation().isIfExists()) {
361
+ accountsToCheck.checkAnonymous = true;
362
+ }
363
+ for (const value of cond.conditionValues()) {
364
+ if (!hasWildcardOrDynamic(value)) {
365
+ // Exact literal — push as a specific principal
366
+ specificPrincipals.push(value);
367
+ }
368
+ else if (isExactOperator && !value.includes('*') && !value.includes('?')) {
369
+ // Exact operator with a dynamic variable but no wildcards — try account extraction
370
+ const segments = splitArnIgnoringDynamicVars(value);
371
+ if (segments.length >= 6 && segments[0].toLowerCase() === 'arn') {
372
+ const account = segments[4];
373
+ if (account && !hasWildcardOrDynamic(account)) {
374
+ specificAccounts.push(account);
375
+ }
376
+ }
377
+ }
378
+ else {
379
+ // Pattern operator or value with wildcards — try account extraction
380
+ const segments = splitArnIgnoringDynamicVars(value);
381
+ if (segments.length >= 6 && segments[0].toLowerCase() === 'arn') {
382
+ const account = segments[4];
383
+ if (account && !hasWildcardOrDynamic(account)) {
384
+ specificAccounts.push(account);
385
+ }
386
+ }
387
+ }
388
+ }
348
389
  }
349
390
  }
391
+ if (specificPrincipals.length > 0) {
392
+ accountsToCheck.specificPrincipals.push(...specificPrincipals);
393
+ }
350
394
  if (specificAccounts.length > 0) {
351
395
  accountsToCheck.specificAccounts.push(...specificAccounts);
352
396
  }
@@ -356,7 +400,7 @@ async function accountsToCheckBasedOnResourcePolicy(resourcePolicy, resourceAcco
356
400
  else if (specificOrgs.length > 0) {
357
401
  accountsToCheck.specificOrganizations.push(...specificOrgs);
358
402
  }
359
- else {
403
+ else if (specificPrincipals.length === 0) {
360
404
  accountsToCheck.allAccounts = true;
361
405
  }
362
406
  }
@@ -1 +1 @@
1
- {"version":3,"file":"whoCan.js","sourceRoot":"","sources":["../../../src/whoCan/whoCan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"whoCan.js","sourceRoot":"","sources":["../../../src/whoCan/whoCan.ts"],"names":[],"mappings":"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"}