@cloud-copilot/iam-lens 0.1.107 → 0.1.109

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
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.iamPatternToRegex = iamPatternToRegex;
4
+ exports.buildPrincipalArnFilter = buildPrincipalArnFilter;
5
+ exports.principalMatchesFilter = principalMatchesFilter;
6
+ const iam_policy_1 = require("@cloud-copilot/iam-policy");
7
+ const iam_utils_1 = require("@cloud-copilot/iam-utils");
8
+ /**
9
+ * Set of condition operators that can be used with aws:PrincipalArn to
10
+ * constrain which principals are allowed. These are the base operators
11
+ * (lowercase) without set modifiers or IfExists.
12
+ */
13
+ const ALLOW_PRINCIPAL_ARN_OPERATORS = new Set([
14
+ 'stringlike',
15
+ 'stringequals',
16
+ 'arnlike',
17
+ 'arnequals'
18
+ ]);
19
+ /**
20
+ * Negative condition operators on `aws:PrincipalArn` in Deny statements.
21
+ * The deny applies to principals NOT matching the patterns, so the patterns
22
+ * become an allow-list (only those principals are worth simulating).
23
+ */
24
+ const DENY_NEGATIVE_OPERATORS = new Set([
25
+ 'stringnotlike',
26
+ 'stringnotequals',
27
+ 'arnnotlike',
28
+ 'arnnotequals'
29
+ ]);
30
+ /**
31
+ * Positive condition operators on `aws:PrincipalArn` in Deny statements.
32
+ * The deny applies to principals matching the patterns, so those principals
33
+ * can be skipped for the deny statement's actions.
34
+ */
35
+ const DENY_POSITIVE_OPERATORS = new Set(['stringlike', 'stringequals', 'arnlike', 'arnequals']);
36
+ /**
37
+ * Converts an IAM wildcard pattern to a case-sensitive anchored RegExp.
38
+ * Handles `*` (any characters) and `?` (single character) wildcards.
39
+ * Does not handle replacement variables — callers must ensure patterns
40
+ * with variables are excluded before calling this.
41
+ *
42
+ * @param pattern the IAM pattern string (e.g. `arn:aws:iam::*:role/ec2/*`)
43
+ * @returns an anchored case-sensitive RegExp
44
+ */
45
+ function iamPatternToRegex(pattern) {
46
+ const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
47
+ const withWildcards = escaped.replace(/\*/g, '.*').replace(/\?/g, '.');
48
+ return new RegExp(`^${withWildcards}$`);
49
+ }
50
+ /**
51
+ * Checks whether any value in an array contains a replacement variable (`${...}`).
52
+ *
53
+ * @param values the condition values to check
54
+ * @returns true if any value contains a replacement variable
55
+ */
56
+ function hasAnyReplacementVariable(values) {
57
+ return values.some((v) => v.includes('${'));
58
+ }
59
+ /**
60
+ * Builds a PrincipalArnFilter from a resource policy by extracting
61
+ * aws:PrincipalArn patterns from Allow statements with wildcard principals.
62
+ *
63
+ * The filter is only constructed if **every** wildcard-Allow statement has
64
+ * a usable aws:PrincipalArn condition. If any wildcard-Allow statement lacks
65
+ * one, the filter cannot safely exclude principals and undefined is returned.
66
+ *
67
+ * @param resourcePolicy the raw resource policy document, or undefined/null if none
68
+ * @returns a PrincipalArnFilter if filtering is possible, undefined otherwise
69
+ */
70
+ function buildPrincipalArnFilter(resourcePolicy) {
71
+ if (!resourcePolicy) {
72
+ return undefined;
73
+ }
74
+ const policy = (0, iam_policy_1.loadPolicy)(resourcePolicy);
75
+ const allAllowPatterns = [];
76
+ const exemptAccounts = new Set();
77
+ let hasAnyWildcardAllow = false;
78
+ for (const statement of policy.statements()) {
79
+ if (!statement.isAllow()) {
80
+ continue;
81
+ }
82
+ // Check if this Allow statement has a wildcard principal, and collect
83
+ // explicit account principals whose accounts should be exempt from filtering
84
+ let hasWildcardPrincipal = false;
85
+ if (statement.isPrincipalStatement()) {
86
+ for (const principal of statement.principals()) {
87
+ if (principal.isWildcardPrincipal()) {
88
+ hasWildcardPrincipal = true;
89
+ }
90
+ else if (principal.isAccountPrincipal()) {
91
+ exemptAccounts.add(principal.accountId());
92
+ }
93
+ }
94
+ }
95
+ else if (statement.isNotPrincipalStatement()) {
96
+ // NotPrincipal Allow effectively allows everyone except the named principals,
97
+ // so it acts like a wildcard — we can't filter
98
+ return undefined;
99
+ }
100
+ if (!hasWildcardPrincipal) {
101
+ continue;
102
+ }
103
+ hasAnyWildcardAllow = true;
104
+ // Look for aws:PrincipalArn conditions with supported operators
105
+ let statementHasUsableFilter = false;
106
+ const conditions = statement.conditions();
107
+ for (const cond of conditions) {
108
+ if (cond.conditionKey().toLowerCase() !== 'aws:principalarn') {
109
+ continue;
110
+ }
111
+ const baseOp = cond.operation().baseOperator().toLowerCase();
112
+ if (!ALLOW_PRINCIPAL_ARN_OPERATORS.has(baseOp)) {
113
+ continue;
114
+ }
115
+ const values = cond.conditionValues();
116
+ // If any value has a replacement variable, ignore the entire condition
117
+ if (hasAnyReplacementVariable(values)) {
118
+ continue;
119
+ }
120
+ // All values count as a usable filter for the statement — even literal
121
+ // ARNs constrain which principals can match. However, only wildcard
122
+ // values are added as filter patterns; literal ARNs are already handled
123
+ // as specific principals by accountsToCheckBasedOnResourcePolicy.
124
+ for (const value of values) {
125
+ statementHasUsableFilter = true;
126
+ if (value.includes('*') || value.includes('?')) {
127
+ allAllowPatterns.push(iamPatternToRegex(value));
128
+ }
129
+ }
130
+ }
131
+ // If this wildcard-Allow has no usable PrincipalArn condition,
132
+ // it could allow any principal — filtering is not safe
133
+ if (!statementHasUsableFilter) {
134
+ return undefined;
135
+ }
136
+ }
137
+ // --- Deny statement extraction ---
138
+ const denyDerivedAllowEntries = [];
139
+ const denyEntries = [];
140
+ for (const statement of policy.statements()) {
141
+ if (statement.isAllow())
142
+ continue;
143
+ if (!statement.isActionStatement())
144
+ continue;
145
+ if (!statement.isResourceStatement())
146
+ continue;
147
+ if (statement.isNotPrincipalStatement())
148
+ continue;
149
+ // Must have a wildcard principal
150
+ let hasWildcardPrincipal = false;
151
+ if (statement.isPrincipalStatement()) {
152
+ for (const principal of statement.principals()) {
153
+ if (principal.isWildcardPrincipal()) {
154
+ hasWildcardPrincipal = true;
155
+ break;
156
+ }
157
+ }
158
+ }
159
+ if (!hasWildcardPrincipal)
160
+ continue;
161
+ // Resource must include '*'
162
+ if (!statement.resources().some((r) => r.isAllResources()))
163
+ continue;
164
+ // Must have exactly one condition and it must be aws:PrincipalArn
165
+ const conditions = statement.conditions();
166
+ if (conditions.length !== 1)
167
+ continue;
168
+ const cond = conditions[0];
169
+ if (cond.conditionKey().toLowerCase() !== 'aws:principalarn')
170
+ continue;
171
+ if (cond.operation().isIfExists())
172
+ continue;
173
+ const values = cond.conditionValues();
174
+ if (hasAnyReplacementVariable(values))
175
+ continue;
176
+ const baseOp = cond.operation().baseOperator().toLowerCase();
177
+ const actionPatterns = statement.actions().map((a) => a.value());
178
+ const principalPatterns = values.map(iamPatternToRegex);
179
+ if (DENY_NEGATIVE_OPERATORS.has(baseOp)) {
180
+ denyDerivedAllowEntries.push({ actionPatterns, principalPatterns });
181
+ }
182
+ else if (DENY_POSITIVE_OPERATORS.has(baseOp)) {
183
+ denyEntries.push({ actionPatterns, principalPatterns });
184
+ }
185
+ }
186
+ // Return a filter if there's anything useful
187
+ const hasAllowPatterns = hasAnyWildcardAllow && allAllowPatterns.length > 0;
188
+ const hasDenyInfo = denyDerivedAllowEntries.length > 0 || denyEntries.length > 0;
189
+ if (!hasAllowPatterns && !hasDenyInfo) {
190
+ return undefined;
191
+ }
192
+ return {
193
+ allowPatterns: hasAllowPatterns ? allAllowPatterns : [],
194
+ denyDerivedAllowEntries,
195
+ denyEntries,
196
+ exemptAccounts
197
+ };
198
+ }
199
+ /**
200
+ * Checks whether an action matches any of the given action patterns using
201
+ * IAM wildcard semantics.
202
+ *
203
+ * @param action the action being simulated (e.g., 'secretsmanager:GetSecretValue')
204
+ * @param patterns the action patterns from a deny statement
205
+ * @returns true if the action matches at least one pattern
206
+ */
207
+ function actionMatchesAnyPattern(action, patterns) {
208
+ return patterns.some((pattern) => (0, iam_utils_1.actionMatchesPattern)(action, pattern));
209
+ }
210
+ /**
211
+ * Tests whether a principal ARN passes the PrincipalArnFilter for a given action.
212
+ *
213
+ * Principals in the resource account or an exempt account bypass the positive
214
+ * allow-side filtering (allow patterns and deny-derived allow entries) because
215
+ * they may be granted access through account-level principal grants independent
216
+ * of any PrincipalArn conditions. However, they are still subject to deny-side
217
+ * filtering (deny entries) because an explicit deny in a resource policy applies
218
+ * regardless of the principal's account.
219
+ *
220
+ * @param principal the principal ARN to test
221
+ * @param action the action being simulated
222
+ * @param resourceAccount the account that owns the resource being checked
223
+ * @param filter the filter to apply
224
+ * @returns true if the principal should be simulated, false if it can be skipped
225
+ */
226
+ function principalMatchesFilter(principal, action, resourceAccount, filter) {
227
+ const accountId = (0, iam_utils_1.splitArnParts)(principal).accountId;
228
+ const isExempt = accountId === resourceAccount || filter.exemptAccounts.has(accountId ?? '');
229
+ // Allow patterns from Allow statements: exempt principals bypass this check
230
+ // because they may be granted access through account-level principal grants
231
+ // independent of any PrincipalArn conditions on wildcard statements.
232
+ if (!isExempt && filter.allowPatterns.length > 0) {
233
+ if (!filter.allowPatterns.some((pattern) => pattern.test(principal)))
234
+ return false;
235
+ }
236
+ // Deny-derived filtering applies to ALL principals regardless of account.
237
+ // An explicit deny in a resource policy applies universally.
238
+ // For each deny-derived allow entry whose actions match,
239
+ // the principal must match at least one principal pattern
240
+ for (const entry of filter.denyDerivedAllowEntries) {
241
+ if (actionMatchesAnyPattern(action, entry.actionPatterns)) {
242
+ if (!entry.principalPatterns.some((p) => p.test(principal)))
243
+ return false;
244
+ }
245
+ }
246
+ // For each deny entry whose actions match,
247
+ // skip if the principal matches any principal pattern
248
+ for (const entry of filter.denyEntries) {
249
+ if (actionMatchesAnyPattern(action, entry.actionPatterns)) {
250
+ if (entry.principalPatterns.some((p) => p.test(principal)))
251
+ return false;
252
+ }
253
+ }
254
+ return true;
255
+ }
256
+ //# sourceMappingURL=principalArnFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principalArnFilter.js","sourceRoot":"","sources":["../../../src/whoCan/principalArnFilter.ts"],"names":[],"mappings":";;AA4FA,8CAIC;AAuBD,0DA2IC;AA8BD,wDAoCC;AApUD,0DAAsD;AACtD,wDAA8E;AAE9E;;;;GAIG;AACH,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC;IAC5C,YAAY;IACZ,cAAc;IACd,SAAS;IACT,WAAW;CACZ,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,eAAe;IACf,iBAAiB;IACjB,YAAY;IACZ,cAAc;CACf,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAA;AAmD/F;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAAC,OAAe;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAA;IAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACtE,OAAO,IAAI,MAAM,CAAC,IAAI,aAAa,GAAG,CAAC,CAAA;AACzC,CAAC;AAED;;;;;GAKG;AACH,SAAS,yBAAyB,CAAC,MAAgB;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,uBAAuB,CAAC,cAAmB;IACzD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,uBAAU,EAAC,cAAc,CAAC,CAAA;IACzC,MAAM,gBAAgB,GAAa,EAAE,CAAA;IACrC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAA;IACxC,IAAI,mBAAmB,GAAG,KAAK,CAAA;IAE/B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACzB,SAAQ;QACV,CAAC;QAED,sEAAsE;QACtE,6EAA6E;QAC7E,IAAI,oBAAoB,GAAG,KAAK,CAAA;QAChC,IAAI,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;YACrC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC/C,IAAI,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;oBACpC,oBAAoB,GAAG,IAAI,CAAA;gBAC7B,CAAC;qBAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;oBAC1C,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAA;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAC/C,8EAA8E;YAC9E,+CAA+C;YAC/C,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QAED,mBAAmB,GAAG,IAAI,CAAA;QAE1B,gEAAgE;QAChE,IAAI,wBAAwB,GAAG,KAAK,CAAA;QACpC,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,CAAA;QAEzC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,KAAK,kBAAkB,EAAE,CAAC;gBAC7D,SAAQ;YACV,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAA;YAC5D,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/C,SAAQ;YACV,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;YAErC,uEAAuE;YACvE,IAAI,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,SAAQ;YACV,CAAC;YAED,uEAAuE;YACvE,oEAAoE;YACpE,wEAAwE;YACxE,kEAAkE;YAClE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,wBAAwB,GAAG,IAAI,CAAA;gBAC/B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/C,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAA;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAED,+DAA+D;QAC/D,uDAAuD;QACvD,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,MAAM,uBAAuB,GAAsB,EAAE,CAAA;IACrD,MAAM,WAAW,GAAsB,EAAE,CAAA;IAEzC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QAC5C,IAAI,SAAS,CAAC,OAAO,EAAE;YAAE,SAAQ;QACjC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;YAAE,SAAQ;QAC5C,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE;YAAE,SAAQ;QAC9C,IAAI,SAAS,CAAC,uBAAuB,EAAE;YAAE,SAAQ;QAEjD,iCAAiC;QACjC,IAAI,oBAAoB,GAAG,KAAK,CAAA;QAChC,IAAI,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;YACrC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC/C,IAAI,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;oBACpC,oBAAoB,GAAG,IAAI,CAAA;oBAC3B,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,oBAAoB;YAAE,SAAQ;QAEnC,4BAA4B;QAC5B,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;YAAE,SAAQ;QAEpE,kEAAkE;QAClE,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,CAAA;QACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAErC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,KAAK,kBAAkB;YAAE,SAAQ;QACtE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE;YAAE,SAAQ;QAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACrC,IAAI,yBAAyB,CAAC,MAAM,CAAC;YAAE,SAAQ;QAE/C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAA;QAC5D,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAChE,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAEvD,IAAI,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,uBAAuB,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC,CAAA;QACrE,CAAC;aAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,WAAW,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,mBAAmB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAA;IAC3E,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;IAEhF,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO;QACL,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;QACvD,uBAAuB;QACvB,WAAW;QACX,cAAc;KACf,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAAC,MAAc,EAAE,QAAkB;IACjE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,gCAAoB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,sBAAsB,CACpC,SAAiB,EACjB,MAAc,EACd,eAAuB,EACvB,MAA0B;IAE1B,MAAM,SAAS,GAAG,IAAA,yBAAa,EAAC,SAAS,CAAC,CAAC,SAAS,CAAA;IACpD,MAAM,QAAQ,GAAG,SAAS,KAAK,eAAe,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;IAE5F,4EAA4E;IAC5E,4EAA4E;IAC5E,qEAAqE;IACrE,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IACpF,CAAC;IAED,0EAA0E;IAC1E,6DAA6D;IAE7D,yDAAyD;IACzD,0DAA0D;IAC1D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACnD,IAAI,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;QAC3E,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,sDAAsD;IACtD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1D,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAA;QAC1E,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Get a set of actions that do not automatically trust the current account, in all lower case.
3
+ *
4
+ * @returns the set of actions that do not automatically trust the current account in all lower case
5
+ */
6
+ export declare function actionsThatDoNotAutomaticallyTrustTheCurrentAccount(): Promise<Set<string>>;
7
+ //# sourceMappingURL=untrustingActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"untrustingActions.d.ts","sourceRoot":"","sources":["../../../src/whoCan/untrustingActions.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAsB,mDAAmD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAmBhG"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.actionsThatDoNotAutomaticallyTrustTheCurrentAccount = actionsThatDoNotAutomaticallyTrustTheCurrentAccount;
4
+ const iam_data_1 = require("@cloud-copilot/iam-data");
5
+ const kms = 'kms';
6
+ const kmsKey = 'key';
7
+ const stsAssumeRole = 'sts:AssumeRole';
8
+ let cachedActions = undefined;
9
+ /**
10
+ * Get a set of actions that do not automatically trust the current account, in all lower case.
11
+ *
12
+ * @returns the set of actions that do not automatically trust the current account in all lower case
13
+ */
14
+ async function actionsThatDoNotAutomaticallyTrustTheCurrentAccount() {
15
+ if (cachedActions) {
16
+ return cachedActions;
17
+ }
18
+ const kmsActions = await (0, iam_data_1.iamActionsForService)(kms);
19
+ const allActions = new Set([stsAssumeRole.toLowerCase()]);
20
+ for (const action of kmsActions) {
21
+ const details = await (0, iam_data_1.iamActionDetails)(kms, action);
22
+ if (details.resourceTypes.length === 1 &&
23
+ details.resourceTypes.some((rt) => rt.name === kmsKey)) {
24
+ allActions.add(`${kms}:${action.toLowerCase()}`);
25
+ }
26
+ }
27
+ cachedActions = allActions;
28
+ return allActions;
29
+ }
30
+ //# sourceMappingURL=untrustingActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"untrustingActions.js","sourceRoot":"","sources":["../../../src/whoCan/untrustingActions.ts"],"names":[],"mappings":";;AAaA,kHAmBC;AAhCD,sDAAgF;AAEhF,MAAM,GAAG,GAAG,KAAK,CAAA;AACjB,MAAM,MAAM,GAAG,KAAK,CAAA;AACpB,MAAM,aAAa,GAAG,gBAAgB,CAAA;AAEtC,IAAI,aAAa,GAA4B,SAAS,CAAA;AAEtD;;;;GAIG;AACI,KAAK,UAAU,mDAAmD;IACvE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,IAAA,+BAAoB,EAAC,GAAG,CAAC,CAAA;IAClD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IACjE,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,IAAA,2BAAgB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACnD,IACE,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;YAClC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,EACtD,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;IAED,aAAa,GAAG,UAAU,CAAA;IAC1B,OAAO,UAAU,CAAA;AACnB,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { type TopLevelConfig } from '@cloud-copilot/iam-collect';
2
+ import { IamCollectClient } from '../collect/client.js';
2
3
  import { type ClientFactoryPlugin } from '../collect/collect.js';
