@cloud-copilot/iam-lens 0.1.7 → 0.1.8

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 (90) hide show
  1. package/README.md +251 -1
  2. package/dist/cjs/cli.js +53 -5
  3. package/dist/cjs/cli.js.map +1 -1
  4. package/dist/cjs/collect/client.d.ts +37 -2
  5. package/dist/cjs/collect/client.d.ts.map +1 -1
  6. package/dist/cjs/collect/client.js +126 -27
  7. package/dist/cjs/collect/client.js.map +1 -1
  8. package/dist/cjs/principals.d.ts +0 -5
  9. package/dist/cjs/principals.d.ts.map +1 -1
  10. package/dist/cjs/principals.js +0 -9
  11. package/dist/cjs/principals.js.map +1 -1
  12. package/dist/cjs/resources.js +1 -1
  13. package/dist/cjs/resources.js.map +1 -1
  14. package/dist/cjs/{contextKeys.d.ts → simulate/contextKeys.d.ts} +1 -1
  15. package/dist/cjs/simulate/contextKeys.d.ts.map +1 -0
  16. package/dist/cjs/{contextKeys.js → simulate/contextKeys.js} +1 -1
  17. package/dist/cjs/simulate/contextKeys.js.map +1 -0
  18. package/dist/cjs/{simulate.d.ts → simulate/simulate.d.ts} +4 -2
  19. package/dist/cjs/simulate/simulate.d.ts.map +1 -0
  20. package/dist/cjs/{simulate.js → simulate/simulate.js} +38 -20
  21. package/dist/cjs/simulate/simulate.js.map +1 -0
  22. package/dist/cjs/test-datasets/testClient.d.ts +9 -0
  23. package/dist/cjs/test-datasets/testClient.d.ts.map +1 -0
  24. package/dist/cjs/test-datasets/testClient.js +28 -0
  25. package/dist/cjs/test-datasets/testClient.js.map +1 -0
  26. package/dist/cjs/utils/arn.d.ts +22 -0
  27. package/dist/cjs/utils/arn.d.ts.map +1 -0
  28. package/dist/cjs/utils/arn.js +49 -0
  29. package/dist/cjs/utils/arn.js.map +1 -0
  30. package/dist/cjs/utils/sts.d.ts +2 -0
  31. package/dist/cjs/utils/sts.d.ts.map +1 -0
  32. package/dist/cjs/utils/sts.js +9 -0
  33. package/dist/cjs/utils/sts.js.map +1 -0
  34. package/dist/cjs/whoCan/whoCan.d.ts +54 -0
  35. package/dist/cjs/whoCan/whoCan.d.ts.map +1 -0
  36. package/dist/cjs/whoCan/whoCan.js +320 -0
  37. package/dist/cjs/whoCan/whoCan.js.map +1 -0
  38. package/dist/esm/cli.js +53 -5
  39. package/dist/esm/cli.js.map +1 -1
  40. package/dist/esm/collect/client.d.ts +37 -2
  41. package/dist/esm/collect/client.d.ts.map +1 -1
  42. package/dist/esm/collect/client.js +125 -27
  43. package/dist/esm/collect/client.js.map +1 -1
  44. package/dist/esm/principals.d.ts +0 -5
  45. package/dist/esm/principals.d.ts.map +1 -1
  46. package/dist/esm/principals.js +0 -8
  47. package/dist/esm/principals.js.map +1 -1
  48. package/dist/esm/resources.js +1 -1
  49. package/dist/esm/resources.js.map +1 -1
  50. package/dist/esm/{contextKeys.d.ts → simulate/contextKeys.d.ts} +1 -1
  51. package/dist/esm/simulate/contextKeys.d.ts.map +1 -0
  52. package/dist/esm/{contextKeys.js → simulate/contextKeys.js} +1 -1
  53. package/dist/esm/simulate/contextKeys.js.map +1 -0
  54. package/dist/esm/{simulate.d.ts → simulate/simulate.d.ts} +4 -2
  55. package/dist/esm/simulate/simulate.d.ts.map +1 -0
  56. package/dist/esm/{simulate.js → simulate/simulate.js} +37 -20
  57. package/dist/esm/simulate/simulate.js.map +1 -0
  58. package/dist/esm/test-datasets/testClient.d.ts +9 -0
  59. package/dist/esm/test-datasets/testClient.d.ts.map +1 -0
  60. package/dist/esm/test-datasets/testClient.js +25 -0
  61. package/dist/esm/test-datasets/testClient.js.map +1 -0
  62. package/dist/esm/utils/arn.d.ts +22 -0
  63. package/dist/esm/utils/arn.d.ts.map +1 -0
  64. package/dist/esm/utils/arn.js +43 -0
  65. package/dist/esm/utils/arn.js.map +1 -0
  66. package/dist/esm/utils/sts.d.ts +2 -0
  67. package/dist/esm/utils/sts.d.ts.map +1 -0
  68. package/dist/esm/utils/sts.js +6 -0
  69. package/dist/esm/utils/sts.js.map +1 -0
  70. package/dist/esm/whoCan/whoCan.d.ts +54 -0
  71. package/dist/esm/whoCan/whoCan.d.ts.map +1 -0
  72. package/dist/esm/whoCan/whoCan.js +311 -0
  73. package/dist/esm/whoCan/whoCan.js.map +1 -0
  74. package/package.json +1 -1
  75. package/dist/cjs/accounts.d.ts +0 -3
  76. package/dist/cjs/accounts.d.ts.map +0 -1
  77. package/dist/cjs/accounts.js +0 -8
  78. package/dist/cjs/accounts.js.map +0 -1
  79. package/dist/cjs/contextKeys.d.ts.map +0 -1
  80. package/dist/cjs/contextKeys.js.map +0 -1
  81. package/dist/cjs/simulate.d.ts.map +0 -1
  82. package/dist/cjs/simulate.js.map +0 -1
  83. package/dist/esm/accounts.d.ts +0 -3
  84. package/dist/esm/accounts.d.ts.map +0 -1
  85. package/dist/esm/accounts.js +0 -5
  86. package/dist/esm/accounts.js.map +0 -1
  87. package/dist/esm/contextKeys.d.ts.map +0 -1
  88. package/dist/esm/contextKeys.js.map +0 -1
  89. package/dist/esm/simulate.d.ts.map +0 -1
  90. package/dist/esm/simulate.js.map +0 -1
