@cloud-copilot/iam-simulate 0.1.4 → 0.1.6
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/ConditionKeys.d.ts +19 -0
- package/dist/cjs/ConditionKeys.d.ts.map +1 -0
- package/dist/cjs/ConditionKeys.js +27 -0
- package/dist/cjs/ConditionKeys.js.map +1 -0
- package/dist/cjs/SCPAnalysis.d.ts +6 -0
- package/dist/cjs/SCPAnalysis.d.ts.map +1 -0
- package/dist/cjs/SCPAnalysis.js +3 -0
- package/dist/cjs/SCPAnalysis.js.map +1 -0
- package/dist/cjs/context_keys/findContextKeys.d.ts +19 -0
- package/dist/cjs/context_keys/findContextKeys.d.ts.map +1 -0
- package/dist/cjs/context_keys/findContextKeys.js +57 -0
- package/dist/cjs/context_keys/findContextKeys.js.map +1 -0
- package/dist/cjs/core_engine/coreSimulatorEngine.d.ts +39 -0
- package/dist/cjs/core_engine/coreSimulatorEngine.d.ts.map +1 -1
- package/dist/cjs/core_engine/coreSimulatorEngine.js +56 -0
- package/dist/cjs/core_engine/coreSimulatorEngine.js.map +1 -1
- package/dist/cjs/evaluate.d.ts +1 -0
- package/dist/cjs/evaluate.d.ts.map +1 -1
- package/dist/cjs/global_conditions/globalConditionKeys.d.ts +17 -0
- package/dist/cjs/global_conditions/globalConditionKeys.d.ts.map +1 -0
- package/dist/cjs/global_conditions/globalConditionKeys.js +296 -0
- package/dist/cjs/global_conditions/globalConditionKeys.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +7 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/principal/principal.d.ts +9 -1
- package/dist/cjs/principal/principal.d.ts.map +1 -1
- package/dist/cjs/principal/principal.js +17 -0
- package/dist/cjs/principal/principal.js.map +1 -1
- package/dist/cjs/request/requestPrincipal.d.ts.map +1 -1
- package/dist/cjs/request/requestPrincipal.js.map +1 -1
- package/dist/cjs/services/DefaultServiceAuthorizer.d.ts +30 -1
- package/dist/cjs/services/DefaultServiceAuthorizer.d.ts.map +1 -1
- package/dist/cjs/services/DefaultServiceAuthorizer.js +93 -7
- package/dist/cjs/services/DefaultServiceAuthorizer.js.map +1 -1
- package/dist/cjs/services/ServiceAuthorizer.d.ts +3 -0
- package/dist/cjs/services/ServiceAuthorizer.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/contextKeys.d.ts +9 -1
- package/dist/cjs/simulation_engine/contextKeys.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/contextKeys.js +27 -40
- package/dist/cjs/simulation_engine/contextKeys.js.map +1 -1
- package/dist/cjs/simulation_engine/simulation.d.ts +12 -1
- package/dist/cjs/simulation_engine/simulation.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/simulationEngine.d.ts +15 -0
- package/dist/cjs/simulation_engine/simulationEngine.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/simulationEngine.js +133 -12
- package/dist/cjs/simulation_engine/simulationEngine.js.map +1 -1
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts +1 -1
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.js +13 -4
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.js.map +1 -1
- package/dist/cjs/util.d.ts +69 -0
- package/dist/cjs/util.d.ts.map +1 -1
- package/dist/cjs/util.js +166 -0
- package/dist/cjs/util.js.map +1 -1
- package/dist/esm/ConditionKeys.d.ts +19 -0
- package/dist/esm/ConditionKeys.d.ts.map +1 -0
- package/dist/esm/ConditionKeys.js +23 -0
- package/dist/esm/ConditionKeys.js.map +1 -0
- package/dist/esm/SCPAnalysis.d.ts +6 -0
- package/dist/esm/SCPAnalysis.d.ts.map +1 -0
- package/dist/esm/SCPAnalysis.js +2 -0
- package/dist/esm/SCPAnalysis.js.map +1 -0
- package/dist/esm/context_keys/findContextKeys.d.ts +19 -0
- package/dist/esm/context_keys/findContextKeys.d.ts.map +1 -0
- package/dist/esm/context_keys/findContextKeys.js +53 -0
- package/dist/esm/context_keys/findContextKeys.js.map +1 -0
- package/dist/esm/core_engine/coreSimulatorEngine.d.ts +39 -0
- package/dist/esm/core_engine/coreSimulatorEngine.d.ts.map +1 -1
- package/dist/esm/core_engine/coreSimulatorEngine.js +54 -0
- package/dist/esm/core_engine/coreSimulatorEngine.js.map +1 -1
- package/dist/esm/evaluate.d.ts +1 -0
- package/dist/esm/evaluate.d.ts.map +1 -1
- package/dist/esm/global_conditions/globalConditionKeys.d.ts +17 -0
- package/dist/esm/global_conditions/globalConditionKeys.d.ts.map +1 -0
- package/dist/esm/global_conditions/globalConditionKeys.js +290 -0
- package/dist/esm/global_conditions/globalConditionKeys.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/principal/principal.d.ts +9 -1
- package/dist/esm/principal/principal.d.ts.map +1 -1
- package/dist/esm/principal/principal.js +16 -0
- package/dist/esm/principal/principal.js.map +1 -1
- package/dist/esm/request/requestPrincipal.d.ts.map +1 -1
- package/dist/esm/request/requestPrincipal.js.map +1 -1
- package/dist/esm/services/DefaultServiceAuthorizer.d.ts +30 -1
- package/dist/esm/services/DefaultServiceAuthorizer.d.ts.map +1 -1
- package/dist/esm/services/DefaultServiceAuthorizer.js +93 -7
- package/dist/esm/services/DefaultServiceAuthorizer.js.map +1 -1
- package/dist/esm/services/ServiceAuthorizer.d.ts +3 -0
- package/dist/esm/services/ServiceAuthorizer.d.ts.map +1 -1
- package/dist/esm/simulation_engine/contextKeys.d.ts +9 -1
- package/dist/esm/simulation_engine/contextKeys.d.ts.map +1 -1
- package/dist/esm/simulation_engine/contextKeys.js +28 -40
- package/dist/esm/simulation_engine/contextKeys.js.map +1 -1
- package/dist/esm/simulation_engine/simulation.d.ts +12 -1
- package/dist/esm/simulation_engine/simulation.d.ts.map +1 -1
- package/dist/esm/simulation_engine/simulationEngine.d.ts +15 -0
- package/dist/esm/simulation_engine/simulationEngine.d.ts.map +1 -1
- package/dist/esm/simulation_engine/simulationEngine.js +133 -13
- package/dist/esm/simulation_engine/simulationEngine.js.map +1 -1
- package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts +1 -1
- package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -1
- package/dist/esm/simulation_engine/unsafeSimulationEngine.js +13 -4
- package/dist/esm/simulation_engine/unsafeSimulationEngine.js.map +1 -1
- package/dist/esm/util.d.ts +69 -0
- package/dist/esm/util.d.ts.map +1 -1
- package/dist/esm/util.js +158 -0
- package/dist/esm/util.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Policy } from "@cloud-copilot/iam-policy";
|
|
2
|
+
/**
|
|
3
|
+
* Find all the context keys in a list of policies
|
|
4
|
+
*
|
|
5
|
+
* @param policies - The list of policies to search
|
|
6
|
+
* @returns The list of valid and invalid context keys found in the policies
|
|
7
|
+
*/
|
|
8
|
+
export declare function findContextKeys(policies: Policy[]): Promise<{
|
|
9
|
+
validKeys: string[];
|
|
10
|
+
invalidKeys: string[];
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* Get the context variables used in a policy
|
|
14
|
+
*
|
|
15
|
+
* @param policy - The policy to extract variables from
|
|
16
|
+
* @returns The list of variables used in the policy
|
|
17
|
+
*/
|
|
18
|
+
export declare function getContextKeysFromPolicy(policy: Policy): string[];
|
|
19
|
+
//# sourceMappingURL=findContextKeys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findContextKeys.d.ts","sourceRoot":"","sources":["../../../src/context_keys/findContextKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAGnD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqBjH;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBjE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { getVariablesFromString, isActualContextKey, normalizeContextKeyCase } from "../util.js";
|
|
2
|
+
/**
|
|
3
|
+
* Find all the context keys in a list of policies
|
|
4
|
+
*
|
|
5
|
+
* @param policies - The list of policies to search
|
|
6
|
+
* @returns The list of valid and invalid context keys found in the policies
|
|
7
|
+
*/
|
|
8
|
+
export async function findContextKeys(policies) {
|
|
9
|
+
const rawKeys = new Set();
|
|
10
|
+
for (const policy of policies) {
|
|
11
|
+
getContextKeysFromPolicy(policy).forEach(v => rawKeys.add(v));
|
|
12
|
+
}
|
|
13
|
+
const validKeys = new Set();
|
|
14
|
+
const invalidKeys = new Set();
|
|
15
|
+
for (const key of rawKeys) {
|
|
16
|
+
const valid = await isActualContextKey(key);
|
|
17
|
+
if (valid) {
|
|
18
|
+
const normalizedKey = await normalizeContextKeyCase(key);
|
|
19
|
+
validKeys.add(normalizedKey);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
invalidKeys.add(key);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
validKeys: Array.from(validKeys),
|
|
27
|
+
invalidKeys: Array.from(invalidKeys)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get the context variables used in a policy
|
|
32
|
+
*
|
|
33
|
+
* @param policy - The policy to extract variables from
|
|
34
|
+
* @returns The list of variables used in the policy
|
|
35
|
+
*/
|
|
36
|
+
export function getContextKeysFromPolicy(policy) {
|
|
37
|
+
const variables = [];
|
|
38
|
+
for (const statement of policy.statements()) {
|
|
39
|
+
if (statement.isResourceStatement()) {
|
|
40
|
+
statement.resources().forEach(r => {
|
|
41
|
+
variables.push(...getVariablesFromString(r.value()));
|
|
42
|
+
});
|
|
43
|
+
for (const condition of statement.conditions()) {
|
|
44
|
+
variables.push(condition.conditionKey());
|
|
45
|
+
condition.conditionValues().forEach(v => {
|
|
46
|
+
variables.push(...getVariablesFromString(v));
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return variables;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=findContextKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findContextKeys.js","sourceRoot":"","sources":["../../../src/context_keys/findContextKeys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEjG;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAkB;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAI,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC7B,wBAAwB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAI,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAG,KAAK,EAAE,CAAC;YACT,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;YACzD,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QAChC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;KACrC,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,KAAI,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QAC3C,IAAG,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;YACnC,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAChC,SAAS,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YACtD,CAAC,CAAC,CAAA;YACF,KAAI,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC9C,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;gBACzC,SAAS,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACtC,SAAS,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { Policy } from "@cloud-copilot/iam-policy";
|
|
2
2
|
import { EvaluationResult } from "../evaluate.js";
|
|
3
3
|
import { AwsRequest } from "../request/request.js";
|
|
4
|
+
import { SCPAnalysis } from "../SCPAnalysis.js";
|
|
4
5
|
import { ServiceAuthorizer } from "../services/ServiceAuthorizer.js";
|
|
5
6
|
import { StatementAnalysis } from "../StatementAnalysis.js";
|
|
7
|
+
/**
|
|
8
|
+
* A set of service control policies for each level of an organization tree
|
|
9
|
+
*/
|
|
10
|
+
export interface ServiceControlPolicies {
|
|
11
|
+
/**
|
|
12
|
+
* The organization identifier for the organizational unit these policies apply to.
|
|
13
|
+
*/
|
|
14
|
+
orgIdentifier: string;
|
|
15
|
+
/**
|
|
16
|
+
* The policies that apply to this organizational unit.
|
|
17
|
+
*/
|
|
18
|
+
policies: Policy[];
|
|
19
|
+
}
|
|
6
20
|
/**
|
|
7
21
|
* A reqest to authorize a service action.
|
|
8
22
|
*/
|
|
@@ -15,6 +29,15 @@ export interface AuthorizationRequest {
|
|
|
15
29
|
* The identity policies that are applicable to the principal making the request.
|
|
16
30
|
*/
|
|
17
31
|
identityPolicies: Policy[];
|
|
32
|
+
/**
|
|
33
|
+
* The service control policies that apply to the principal making the request. In
|
|
34
|
+
* order of the orgnaization hierarchy. So the root ou SCPS should be first.
|
|
35
|
+
*/
|
|
36
|
+
serviceControlPolicies: ServiceControlPolicies[];
|
|
37
|
+
/**
|
|
38
|
+
* The resource policy that applies to the resource being accessed.
|
|
39
|
+
*/
|
|
40
|
+
resourcePolicy: Policy | undefined;
|
|
18
41
|
}
|
|
19
42
|
/**
|
|
20
43
|
* Authorizes a request.
|
|
@@ -41,4 +64,20 @@ export declare function getServiceAuthorizer(request: AuthorizationRequest): Ser
|
|
|
41
64
|
* @returns an array of statement analysis results
|
|
42
65
|
*/
|
|
43
66
|
export declare function analyzeIdentityPolicies(identityPolicies: Policy[], request: AwsRequest): StatementAnalysis[];
|
|
67
|
+
/**
|
|
68
|
+
* Analyzes a set of service control policies and the statements within them.
|
|
69
|
+
*
|
|
70
|
+
* @param serviceControlPolicies the service control policies to analyze
|
|
71
|
+
* @param request the request to analyze against
|
|
72
|
+
* @returns an array of SCP analysis results
|
|
73
|
+
*/
|
|
74
|
+
export declare function analyzeServiceControlPolicies(serviceControlPolicies: ServiceControlPolicies[], request: AwsRequest): SCPAnalysis[];
|
|
75
|
+
/**
|
|
76
|
+
* Analyze a resource policy and return the results
|
|
77
|
+
*
|
|
78
|
+
* @param resourcePolicy the resource policy to analyze
|
|
79
|
+
* @param request the request to analyze against
|
|
80
|
+
* @returns an array of statement analysis results
|
|
81
|
+
*/
|
|
82
|
+
export declare function analyzeResourcePolicy(resourcePolicy: Policy, request: AwsRequest): StatementAnalysis[];
|
|
44
83
|
//# sourceMappingURL=coreSimulatorEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coreSimulatorEngine.d.ts","sourceRoot":"","sources":["../../../src/core_engine/coreSimulatorEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"coreSimulatorEngine.d.ts","sourceRoot":"","sources":["../../../src/core_engine/coreSimulatorEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,OAAO,EAAE,UAAU,CAAC;IAEpB;;OAEG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAE1B;;;OAGG;IACH,sBAAsB,EAAE,sBAAsB,EAAE,CAAA;IAEhD;;OAEG;IACH,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAID;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,oBAAoB,GAAG,gBAAgB,CAYzE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,iBAAiB,CAMrF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,iBAAiB,EAAE,CAe5G;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,WAAW,EAAE,CAsBlI;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,iBAAiB,EAAE,CAatG"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { requestMatchesStatementActions } from "../action/action.js";
|
|
2
2
|
import { requestMatchesConditions } from "../condition/condition.js";
|
|
3
|
+
import { requestMatchesStatementPrincipals } from "../principal/principal.js";
|
|
3
4
|
import { requestMatchesStatementResources } from "../resource/resource.js";
|
|
4
5
|
import { DefaultServiceAuthorizer } from "../services/DefaultServiceAuthorizer.js";
|
|
5
6
|
const serviceEngines = {};
|
|
@@ -13,10 +14,14 @@ const serviceEngines = {};
|
|
|
13
14
|
*/
|
|
14
15
|
export function authorize(request) {
|
|
15
16
|
const identityAnalysis = analyzeIdentityPolicies(request.identityPolicies, request.request);
|
|
17
|
+
const scpAnalysis = analyzeServiceControlPolicies(request.serviceControlPolicies, request.request);
|
|
16
18
|
const serviceAuthorizer = getServiceAuthorizer(request);
|
|
19
|
+
const resourceAnalysis = request.resourcePolicy ? analyzeResourcePolicy(request.resourcePolicy, request.request) : [];
|
|
17
20
|
return serviceAuthorizer.authorize({
|
|
18
21
|
request: request.request,
|
|
19
22
|
identityStatements: identityAnalysis,
|
|
23
|
+
scpAnalysis,
|
|
24
|
+
resourceAnalysis
|
|
20
25
|
});
|
|
21
26
|
}
|
|
22
27
|
/**
|
|
@@ -55,4 +60,53 @@ export function analyzeIdentityPolicies(identityPolicies, request) {
|
|
|
55
60
|
}
|
|
56
61
|
return analysis;
|
|
57
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Analyzes a set of service control policies and the statements within them.
|
|
65
|
+
*
|
|
66
|
+
* @param serviceControlPolicies the service control policies to analyze
|
|
67
|
+
* @param request the request to analyze against
|
|
68
|
+
* @returns an array of SCP analysis results
|
|
69
|
+
*/
|
|
70
|
+
export function analyzeServiceControlPolicies(serviceControlPolicies, request) {
|
|
71
|
+
const analysis = [];
|
|
72
|
+
for (const controlPolicy of serviceControlPolicies) {
|
|
73
|
+
const ouAnalysis = {
|
|
74
|
+
orgIdentifier: controlPolicy.orgIdentifier,
|
|
75
|
+
statementAnalysis: [],
|
|
76
|
+
};
|
|
77
|
+
for (const policy of controlPolicy.policies) {
|
|
78
|
+
for (const statement of policy.statements()) {
|
|
79
|
+
ouAnalysis.statementAnalysis.push({
|
|
80
|
+
statement,
|
|
81
|
+
resourceMatch: requestMatchesStatementResources(request, statement),
|
|
82
|
+
actionMatch: requestMatchesStatementActions(request, statement),
|
|
83
|
+
conditionMatch: requestMatchesConditions(request, statement.conditions()),
|
|
84
|
+
principalMatch: 'Match',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
analysis.push(ouAnalysis);
|
|
89
|
+
}
|
|
90
|
+
return analysis;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Analyze a resource policy and return the results
|
|
94
|
+
*
|
|
95
|
+
* @param resourcePolicy the resource policy to analyze
|
|
96
|
+
* @param request the request to analyze against
|
|
97
|
+
* @returns an array of statement analysis results
|
|
98
|
+
*/
|
|
99
|
+
export function analyzeResourcePolicy(resourcePolicy, request) {
|
|
100
|
+
const analysis = [];
|
|
101
|
+
for (const statement of resourcePolicy.statements()) {
|
|
102
|
+
analysis.push({
|
|
103
|
+
statement,
|
|
104
|
+
resourceMatch: requestMatchesStatementResources(request, statement),
|
|
105
|
+
actionMatch: requestMatchesStatementActions(request, statement),
|
|
106
|
+
conditionMatch: requestMatchesConditions(request, statement.conditions()),
|
|
107
|
+
principalMatch: requestMatchesStatementPrincipals(request, statement),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return analysis;
|
|
111
|
+
}
|
|
58
112
|
//# sourceMappingURL=coreSimulatorEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coreSimulatorEngine.js","sourceRoot":"","sources":["../../../src/core_engine/coreSimulatorEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"coreSimulatorEngine.js","sourceRoot":"","sources":["../../../src/core_engine/coreSimulatorEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/evaluate.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export type EvaluationResult = 'Allowed' | 'ExplicitlyDenied' | 'AllowedWithConditions' | 'ImplicitlyDenied' | 'Unknown';
|
|
2
|
+
export type ResourceEvaluationResult = 'NotApplicable' | 'Allowed' | 'ExplicitlyDenied' | 'AllowedForAccount' | 'DeniedForAccount' | 'ImplicityDenied';
|
|
2
3
|
//# sourceMappingURL=evaluate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/evaluate.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,kBAAkB,GAAG,uBAAuB,GAAG,kBAAkB,GAAG,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/evaluate.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,kBAAkB,GAAG,uBAAuB,GAAG,kBAAkB,GAAG,SAAS,CAAC;AACzH,MAAM,MAAM,wBAAwB,GAAG,eAAe,GAAG,SAAS,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ConditionKeyType } from "../ConditionKeys.js";
|
|
2
|
+
interface GlobalConditionKey {
|
|
3
|
+
key: string;
|
|
4
|
+
category: string;
|
|
5
|
+
dataType: ConditionKeyType;
|
|
6
|
+
}
|
|
7
|
+
export declare function getGlobalConditionKey(key: string): GlobalConditionKey | undefined;
|
|
8
|
+
export declare function globalConditionKeyExists(key: string): boolean;
|
|
9
|
+
export declare function getGlobalConditionKeysByCategory(category: string): GlobalConditionKey[];
|
|
10
|
+
/**
|
|
11
|
+
* Get all the global condition keys as lower case strings
|
|
12
|
+
*
|
|
13
|
+
* @returns a list of all the global condition keys
|
|
14
|
+
*/
|
|
15
|
+
export declare function allGlobalConditionKeys(): string[];
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=globalConditionKeys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalConditionKeys.d.ts","sourceRoot":"","sources":["../../../src/global_conditions/globalConditionKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAyRD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEjF;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAEvF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
const globalConditionKeys = [
|
|
2
|
+
{
|
|
3
|
+
key: "aws:PrincipalArn",
|
|
4
|
+
category: "principal",
|
|
5
|
+
dataType: "ARN"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
key: "aws:PrincipalAccount",
|
|
9
|
+
category: "principal",
|
|
10
|
+
dataType: "String"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
key: "aws:PrincipalOrgPaths",
|
|
14
|
+
category: "principal",
|
|
15
|
+
dataType: "ArrayOfString"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
key: "aws:PrincipalOrgID",
|
|
19
|
+
category: "principal",
|
|
20
|
+
dataType: "String"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
key: "aws:PrincipalTag/tag-key",
|
|
24
|
+
category: "principal",
|
|
25
|
+
dataType: "String"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
key: "aws:PrincipalIsAWSService",
|
|
29
|
+
category: "principal",
|
|
30
|
+
dataType: "Bool"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
key: "aws:PrincipalServiceName",
|
|
34
|
+
category: "principal",
|
|
35
|
+
dataType: "String"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
key: "aws:PrincipalServiceNamesList",
|
|
39
|
+
category: "principal",
|
|
40
|
+
dataType: "ArrayOfString"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
key: "aws:PrincipalType",
|
|
44
|
+
category: "principal",
|
|
45
|
+
dataType: "String"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
key: "aws:userid",
|
|
49
|
+
category: "principal",
|
|
50
|
+
dataType: "String"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
key: "aws:username",
|
|
54
|
+
category: "principal",
|
|
55
|
+
dataType: "String"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
key: "aws:AssumedRoot",
|
|
59
|
+
category: "session",
|
|
60
|
+
dataType: "String",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
key: "aws:FederatedProvider",
|
|
64
|
+
category: "session",
|
|
65
|
+
dataType: "String",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
key: "aws:TokenIssueTime",
|
|
69
|
+
category: "session",
|
|
70
|
+
dataType: "Date",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
key: "aws:MultiFactorAuthAge",
|
|
74
|
+
category: "session",
|
|
75
|
+
dataType: "Numeric",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
key: "aws:MultiFactorAuthPresent",
|
|
79
|
+
category: "session",
|
|
80
|
+
dataType: "Bool",
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
key: "aws:ChatbotSourceArn",
|
|
84
|
+
category: "session",
|
|
85
|
+
dataType: "ARN",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
key: "aws:Ec2InstanceSourceVpc",
|
|
89
|
+
category: "session",
|
|
90
|
+
dataType: "String",
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
key: "aws:Ec2InstanceSourcePrivateIPv4",
|
|
94
|
+
category: "session",
|
|
95
|
+
dataType: "IPAddress",
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
key: "aws:SourceIdentity",
|
|
99
|
+
category: "session",
|
|
100
|
+
dataType: "String",
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
key: "ec2:RoleDelivery",
|
|
104
|
+
category: "session",
|
|
105
|
+
dataType: "Numeric",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
key: "ec2:SourceInstanceArn",
|
|
109
|
+
category: "session",
|
|
110
|
+
dataType: "ARN",
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
key: "glue:RoleAssumedBy",
|
|
114
|
+
category: "session",
|
|
115
|
+
dataType: "String",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
key: "glue:CredentialIssuingService",
|
|
119
|
+
category: "session",
|
|
120
|
+
dataType: "String",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
key: "lambda:SourceFunctionArn",
|
|
124
|
+
category: "session",
|
|
125
|
+
dataType: "ARN",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
key: "ssm:SourceInstanceArn",
|
|
129
|
+
category: "session",
|
|
130
|
+
dataType: "ARN",
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
key: "identitystore:UserId",
|
|
134
|
+
category: "session",
|
|
135
|
+
dataType: "String",
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
key: "aws:SourceIp",
|
|
139
|
+
category: "network",
|
|
140
|
+
dataType: "IPAddress",
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
key: "aws:SourceVpc",
|
|
144
|
+
category: "network",
|
|
145
|
+
dataType: "String",
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
key: "aws:SourceVpce",
|
|
149
|
+
category: "network",
|
|
150
|
+
dataType: "String",
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
key: "aws:VpcSourceIp ",
|
|
154
|
+
category: "network",
|
|
155
|
+
dataType: "IPAddress",
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
key: "aws:ResourceAccount",
|
|
159
|
+
category: "resource",
|
|
160
|
+
dataType: "String",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
key: "aws:ResourceOrgID",
|
|
164
|
+
category: "resource",
|
|
165
|
+
dataType: "String",
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
key: "aws:ResourceOrgPaths",
|
|
169
|
+
category: "resource",
|
|
170
|
+
dataType: "ArrayOfString",
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
key: "aws:ResourceTag/tag-key",
|
|
174
|
+
category: "resource",
|
|
175
|
+
dataType: "String",
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
key: "aws:CalledVia",
|
|
179
|
+
category: "request",
|
|
180
|
+
dataType: "ArrayOfString",
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
key: "aws:CalledViaFirst",
|
|
184
|
+
category: "request",
|
|
185
|
+
dataType: "String",
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
key: "aws:CalledViaLast",
|
|
189
|
+
category: "request",
|
|
190
|
+
dataType: "String",
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
key: "aws:ViaAWSService",
|
|
194
|
+
category: "request",
|
|
195
|
+
dataType: "Bool",
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
key: "aws:CurrentTime",
|
|
199
|
+
category: "request",
|
|
200
|
+
dataType: "Date",
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
key: "aws:EpochTime",
|
|
204
|
+
category: "request",
|
|
205
|
+
dataType: "Date", //Can Also be Numeric...
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
key: "aws:referer",
|
|
209
|
+
category: "request",
|
|
210
|
+
dataType: "String",
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
key: "aws:RequestedRegion",
|
|
214
|
+
category: "request",
|
|
215
|
+
dataType: "String",
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
key: "aws:RequestTag/tag-key",
|
|
219
|
+
category: "request",
|
|
220
|
+
dataType: "String",
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
key: "aws:TagKeys",
|
|
224
|
+
category: "request",
|
|
225
|
+
dataType: "ArrayOfString",
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
key: "aws:SecureTransport",
|
|
229
|
+
category: "request",
|
|
230
|
+
dataType: "Bool",
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
key: "aws:SourceArn",
|
|
234
|
+
category: "request",
|
|
235
|
+
dataType: "ARN",
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
key: "aws:SourceAccount",
|
|
239
|
+
category: "request",
|
|
240
|
+
dataType: "String",
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
key: "aws:SourceOwner",
|
|
244
|
+
category: "request",
|
|
245
|
+
dataType: "String",
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
key: "aws:SourceOrgPaths",
|
|
249
|
+
category: "request",
|
|
250
|
+
dataType: "ArrayOfString",
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
key: "aws:SourceOrgID",
|
|
254
|
+
category: "request",
|
|
255
|
+
dataType: "String",
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
key: "aws:UserAgent",
|
|
259
|
+
category: "request",
|
|
260
|
+
dataType: "String",
|
|
261
|
+
}
|
|
262
|
+
];
|
|
263
|
+
const keysByName = globalConditionKeys.reduce((acc, key) => {
|
|
264
|
+
acc[key.key.toLowerCase()] = key;
|
|
265
|
+
return acc;
|
|
266
|
+
}, {});
|
|
267
|
+
const keysByCategory = globalConditionKeys.reduce((acc, key) => {
|
|
268
|
+
const lowerCategory = key.category.toLowerCase();
|
|
269
|
+
acc[lowerCategory] = acc[lowerCategory] || [];
|
|
270
|
+
acc[lowerCategory].push(key);
|
|
271
|
+
return acc;
|
|
272
|
+
}, {});
|
|
273
|
+
export function getGlobalConditionKey(key) {
|
|
274
|
+
return keysByName[key.toLowerCase()];
|
|
275
|
+
}
|
|
276
|
+
export function globalConditionKeyExists(key) {
|
|
277
|
+
return !!getGlobalConditionKey(key);
|
|
278
|
+
}
|
|
279
|
+
export function getGlobalConditionKeysByCategory(category) {
|
|
280
|
+
return keysByCategory[category.toLowerCase()] || [];
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get all the global condition keys as lower case strings
|
|
284
|
+
*
|
|
285
|
+
* @returns a list of all the global condition keys
|
|
286
|
+
*/
|
|
287
|
+
export function allGlobalConditionKeys() {
|
|
288
|
+
return Object.keys(keysByCategory);
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=globalConditionKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalConditionKeys.js","sourceRoot":"","sources":["../../../src/global_conditions/globalConditionKeys.ts"],"names":[],"mappings":"AAQA,MAAM,mBAAmB,GAAyB;IAChD;QACE,GAAG,EAAE,kBAAkB;QACvB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,GAAG,EAAE,sBAAsB;QAC3B,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,uBAAuB;QAC5B,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,eAAe;KAC1B;IACD;QACE,GAAG,EAAE,oBAAoB;QACzB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,0BAA0B;QAC/B,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,2BAA2B;QAChC,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,GAAG,EAAE,0BAA0B;QAC/B,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,+BAA+B;QACpC,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,eAAe;KAC1B;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,YAAY;QACjB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,cAAc;QACnB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,QAAQ;KACnB;IAED;QACE,GAAG,EAAE,iBAAiB;QACtB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,uBAAuB;QAC5B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,oBAAoB;QACzB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,GAAG,EAAE,wBAAwB;QAC7B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,SAAS;KACpB;IACD;QACE,GAAG,EAAE,4BAA4B;QACjC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,GAAG,EAAE,sBAAsB;QAC3B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,GAAG,EAAE,0BAA0B;QAC/B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,kCAAkC;QACvC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,GAAG,EAAE,oBAAoB;QACzB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,kBAAkB;QACvB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,SAAS;KACpB;IACD;QACE,GAAG,EAAE,uBAAuB;QAC5B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,GAAG,EAAE,oBAAoB;QACzB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,+BAA+B;QACpC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,0BAA0B;QAC/B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,GAAG,EAAE,uBAAuB;QAC5B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,GAAG,EAAE,sBAAsB;QAC3B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IAED;QACE,GAAG,EAAE,cAAc;QACnB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,GAAG,EAAE,eAAe;QACpB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,gBAAgB;QACrB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,WAAW;KACtB;IAED;QACE,GAAG,EAAE,qBAAqB;QAC1B,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,sBAAsB;QAC3B,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,eAAe;KAC1B;IACD;QACE,GAAG,EAAE,yBAAyB;QAC9B,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,QAAQ;KACnB;IAED;QACE,GAAG,EAAE,eAAe;QACpB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,eAAe;KAC1B;IACD;QACE,GAAG,EAAE,oBAAoB;QACzB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,GAAG,EAAE,iBAAiB;QACtB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,GAAG,EAAE,eAAe;QACpB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,MAAM,EAAE,wBAAwB;KAC3C;IACD;QACE,GAAG,EAAE,aAAa;QAClB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,qBAAqB;QAC1B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,wBAAwB;QAC7B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,aAAa;QAClB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,eAAe;KAC1B;IACD;QACE,GAAG,EAAE,qBAAqB;QAC1B,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,GAAG,EAAE,eAAe;QACpB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,KAAK;KAChB;IACD;QACE,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,iBAAiB;QACtB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,oBAAoB;QACzB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,eAAe;KAC1B;IACD;QACE,GAAG,EAAE,iBAAiB;QACtB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,GAAG,EAAE,eAAe;QACpB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ;KACnB;CACF,CAAA;AAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACzD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC;IACjC,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAwC,CAAC,CAAC;AAE7C,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC7D,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACjD,GAAG,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAC9C,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAA0C,CAAC,CAAC;AAE/C,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,OAAO,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,OAAO,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,QAAgB;IAC/D,OAAO,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrC,CAAC"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
export { findContextKeys } from './context_keys/findContextKeys.js';
|
|
1
2
|
export { type EvaluationResult } from './evaluate.js';
|
|
3
|
+
export { allowedContextKeysForRequest } from './simulation_engine/contextKeys.js';
|
|
2
4
|
export { type Simulation } from './simulation_engine/simulation.js';
|
|
3
5
|
export { runSimulation } from './simulation_engine/simulationEngine.js';
|
|
4
6
|
export { type SimulationOptions } from './simulation_engine/simulationOptions.js';
|
|
5
7
|
export { runUnsafeSimulation } from './simulation_engine/unsafeSimulationEngine.js';
|
|
8
|
+
export { isWildcardOnlyAction } from './util.js';
|
|
6
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export { findContextKeys } from './context_keys/findContextKeys.js';
|
|
2
|
+
export { allowedContextKeysForRequest } from './simulation_engine/contextKeys.js';
|
|
1
3
|
export { runSimulation } from './simulation_engine/simulationEngine.js';
|
|
2
4
|
export { runUnsafeSimulation } from './simulation_engine/unsafeSimulationEngine.js';
|
|
5
|
+
export { isWildcardOnlyAction } from './util.js';
|
|
3
6
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Principal } from "@cloud-copilot/iam-policy";
|
|
1
|
+
import { Principal, Statement } from "@cloud-copilot/iam-policy";
|
|
2
2
|
import { AwsRequest } from "../request/request.js";
|
|
3
3
|
export type PrincipalMatchResult = 'Match' | 'NoMatch' | 'AccountLevelMatch';
|
|
4
4
|
/**
|
|
@@ -27,4 +27,12 @@ export declare function requestMatchesNotPrincipal(request: AwsRequest, notPrinc
|
|
|
27
27
|
export declare function requestMatchesPrincipalStatement(request: AwsRequest, principalStatement: Principal): PrincipalMatchResult;
|
|
28
28
|
export declare function isAssumedRoleArn(principal: string): boolean;
|
|
29
29
|
export declare function roleArnFromAssumedRoleArn(assumedRoleArn: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Check if a request matches the Resource or NotResource elements of a statement.
|
|
32
|
+
*
|
|
33
|
+
* @param request the request to check
|
|
34
|
+
* @param statement the statement to check against
|
|
35
|
+
* @returns true if the request matches the resources in the statement, false otherwise
|
|
36
|
+
*/
|
|
37
|
+
export declare function requestMatchesStatementPrincipals(request: AwsRequest, statement: Statement): PrincipalMatchResult;
|
|
30
38
|
//# sourceMappingURL=principal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"principal.d.ts","sourceRoot":"","sources":["../../../src/principal/principal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"principal.d.ts","sourceRoot":"","sources":["../../../src/principal/principal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AA4CnD,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,SAAS,GAAG,mBAAmB,CAAA;AAE5E;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAWzG;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAiB/G;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,GAAG,oBAAoB,CAgDzH;AAID,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,oBAAoB,CAOjH"}
|
|
@@ -97,4 +97,20 @@ export function roleArnFromAssumedRoleArn(assumedRoleArn) {
|
|
|
97
97
|
const rolePathAndName = resourceParts.slice(1, -1).join('/');
|
|
98
98
|
return `arn:aws:iam::${stsParts[4]}:role/${rolePathAndName}`;
|
|
99
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if a request matches the Resource or NotResource elements of a statement.
|
|
102
|
+
*
|
|
103
|
+
* @param request the request to check
|
|
104
|
+
* @param statement the statement to check against
|
|
105
|
+
* @returns true if the request matches the resources in the statement, false otherwise
|
|
106
|
+
*/
|
|
107
|
+
export function requestMatchesStatementPrincipals(request, statement) {
|
|
108
|
+
if (statement.isPrincipalStatement()) {
|
|
109
|
+
return requestMatchesPrincipal(request, statement.principals());
|
|
110
|
+
}
|
|
111
|
+
else if (statement.isNotPrincipalStatement()) {
|
|
112
|
+
return requestMatchesNotPrincipal(request, statement.notPrincipals());
|
|
113
|
+
}
|
|
114
|
+
throw new Error('Statement should have Principal or NotPrincipal');
|
|
115
|
+
}
|
|
100
116
|
//# sourceMappingURL=principal.js.map
|