3
4
  import { type ResourceType } from '@cloud-copilot/iam-data';
5
+ import { type Statement } from '@cloud-copilot/iam-policy';
4
6
  import { type RequestDenial, type RequestGrant } from '@cloud-copilot/iam-simulate';
5
- import { IamCollectClient } from '../collect/client.js';
6
7
  import { type S3AbacOverride } from '../utils/s3Abac.js';
7
8
  import { type LightRequestAnalysis } from './requestAnalysis.js';
8
9
  /**
@@ -71,6 +72,10 @@ export interface ResourceAccessRequest {
71
72
  * search space.
72
73
  */
73
74
  principalScope?: WhoCanPrincipalScope;
75
+ /**
76
+ * Whether to ignore an existing principal index. This is for testing purposes.
77
+ */
78
+ ignorePrincipalIndex?: boolean;
74
79
  }
75
80
  /**
76
81
  * Represents a resource pattern that is allowed for a principal, used when wildcards
@@ -199,6 +204,20 @@ export interface WhoCanResponse {
199
204
  principalsNotFound: string[];
200
205
  denyDetails?: WhoCanDenyDetail[] | undefined;
201
206
  }
207
+ /**
208
+ * Processes a single whoCan request by creating a temporary WhoCanProcessor,
209
+ * enqueuing the request, waiting for it to settle, and shutting down. This
210
+ * preserves the original one-shot behavior where workers and cache are created
211
+ * and destroyed per call.
212
+ *
213
+ * For better performance when running multiple requests, use WhoCanProcessor
214
+ * directly to keep workers and cache alive across calls.
215
+ *
216
+ * @param collectConfigs the collect configurations for loading IAM data
217
+ * @param partition the AWS partition (e.g. 'aws', 'aws-cn')
218
+ * @param request the whoCan request parameters
219
+ * @returns the whoCan response with allowed principals and optional deny details
220
+ */
202
221
  export declare function whoCan(collectConfigs: TopLevelConfig[], partition: string, request: ResourceAccessRequest): Promise<WhoCanResponse>;