package/README.md CHANGED
@@ -3,5 +3,255 @@
3
3
  [![NPM Version](https://img.shields.io/npm/v/@cloud-copilot/iam-lens.svg?logo=nodedotjs)](https://www.npmjs.com/package/@cloud-copilot/iam-lens) [![License: AGPL v3](https://img.shields.io/github/license/cloud-copilot/iam-lens)](LICENSE.txt) [![GuardDog](https://github.com/cloud-copilot/iam-lens/actions/workflows/guarddog.yml/badge.svg)](https://github.com/cloud-copilot/iam-lens/actions/workflows/guarddog.yml) [![Known Vulnerabilities](https://snyk.io/test/github/cloud-copilot/iam-lens/badge.svg?targetFile=package.json&style=flat-square)](https://snyk.io/test/github/cloud-copilot/iam-lens?targetFile=package.json)
4
4
 
5
5
  ## iam-lens
6
- Get visibility into your actual AWS IAM permissions.
7
6
 
7
+ Get visibility into the actual IAM policies that apply in your AWS organizations and accounts. This will use your existing AWS IAM policies (downloaded via [iam-collect](https://github.com/cloud-copilot/iam-collect)) and evaluate the effective permissions.
8
+
9
+ ## Quick Start
10
+
11
+ ```bash
12
+ # Install
13
+ npm install -g @cloud-copilot/iam-collect @cloud-copilot/iam-lens
14
+
15
+ # Download all IAM policies in your accounts
16
+ iam-collect init
17
+ iam-collect download
18
+
19
+ # Simulate a request
20
+ iam-lens simulate --principal arn:aws:iam::123456789012:role/ExampleRole --resource arn:aws:s3:::example-bucket/secret-file.txt --action s3:GetObject
21
+
22
+ # Find out who can do something
23
+ iam-lens who-can --resource arn:aws:s3:::example-bucket --actions s3:GetObject
24
+
25
+ # Find out who can do all actions on a resource
26
+ iam-lens who-can --resource arn:aws:iam::123456789012:role/ExampleRole
27
+ ```
28
+
29
+ ## What is iam-lens?
30
+
31
+ iam-lens uses real IAM data from your AWS accounts (collected via [iam-collect](https://github.com/cloud-copilot/iam-collect)) and allows you to quickly simulate requests and discover the actual effective permissions that apply to a principal or resource.
32
+
33
+ ## Why use it?
34
+
35
+ 1. **Understand** what permissions are actually in place and why. See the policies that determine the outcome of a given request.
36
+ 2. **Verify** specific actions are allowed or not allowed for a principal or resource.
37
+ 3. **Discover** who can take action on a sensitive resource with a single command.
38
+ 4. **Audit** your IAM policies and ensure they are configured correctly.
39
+ 5. **Debug** permissions by simulating requests locally and iterate quickly without needing to deploy changes to your AWS environment.
40
+
41
+ ## Getting Started
42
+
43
+ 1. **Download Your Policies** Use [iam-collect](https://github.com/cloud-copilot/iam-collect) to download all your policies from all your AWS accounts. iam-collect is highly configurable and can be customized to collect the policies you need. It only downloads information to your file system or an S3 bucket, so you're in full control of your data.
44
+
45
+ ```bash
46
+ npm install -g @cloud-copilot/iam-collect
47
+ iam-collect init
48
+ iam-collect download
49
+ ```
50
+
51
+ To see the effect of SCPs and RCPs, you should download data from your management account; or an account with permissions do download organization information. Download data for member accounts you want to analyze. `iam-lens` will analyze cross-account and cross-organization requests if you have the data available.
52
+
53
+ 2. **Install iam-lens**
54
+
55
+ ```bash
56
+ npm install -g @cloud-copilot/iam-lens
57
+ ```
58
+
59
+ 3. **Execute Commands** with `iam-lens` to simulate requests, discover permissions, and audit your IAM policies.
60
+
61
+ Simulate a request:
62
+
63
+ ```bash
64
+ iam-lens simulate --principal arn:aws:iam::123456789012:role/ExampleRole --resource arn:aws:s3:::example-bucket/secret-file.txt --action s3:GetObject
65
+ ```
66
+
67
+ or
68
+
69
+ Discover who can perform an action on a resource:
70
+
71
+ ```bash
72
+ iam-lens who-can --resource arn:aws:iam::111111111111:role/ImportantRole --actions sts:AssumeRole iam:PassRole
73
+ ```
74
+
75
+ ## Commands
76
+
77
+ ### `simulate` - Simulate an IAM request
78
+
79
+ ```bash
80
+ iam-lens simulate [options]
81
+ ```
82
+
83
+ Evaluates whether a given principal can perform a specified action on a resource (or wildcard). Returns a decision (Allowed/ImplicitlyDenied/ExplicitlyDenied), and exits nonzero if you provided an `--expect` that doesn’t match the result.
84
+
85
+ **Options:**
86
+
87
+ | Flag | Description |
88
+ | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
89
+ | `--principal <arn>` | The principal the request is from. Can be a user, role, session, or AWS service. |
90
+ | `--resource <arn>` | The ARN of the resource to simulate access to. Ignore for wildcard-only actions (e.g. `s3:ListAllMyBuckets`). |
91
+ | `--resourceAccountId <id>` | The account ID of the resource, only required if it cannot be determined from the resource ARN. |
92
+ | `--action <service:action>` | The action to simulate; must be a valid IAM service and action such as `s3:ListBucket`. |
93
+ | `--context <key=value>` | One or more context keys to use for the simulation. Keys are formatted as `key=value1,value2`. Multiple values can be separated by commas. |
94
+ | `-v, --verbose` | Enable verbose output for the simulation (prints evaluation steps and policy checks). |
95
+ | `--expect <result>` | The expected outcome of the simulation. Valid values: `Allowed`, `ImplicitlyDenied`, `ExplicitlyDenied`, `AnyDeny`. If the result does not match the expect value, a non-zero exit code is returned |
96
+
97
+ **Examples:**
98
+
99
+ ```bash
100
+ # Simple simulate: can this role list objects in the bucket?
101
+ iam-lens simulate \
102
+ --principal arn:aws:iam::111111111111:role/MyRole \
103
+ --resource arn:aws:s3:::my-bucket \
104
+ --action s3:ListBucket
105
+
106
+ # Simulate a wildcard action (ListAllMyBuckets) – must supply resourceAccountId
107
+ iam-lens simulate \
108
+ --principal arn:aws:iam::222222222222:user/Alice \
109
+ --action s3:ListAllMyBuckets \
110
+ --resourceAccountId 222222222222
111
+
112
+ # Include context keys (e.g. resource tags or org IDs)
113
+ iam-lens simulate \
114
+ --principal arn:aws:iam::333333333333:role/DevRole \
115
+ --resource arn:aws:sqs:us-east-1:333333333333:my-queue \
116
+ --action sqs:SendMessage \
117
+ --context aws:PrincipalOrgID=o-aaaaaaaaaa \
118
+ --context aws:ResourceTag/Env=prod,staging \
119
+ --verbose
120
+
121
+ # Assert the result must be “Allowed”; exit code will be nonzero if not
122
+ iam-lens simulate \
123
+ --principal arn:aws:iam::444444444444:role/ReadOnly \
124
+ --resource arn:aws:dynamodb:us-east-1:444444444444:table/Books \
125
+ --action dynamodb:Query \
126
+ --expect Allowed
127
+ ```
128
+
129
+ ### `who-can` - Find who can perform an action on a resource
130
+
131
+ ```bash
132
+ iam-lens who-can [options]
133
+ ```
134
+
135
+ Lists all principals in your IAM data who are allowed to perform one or more specified actions on a resource (or wildcard). If applicable it will check the resource policy to find cross-account permissions and AWS service principals.
136
+
137
+ **Options:**
138
+
139
+ | Flag | Description |
140
+ | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
141
+ | `--resource <arn>` | The ARN of the resource to check permissions for. Ignore for wildcard-only actions (`iam:ListRoles`, etc.). |
142
+ | `--resourceAccount <id>` | The account ID of the resource, only required if it cannot be determined from the resource ARN. Required for wildcard actions such as `s3:ListAllMyBuckets` |
143
+ | `--actions <service:action>` | One or more actions to check, e.g. `s3:GetObject`. Specify as many actions as you want. If omitted it will analyze all valid actions for the resource. If no `--resource` is specified then actions must be entered. |
144
+
145
+ **Examples:**
146
+
147
+ ```bash
148
+ # Who can get objects from this bucket?
149
+ iam-lens who-can \
150
+ --resource arn:aws:s3:::my-bucket \
151
+ --actions s3:GetObject
152
+
153
+ # Who can list all IAM roles in any account? (wildcard action – no resource)
154
+ iam-lens who-can \
155
+ --actions iam:ListRoles
156
+
157
+ # Check multiple actions at once
158
+ iam-lens who-can \
159
+ --resource arn:aws:dynamodb:us-east-1:555555555555:table/Books \
160
+ --actions dynamodb:Query,dynamodb:UpdateItem
161
+ ```
162
+
163
+ **Global Options:**
164
+
165
+ | Flag | Description | Default |
166
+ | -------------------------- | --------------------------------------------------------------------- | ------------------- |
167
+ | `--collectConfigs <files>` | One or more `iam-collect` config files to use for fetching IAM data. | `iam-collect.jsonc` |
168
+ | `--partition <partition>` | The AWS partition (`aws`, `aws-cn`, `aws-us-gov`). Defaults to `aws`. | `aws` |
169
+
170
+ ## Context Keys
171
+
172
+ Below are the context keys that iam-lens populates by default during simulation. These keys are set based on your principal, resource, and organization data. Any keys provided via `--context` will override the defaults.
173
+
174
+ ### Default Context Keys
175
+
176
+ - **`aws:SecureTransport`**
177
+ Always set to `true` to indicate the request is using a secure channel.
178
+
179
+ - **`aws:CurrentTime`**
180
+ ISO 8601 timestamp of when the simulation is run (e.g., `2025-06-01T12:34:56.789Z`).
181
+
182
+ - **`aws:EpochTime`**
183
+ Unix epoch time in seconds (e.g., `1717290896`).
184
+
185
+ #### Principal Context (if principal is an ARN)
186
+
187
+ - **`aws:PrincipalArn`**
188
+ The full ARN of the principal (user, role, federated user, or service) being simulated.
189
+
190
+ - **`aws:PrincipalAccount`**
191
+ The AWS account ID extracted from the principal ARN.
192
+
193
+ - **`aws:PrincipalOrgId`** _(if the account is in an organization)_
194
+ The Organization ID that owns the principal’s account.
195
+
196
+ - **`aws:PrincipalOrgPaths`** _(if the account is in an organization)_
197
+ A list containing a single string of the form `<OrgId>/<OU1>/<OU2>/…/` indicating the account’s path in the OU hierarchy.
198
+
199
+ - **`aws:PrincipalTag/<TagKey>`**
200
+ For each tag on the IAM principal, a context key of the form `aws:PrincipalTag/<TagKey>` with its tag value.
201
+
202
+ - **`aws:PrincipalIsAWSService`**
203
+ Set to `true` if the principal is an AWS service principal (e.g. `lambda.amazonaws.com`), otherwise `false`.
204
+
205
+ - **`aws:PrincipalType`**
206
+ One of: `Account`, `User`, `FederatedUser`, `AssumedRole`, indicating the type of principal.
207
+
208
+ - **`aws:userid`**
209
+ The unique identifier for the principal session:
210
+
211
+ - For a root principal: the account ID
212
+ - For a user: the IAM user’s unique ID (or `UNKNOWN` if not found)
213
+ - For a federated user: `<AccountId>:<FederatedName>`
214
+ - For an assumed role: `<RoleUniqueId>:<SessionName>`
215
+
216
+ - **`aws:username`** _(only for IAM users)_
217
+ The IAM username portion of the principal ARN (e.g. `Alice`).
218
+
219
+ - **`aws:PrincipalServiceName`** _(only for AWS service principals)_
220
+ The service principal string (e.g. `lambda.amazonaws.com`).
221
+
222
+ - **`aws:SourceAccount`** _(only for AWS service principals)_
223
+ The account ID of the simulated resource, used when interpreting a service principal’s context.
224
+
225
+ - **`aws:SourceOrgID`** _(only for AWS service principals)_
226
+ The organization ID of the simulated resource’s account (if any).
227
+
228
+ - **`aws:SourceOrgPaths`** _(only for AWS service principals)_
229
+ The OU hierarchy path for the simulated resource’s account (if any).
230
+
231
+ #### Resource Context (unless action is excluded)
232
+
233
+ - **`aws:ResourceAccount`**
234
+ The AWS account ID of the simulated resource.
235
+
236
+ - **`aws:ResourceOrgID`** _(if the resource account is in an organization)_
237
+ The Organization ID for the resource’s account.
238
+
239
+ - **`aws:ResourceOrgPaths`** _(if the resource account is in an organization)_
240
+ A list containing a single string of the form `<OrgId>/<OU1>/<OU2>/…/` for the resource’s account.
241
+
242
+ - **`aws:ResourceTag/<TagKey>`**
243
+ For each tag on the resource ARN, a context key `aws:ResourceTag/TagKey` with its tag value. **This is only for resources that are stored in your `iam-collect` data**, such as Roles, S3 Buckets, DynamoDB Tables, etc. For resources not stored in `iam-collect`, this key will not be set.
244
+
245
+ ### Overriding Default Context Keys
246
+
247
+ Any context keys supplied via the `--context key=value[,value2,…]` option will override the defaults described above. For example:
248
+
249
+ ```bash
250
+ iam-lens simulate \
251
+ --principal arn:aws:iam::123456789012:user/Alice \
252
+ --resource arn:aws:s3:::my-bucket \
253
+ --action s3:GetObject \
254
+ --context aws:CurrentTime=2025-01-01T00:00:00Z aws:PrincipalTag/Env=staging
255
+ ```
256
+
257
+ In this case, `aws:CurrentTime` and `aws:PrincipalTag/Env` will use the provided values instead of what iam-lens would normally derive.
package/dist/cjs/cli.js CHANGED
@@ -3,8 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const cli_1 = require("@cloud-copilot/cli");
5
5
  const collect_js_1 = require("./collect/collect.js");
6
- const simulate_js_1 = require("./simulate.js");
6
+ const simulate_js_1 = require("./simulate/simulate.js");
7
7
  const packageVersion_js_1 = require("./utils/packageVersion.js");
8
+ const whoCan_js_1 = require("./whoCan/whoCan.js");
8
9
  const main = async () => {
9
10
  const version = await (0, packageVersion_js_1.iamLensVersion)();
10
11
  const cli = (0, cli_1.parseCliArguments)('iam-lens', {
@@ -24,12 +25,12 @@ const main = async () => {
24
25
  resourceAccountId: {
25
26
  type: 'string',
26
27
  values: 'single',
27
- description: 'The account ID of the resource, only required if it cannot be determined from the resource ARN. Ignore for wildcard actions'
28
+ description: 'The account ID of the resource, only required if it cannot be determined from the resource ARN.'
28
29
  },
29
30
  action: {
30
31
  type: 'string',
31
32
  values: 'single',
32
- description: 'The action to simulate; must be a valid IAM service and action such as `s3:GetObject`'
33
+ description: 'The action to simulate; must be a valid IAM service and action such as `s3:ListBucket`'
33
34
  },
34
35
  context: {
35
36
  type: 'string',
@@ -40,6 +41,32 @@ const main = async () => {
40
41
  type: 'boolean',
41
42
  description: 'Enable verbose output for the simulation',
42
43
  character: 'v'
44
+ },
45
+ expect: {
46
+ type: 'enum',
47
+ values: 'single',
48
+ validValues: ['Allowed', 'ImplicitlyDenied', 'ExplicitlyDenied', 'AnyDeny'],
49
+ description: 'The expected result of the simulation, if the result does not match the expected response a non-zero exit code will be returned'
50
+ }
51
+ }
52
+ },
53
+ 'who-can': {
54
+ description: 'Find who can perform an action on a resource',
55
+ options: {
56
+ resource: {
57
+ type: 'string',
58
+ values: 'single',
59
+ description: 'The ARN of the resource to check permissions for. Ignore for wildcard actions'
60
+ },
61
+ resourceAccount: {
62
+ type: 'string',
63
+ values: 'single',
64
+ description: 'The account ID of the resource, only required if it cannot be determined from the resource ARN. Required for wildcard actions'
65
+ },
66
+ actions: {
67
+ type: 'string',
68
+ values: 'multiple',
69
+ description: 'The action to check permissions for; must be a valid IAM service and action such as `s3:GetObject`'
43
70
  }
44
71
  }
45
72
  }
@@ -64,9 +91,9 @@ const main = async () => {
64
91
  cli.args.collectConfigs.push('./iam-collect.jsonc');
65
92
  }
66
93
  const thePartition = cli.args.partition || 'aws';
94
+ const collectConfigs = await (0, collect_js_1.loadCollectConfigs)(cli.args.collectConfigs);
95
+ const collectClient = (0, collect_js_1.getCollectClient)(collectConfigs, thePartition);
67
96
  if (cli.subcommand === 'simulate') {
68
- const collectConfigs = await (0, collect_js_1.loadCollectConfigs)(cli.args.collectConfigs);
69
- const collectClient = (0, collect_js_1.getCollectClient)(collectConfigs, thePartition);
70
97
  const { principal, resource, resourceAccountId, action, context } = cli.args;
71
98
  const contextKeys = convertContextKeysToMap(context);
72
99
  const result = await (0, simulate_js_1.simulateRequest)({
@@ -76,10 +103,31 @@ const main = async () => {
76
103
  action: action,
77
104
  customContextKeys: contextKeys
78
105
  }, collectClient);
106
+ if (result.errors) {
107
+ console.error('Simulation Errors:');
108
+ console.log(JSON.stringify(result.errors, null, 2));
109
+ process.exit(1);
110
+ }
79
111
  console.log(`Simulation Result: ${result.analysis?.result}`);
80
112
  if (cli.args.verbose) {
81
113
  console.log(JSON.stringify(result, null, 2));
82
114
  }
115
+ if (!(0, simulate_js_1.resultMatchesExpectation)(cli.args.expect, result.analysis?.result)) {
116
+ process.exit(1);
117
+ }
118
+ }
119
+ else if (cli.subcommand === 'who-can') {
120
+ const { resource, resourceAccount, actions } = cli.args;
121
+ if (!resourceAccount && !resource && actions.length === 0) {
122
+ console.error('Error: At least 1) resource or 2) resource-account and actions must be provided for who-can command');
123
+ process.exit(1);
124
+ }
125
+ const results = await (0, whoCan_js_1.whoCan)(collectClient, {
126
+ resource: cli.args.resource,
127
+ actions: cli.args.actions,
128
+ resourceAccount: cli.args.resourceAccount
129
+ });
130
+ console.log(JSON.stringify(results, null, 2));
83
131
  }
84
132
  };
85
133
  main()
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -55,15 +55,34 @@ interface OrganizationMetadata {
55
55
  TAG_POLICY?: boolean;
56
56
  };
57
57
  }
58
+ interface OrgStructureNode {
59
+ children?: OrgStructure | undefined;
60
+ accounts?: string[] | undefined;
61
+ }
62
+ interface OrgStructure {
63
+ [key: string]: OrgStructureNode;
64
+ }
65
+ export interface IamCollectClientOptions {
66
+ enableCaching?: boolean;
67
+ }
58
68
  export declare class IamCollectClient {
59
69
  private storageClient;
60
- constructor(storageClient: AwsIamStore);
70
+ private _cache;
71
+ private _enableCaching;
72
+ constructor(storageClient: AwsIamStore, clientOptions?: IamCollectClientOptions);
73
+ private withCache;
61
74
  /**
62
75
  * Checks if an account exists in the store.
63
76
  * @param accountId The ID of the account to check.
64
77
  * @returns True if the account exists, false otherwise.
65
78
  */
66
79
  accountExists(accountId: string): Promise<boolean>;
80
+ /**
81
+ * Get all account IDs in the store.
82
+ *
83
+ * @returns all account IDs in the store
84
+ */
85
+ allAccounts(): Promise<string[]>;
67
86
  /**
68
87
  * Checks if a principal exists in the store.
69
88
  * @param principalArn The ARN of the principal to check.
@@ -121,7 +140,7 @@ export declare class IamCollectClient {
121
140
  * @param orgId The ID of the organization.
122
141
  * @returns The account data for the organization.
123
142
  */
124
- getAccountDataForOrg(orgId: string): Promise<OrgAccounts>;
143
+ getAccountDataForOrg(orgId: string): Promise<OrgAccounts | undefined>;
125
144
  /**
126
145
  * Gets the org units data for an organization.
127
146
  * @param orgId The ID of the organization.
@@ -266,6 +285,22 @@ export declare class IamCollectClient {
266
285
  * @returns a unique ID for the resource, or undefined if not found
267
286
  */
268
287
  getUniqueIdForIamResource(resourceArn: string): Promise<string | undefined>;
288
+ /**
289
+ * Get the account IDs for an organization.
290
+ *
291
+ * @param organizationId the ID of the organization
292
+ * @returns a tuple containing a boolean indicating success and an array of account IDs
293
+ */
294
+ getAccountsForOrganization(organizationId: string): Promise<[boolean, string[]]>;
295
+ /**
296
+ * Get the organization structure or an organization.
297
+ *
298
+ * @param orgId the ID of the organization
299
+ * @returns returns the organization structure or undefined if not found
300
+ */
301
+ getOrganizationStructure(orgId: string): Promise<OrgStructure | undefined>;
302
+ getAccountsForOrgPath(orgId: string, ouIds: string[]): Promise<[boolean, string[]]>;
303
+ getAllPrincipalsInAccount(accountId: string): Promise<string[]>;
269
304
  }
270
305
  export {};
271
306
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/collect/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAIxD,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,EAAE,CAAA;CAC1C;AAED,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,kBAAkB,EAAE,MAAM,CAAA;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAOD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,GAAG,CAAA;CACZ;AAOD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,GAAG,CAAA;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,GAAG,CAAA;CACZ;AAED,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAED,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AAc7C,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAED,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAE9C,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,CAAA;AAEpC,UAAU,oBAAoB;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE;QACR,yBAAyB,CAAC,EAAE,OAAO,CAAA;QACnC,aAAa,CAAC,EAAE,OAAO,CAAA;QACvB,uBAAuB,CAAC,EAAE,OAAO,CAAA;QACjC,sBAAsB,CAAC,EAAE,OAAO,CAAA;QAChC,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;CACF;AAQD,qBAAa,gBAAgB;IACf,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,WAAW;IAE9C;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxD;;;;OAIG;IACG,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU7D;;;;OAIG;IACG,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAIpF;;;;;OAKG;IACG,+BAA+B,CACnC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,GACxB,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAuCnC;;;;;OAKG;IACG,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBzE;;;;OAIG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAU5E;;;;;OAKG;IACG,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAM5F;;;;OAIG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAIhE;;;;;OAKG;IACG,wBAAwB,CAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,GACxB,OAAO,CAAC,SAAS,EAAE,CAAC;IAkBvB;;;;OAIG;IACG,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI/D;;;;OAIG;IACG,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI7D;;;;;;OAMG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC;IAoBrB;;;;OAIG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAIhE;;;;OAIG;IACG,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAIpF;;;;;OAKG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI/E;;;;;;OAMG;IACG,wBAAwB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,aAAa,GACxB,OAAO,CAAC,SAAS,EAAE,CAAC;IAavB;;;;;OAKG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI/E;;;;OAIG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAMxE;;;;OAIG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAS5E;;;;OAIG;IACG,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IASzE;;;;OAIG;IACG,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAkBpE,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiBpF;;;;OAIG;IACG,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAalE,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAU/E;;;;;OAKG;IACG,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAgBxF;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW1D;;;;;OAKG;IACG,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAkBtE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAapE,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAkBpE,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAalE,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAgBxF;;;;;OAKG;IACG,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAOpF;;;;;;OAMG;IACG,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAgB/F;;;;;;OAMG;IACG,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAQ/F;;;;;;OAMG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAQlC;;;;;;;OAOG;IACG,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CASlF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/collect/client.ts"],"names":[],"mappings":"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"}