@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.
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils/bitset.js +3 -3
- package/dist/cjs/utils/bitset.js.map +1 -1
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts +65 -3
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -1
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.js +52 -31
- package/dist/cjs/whoCan/WhoCanMainThreadWorker.js.map +1 -1
- package/dist/cjs/whoCan/WhoCanProcessor.d.ts +371 -0
- package/dist/cjs/whoCan/WhoCanProcessor.d.ts.map +1 -0
- package/dist/cjs/whoCan/WhoCanProcessor.js +980 -0
- package/dist/cjs/whoCan/WhoCanProcessor.js.map +1 -0
- package/dist/cjs/whoCan/WhoCanWorker.d.ts +2 -0
- package/dist/cjs/whoCan/WhoCanWorker.d.ts.map +1 -1
- package/dist/cjs/whoCan/WhoCanWorker.js.map +1 -1
- package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js +99 -80
- package/dist/cjs/whoCan/WhoCanWorkerThreadWorker.js.map +1 -1
- 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 +256 -0
- package/dist/cjs/whoCan/principalArnFilter.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 +35 -2
- package/dist/cjs/whoCan/whoCan.d.ts.map +1 -1
- package/dist/cjs/whoCan/whoCan.js +277 -233
- package/dist/cjs/whoCan/whoCan.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/bitset.js +3 -3
- package/dist/esm/utils/bitset.js.map +1 -1
- package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts +65 -3
- package/dist/esm/whoCan/WhoCanMainThreadWorker.d.ts.map +1 -1
- package/dist/esm/whoCan/WhoCanMainThreadWorker.js +53 -34
- package/dist/esm/whoCan/WhoCanMainThreadWorker.js.map +1 -1
- package/dist/esm/whoCan/WhoCanProcessor.d.ts +371 -0
- package/dist/esm/whoCan/WhoCanProcessor.d.ts.map +1 -0
- package/dist/esm/whoCan/WhoCanProcessor.js +970 -0
- package/dist/esm/whoCan/WhoCanProcessor.js.map +1 -0
- package/dist/esm/whoCan/WhoCanWorker.d.ts +2 -0
- package/dist/esm/whoCan/WhoCanWorker.d.ts.map +1 -1
- package/dist/esm/whoCan/WhoCanWorker.js.map +1 -1
- package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js +102 -81
- package/dist/esm/whoCan/WhoCanWorkerThreadWorker.js.map +1 -1
- 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 +251 -0
- package/dist/esm/whoCan/principalArnFilter.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 +35 -2
- package/dist/esm/whoCan/whoCan.d.ts.map +1 -1
- package/dist/esm/whoCan/whoCan.js +278 -237
- package/dist/esm/whoCan/whoCan.js.map +1 -1
- 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
|
|
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
|
-
*
|
|
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
|
-
*
|
|
30
|
-
*
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
:
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
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
|
-
|
|
173
|
-
|
|
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
|
-
|
|
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('$'))
|
|
334
|
-
) {
|
|
328
|
+
!cond.conditionValues().some((v) => v.includes('$'))) {
|
|
335
329
|
specificOrgs.push(...cond.conditionValues());
|
|
336
330
|
}
|
|
337
|
-
if (
|
|
331
|
+
if (condKey === 'aws:principalorgpaths' &&
|
|
338
332
|
cond.operation().baseOperator().toLowerCase().startsWith('stringequals') &&
|
|
339
|
-
!cond.conditionValues().some((v) => v.includes('$'))
|
|
340
|
-
) {
|
|
333
|
+
!cond.conditionValues().some((v) => v.includes('$'))) {
|
|
341
334
|
specificOus.push(...cond.conditionValues());
|
|
342
335
|
}
|
|
343
|
-
if (
|
|
344
|
-
cond.operation().value().toLowerCase()
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
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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"}
|