203
222
  export declare function uniqueAccountsToCheck(collectClient: IamCollectClient, accountsToCheck: AccountsToCheck): Promise<{
204
223
  accountsNotFound: string[];
@@ -212,9 +231,23 @@ export interface AccountsToCheck {
212
231
  specificPrincipals: string[];
213
232
  specificOrganizations: string[];
214
233
  specificOrganizationalUnits: string[];
234
+ /** Tracking flag indicating that an IfExists condition was found, meaning anonymous (unsigned) requests could match. */
235
+ checkAnonymous: boolean;
236
+ /** Whether any Allow statement has a wildcard principal or NotPrincipal, requiring all principals from the resource account to be checked. */
237
+ checkAllForCurrentAccount: boolean;
215
238
  }
239
+ /**
240
+ * Determines whether a policy statement requires checking all principals from
241
+ * the resource account. This is true when the statement is an Allow with a
242
+ * wildcard principal (`*` or `{ AWS: "*" }`) or a `NotPrincipal` element,
243
+ * since either form could grant access to any principal in the resource account.
244
+ *
245
+ * @param statement - The policy statement to check.
246
+ * @returns `true` if the statement could allow any principal from the resource account.
247
+ */
248
+ export declare function statementRequiresAllFromResourceAccount(statement: Statement): boolean;
216
249
  export declare function accountsToCheckBasedOnResourcePolicy(resourcePolicy: any, resourceAccount: string | undefined): Promise<AccountsToCheck>;
217
- export declare function actionsForWhoCan(request: ResourceAccessRequest): Promise<string[]>;
250
+ export declare function actionsForWhoCan(request: Pick<ResourceAccessRequest, 'actions' | 'resource'>): Promise<string[]>;
218
251
  /**
219
252
  * Get the the possible resource types for an action and resource
220
253
  *
@@ -1 +1 @@
1
- {"version":3,"file":"whoCan.d.ts","sourceRoot":"","sources":["../../../src/whoCan/whoCan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"whoCan.d.ts","sourceRoot":"","sources":["../../../src/whoCan/whoCan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAOL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAGL,KAAK,SAAS,EAEf,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAGnF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAGhE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,0NAA0N;IAC1N,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAA;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAA;IAE/B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAA;IAEhE;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAE7B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAE5B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IAEzC;;;;OAIG;IACH,cAAc,CAAC,EAAE,oBAAoB,CAAA;IAErC;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,UAAU,CAAC,EAAE,GAAG,CAAA;IAEhB;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IAEb;;;;OAIG;IACH,UAAU,CAAC,EAAE,GAAG,CAAA;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;OAGG;IACH,eAAe,CAAC,EAAE,4BAA4B,EAAE,CAAA;IAEhD;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;CACzB;AAED;;GAEG;AACH,UAAU,oBAAoB;IAC5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,IAAI,EAAE,QAAQ,CAAA;IAEd;;OAEG;IACH,OAAO,EAAE,aAAa,EAAE,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,oBAAoB;IACpE,IAAI,EAAE,UAAU,CAAA;IAEhB;;;;;;OAMG;IACH,eAAe,EAAE;QACf;;WAEG;QACH,OAAO,EAAE,MAAM,CAAA;QAEf;;WAEG;QACH,YAAY,EAAE,MAAM,CAAA;QAEpB;;WAEG;QACH,OAAO,EAAE,aAAa,EAAE,CAAA;KACzB,EAAE,CAAA;CACJ;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,GAAG,wBAAwB,CAAA;AAEhF,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,qBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,2BAA2B,EAAE,MAAM,EAAE,CAAA;IACrC,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,WAAW,CAAC,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAA;CAC7C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,MAAM,CAC1B,cAAc,EAAE,cAAc,EAAE,EAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA2CzB;AAED,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,gBAAgB,EAC/B,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC;IACT,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,qBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,2BAA2B,EAAE,MAAM,EAAE,CAAA;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAC,CAiDD;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,OAAO,CAAA;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,qBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,2BAA2B,EAAE,MAAM,EAAE,CAAA;IACrC,wHAAwH;IACxH,cAAc,EAAE,OAAO,CAAA;IACvB,8IAA8I;IAC9I,yBAAyB,EAAE,OAAO,CAAA;CACnC;AAoKD;;;;;;;;GAQG;AACH,wBAAgB,uCAAuC,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAYrF;AAED,wBAAsB,oCAAoC,CACxD,cAAc,EAAE,GAAG,EACnB,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,OAAO,CAAC,eAAe,CAAC,CAoJ1B;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,SAAS,GAAG,UAAU,CAAC,GAC3D,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BnB;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBxF;AAED,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAqBjG;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOrE;AAcD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,cAAc,QAyB/D"}