@cloud-copilot/iam-simulate 0.1.12 → 0.1.14
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/StatementAnalysis.d.ts +14 -0
- package/dist/cjs/StatementAnalysis.d.ts.map +1 -1
- package/dist/cjs/StatementAnalysis.js +51 -0
- package/dist/cjs/StatementAnalysis.js.map +1 -1
- package/dist/cjs/action/action.d.ts +13 -3
- package/dist/cjs/action/action.d.ts.map +1 -1
- package/dist/cjs/action/action.js +43 -21
- package/dist/cjs/action/action.js.map +1 -1
- package/dist/cjs/condition/BaseConditionOperator.d.ts +6 -1
- package/dist/cjs/condition/BaseConditionOperator.d.ts.map +1 -1
- package/dist/cjs/condition/arn/ArnEquals.d.ts.map +1 -1
- package/dist/cjs/condition/arn/ArnEquals.js +2 -1
- package/dist/cjs/condition/arn/ArnEquals.js.map +1 -1
- package/dist/cjs/condition/arn/ArnLike.d.ts.map +1 -1
- package/dist/cjs/condition/arn/ArnLike.js +8 -40
- package/dist/cjs/condition/arn/ArnLike.js.map +1 -1
- package/dist/cjs/condition/arn/ArnNotEquals.d.ts.map +1 -1
- package/dist/cjs/condition/arn/ArnNotEquals.js +2 -1
- package/dist/cjs/condition/arn/ArnNotEquals.js.map +1 -1
- package/dist/cjs/condition/arn/ArnNotLike.d.ts.map +1 -1
- package/dist/cjs/condition/arn/ArnNotLike.js +8 -3
- package/dist/cjs/condition/arn/ArnNotLike.js.map +1 -1
- package/dist/cjs/condition/arn/arn.d.ts +12 -0
- package/dist/cjs/condition/arn/arn.d.ts.map +1 -0
- package/dist/cjs/condition/arn/arn.js +68 -0
- package/dist/cjs/condition/arn/arn.js.map +1 -0
- package/dist/cjs/condition/baseConditionperatorTests.d.ts +7 -1
- package/dist/cjs/condition/baseConditionperatorTests.d.ts.map +1 -1
- package/dist/cjs/condition/baseConditionperatorTests.js +17 -1
- package/dist/cjs/condition/baseConditionperatorTests.js.map +1 -1
- package/dist/cjs/condition/binary/BinaryEquals.d.ts.map +1 -1
- package/dist/cjs/condition/binary/BinaryEquals.js +14 -2
- package/dist/cjs/condition/binary/BinaryEquals.js.map +1 -1
- package/dist/cjs/condition/boolean/Bool.d.ts.map +1 -1
- package/dist/cjs/condition/boolean/Bool.js +36 -7
- package/dist/cjs/condition/boolean/Bool.js.map +1 -1
- package/dist/cjs/condition/condition.d.ts +46 -3
- package/dist/cjs/condition/condition.d.ts.map +1 -1
- package/dist/cjs/condition/condition.js +242 -48
- package/dist/cjs/condition/condition.js.map +1 -1
- package/dist/cjs/condition/conditionUtil.d.ts +10 -0
- package/dist/cjs/condition/conditionUtil.d.ts.map +1 -0
- package/dist/cjs/condition/conditionUtil.js +16 -0
- package/dist/cjs/condition/conditionUtil.js.map +1 -0
- package/dist/cjs/condition/date/DateEquals.d.ts.map +1 -1
- package/dist/cjs/condition/date/DateEquals.js +7 -2
- package/dist/cjs/condition/date/DateEquals.js.map +1 -1
- package/dist/cjs/condition/date/DateGreaterThan.d.ts.map +1 -1
- package/dist/cjs/condition/date/DateGreaterThan.js +7 -2
- package/dist/cjs/condition/date/DateGreaterThan.js.map +1 -1
- package/dist/cjs/condition/date/DateGreaterThanEquals.d.ts.map +1 -1
- package/dist/cjs/condition/date/DateGreaterThanEquals.js +7 -2
- package/dist/cjs/condition/date/DateGreaterThanEquals.js.map +1 -1
- package/dist/cjs/condition/date/DateLessThan.d.ts.map +1 -1
- package/dist/cjs/condition/date/DateLessThan.js +7 -2
- package/dist/cjs/condition/date/DateLessThan.js.map +1 -1
- package/dist/cjs/condition/date/DateLessThanEquals.d.ts.map +1 -1
- package/dist/cjs/condition/date/DateLessThanEquals.js +7 -2
- package/dist/cjs/condition/date/DateLessThanEquals.js.map +1 -1
- package/dist/cjs/condition/date/DateNotEquals.d.ts.map +1 -1
- package/dist/cjs/condition/date/DateNotEquals.js +11 -18
- package/dist/cjs/condition/date/DateNotEquals.js.map +1 -1
- package/dist/cjs/condition/date/date.d.ts +2 -1
- package/dist/cjs/condition/date/date.d.ts.map +1 -1
- package/dist/cjs/condition/date/date.js +20 -5
- package/dist/cjs/condition/date/date.js.map +1 -1
- package/dist/cjs/condition/ipaddress/IpAddress.d.ts.map +1 -1
- package/dist/cjs/condition/ipaddress/IpAddress.js +9 -16
- package/dist/cjs/condition/ipaddress/IpAddress.js.map +1 -1
- package/dist/cjs/condition/ipaddress/NotIpAddress.d.ts.map +1 -1
- package/dist/cjs/condition/ipaddress/NotIpAddress.js +9 -20
- package/dist/cjs/condition/ipaddress/NotIpAddress.js.map +1 -1
- package/dist/cjs/condition/ipaddress/ip.d.ts +10 -0
- package/dist/cjs/condition/ipaddress/ip.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/ip.js +57 -0
- package/dist/cjs/condition/ipaddress/ip.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericEquals.d.ts.map +1 -1
- package/dist/cjs/condition/numeric/NumericEquals.js +7 -2
- package/dist/cjs/condition/numeric/NumericEquals.js.map +1 -1
- package/dist/cjs/condition/numeric/NumericGreaterThan.d.ts.map +1 -1
- package/dist/cjs/condition/numeric/NumericGreaterThan.js +7 -2
- package/dist/cjs/condition/numeric/NumericGreaterThan.js.map +1 -1
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.d.ts.map +1 -1
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.js +7 -2
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.js.map +1 -1
- package/dist/cjs/condition/numeric/NumericLessThan.d.ts.map +1 -1
- package/dist/cjs/condition/numeric/NumericLessThan.js +7 -2
- package/dist/cjs/condition/numeric/NumericLessThan.js.map +1 -1
- package/dist/cjs/condition/numeric/NumericLessThanEquals.d.ts.map +1 -1
- package/dist/cjs/condition/numeric/NumericLessThanEquals.js +7 -2
- package/dist/cjs/condition/numeric/NumericLessThanEquals.js.map +1 -1
- package/dist/cjs/condition/numeric/NumericNotEquals.d.ts.map +1 -1
- package/dist/cjs/condition/numeric/NumericNotEquals.js +11 -18
- package/dist/cjs/condition/numeric/NumericNotEquals.js.map +1 -1
- package/dist/cjs/condition/numeric/numeric.d.ts +2 -1
- package/dist/cjs/condition/numeric/numeric.d.ts.map +1 -1
- package/dist/cjs/condition/numeric/numeric.js +18 -3
- package/dist/cjs/condition/numeric/numeric.js.map +1 -1
- package/dist/cjs/condition/string/StringEquals.d.ts.map +1 -1
- package/dist/cjs/condition/string/StringEquals.js +24 -3
- package/dist/cjs/condition/string/StringEquals.js.map +1 -1
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.d.ts.map +1 -1
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.js +23 -5
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.js.map +1 -1
- package/dist/cjs/condition/string/StringLike.d.ts.map +1 -1
- package/dist/cjs/condition/string/StringLike.js +24 -3
- package/dist/cjs/condition/string/StringLike.js.map +1 -1
- package/dist/cjs/condition/string/StringNotEquals.d.ts.map +1 -1
- package/dist/cjs/condition/string/StringNotEquals.js +24 -3
- package/dist/cjs/condition/string/StringNotEquals.js.map +1 -1
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.d.ts.map +1 -1
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.js +25 -3
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.js.map +1 -1
- package/dist/cjs/condition/string/StringNotLike.d.ts.map +1 -1
- package/dist/cjs/condition/string/StringNotLike.js +25 -3
- package/dist/cjs/condition/string/StringNotLike.js.map +1 -1
- package/dist/cjs/core_engine/coreSimulatorEngine.d.ts +10 -7
- package/dist/cjs/core_engine/coreSimulatorEngine.d.ts.map +1 -1
- package/dist/cjs/core_engine/coreSimulatorEngine.js +148 -28
- package/dist/cjs/core_engine/coreSimulatorEngine.js.map +1 -1
- package/dist/cjs/evaluate.d.ts +47 -0
- package/dist/cjs/evaluate.d.ts.map +1 -1
- package/dist/cjs/explain/displayExplainCli.d.ts +3 -0
- package/dist/cjs/explain/displayExplainCli.d.ts.map +1 -0
- package/dist/cjs/explain/displayExplainCli.js +249 -0
- package/dist/cjs/explain/displayExplainCli.js.map +1 -0
- package/dist/cjs/explain/statementExplain.d.ts +51 -0
- package/dist/cjs/explain/statementExplain.d.ts.map +1 -0
- package/dist/cjs/explain/statementExplain.js +7 -0
- package/dist/cjs/explain/statementExplain.js.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/principal/principal.d.ts +28 -6
- package/dist/cjs/principal/principal.d.ts.map +1 -1
- package/dist/cjs/principal/principal.js +146 -40
- package/dist/cjs/principal/principal.js.map +1 -1
- package/dist/cjs/resource/resource.d.ts +13 -3
- package/dist/cjs/resource/resource.d.ts.map +1 -1
- package/dist/cjs/resource/resource.js +68 -15
- package/dist/cjs/resource/resource.js.map +1 -1
- package/dist/cjs/services/DefaultServiceAuthorizer.d.ts +2 -34
- package/dist/cjs/services/DefaultServiceAuthorizer.d.ts.map +1 -1
- package/dist/cjs/services/DefaultServiceAuthorizer.js +95 -131
- package/dist/cjs/services/DefaultServiceAuthorizer.js.map +1 -1
- package/dist/cjs/services/ServiceAuthorizer.d.ts +6 -7
- package/dist/cjs/services/ServiceAuthorizer.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/simulation.d.ts +4 -0
- package/dist/cjs/simulation_engine/simulation.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/simulationEngine.d.ts +2 -4
- package/dist/cjs/simulation_engine/simulationEngine.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/simulationEngine.js +16 -4
- package/dist/cjs/simulation_engine/simulationEngine.js.map +1 -1
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.js +5 -2
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.js.map +1 -1
- package/dist/cjs/util.d.ts +31 -3
- package/dist/cjs/util.d.ts.map +1 -1
- package/dist/cjs/util.js +74 -32
- package/dist/cjs/util.js.map +1 -1
- package/dist/esm/StatementAnalysis.d.ts +14 -0
- package/dist/esm/StatementAnalysis.d.ts.map +1 -1
- package/dist/esm/StatementAnalysis.js +48 -1
- package/dist/esm/StatementAnalysis.js.map +1 -1
- package/dist/esm/action/action.d.ts +13 -3
- package/dist/esm/action/action.d.ts.map +1 -1
- package/dist/esm/action/action.js +43 -21
- package/dist/esm/action/action.js.map +1 -1
- package/dist/esm/condition/BaseConditionOperator.d.ts +6 -1
- package/dist/esm/condition/BaseConditionOperator.d.ts.map +1 -1
- package/dist/esm/condition/arn/ArnEquals.d.ts.map +1 -1
- package/dist/esm/condition/arn/ArnEquals.js +2 -1
- package/dist/esm/condition/arn/ArnEquals.js.map +1 -1
- package/dist/esm/condition/arn/ArnLike.d.ts.map +1 -1
- package/dist/esm/condition/arn/ArnLike.js +8 -40
- package/dist/esm/condition/arn/ArnLike.js.map +1 -1
- package/dist/esm/condition/arn/ArnNotEquals.d.ts.map +1 -1
- package/dist/esm/condition/arn/ArnNotEquals.js +2 -1
- package/dist/esm/condition/arn/ArnNotEquals.js.map +1 -1
- package/dist/esm/condition/arn/ArnNotLike.d.ts.map +1 -1
- package/dist/esm/condition/arn/ArnNotLike.js +8 -3
- package/dist/esm/condition/arn/ArnNotLike.js.map +1 -1
- package/dist/esm/condition/arn/arn.d.ts +12 -0
- package/dist/esm/condition/arn/arn.d.ts.map +1 -0
- package/dist/esm/condition/arn/arn.js +65 -0
- package/dist/esm/condition/arn/arn.js.map +1 -0
- package/dist/esm/condition/baseConditionperatorTests.d.ts +7 -1
- package/dist/esm/condition/baseConditionperatorTests.d.ts.map +1 -1
- package/dist/esm/condition/baseConditionperatorTests.js +17 -1
- package/dist/esm/condition/baseConditionperatorTests.js.map +1 -1
- package/dist/esm/condition/binary/BinaryEquals.d.ts.map +1 -1
- package/dist/esm/condition/binary/BinaryEquals.js +14 -2
- package/dist/esm/condition/binary/BinaryEquals.js.map +1 -1
- package/dist/esm/condition/boolean/Bool.d.ts.map +1 -1
- package/dist/esm/condition/boolean/Bool.js +37 -8
- package/dist/esm/condition/boolean/Bool.js.map +1 -1
- package/dist/esm/condition/condition.d.ts +46 -3
- package/dist/esm/condition/condition.d.ts.map +1 -1
- package/dist/esm/condition/condition.js +239 -48
- package/dist/esm/condition/condition.js.map +1 -1
- package/dist/esm/condition/conditionUtil.d.ts +10 -0
- package/dist/esm/condition/conditionUtil.d.ts.map +1 -0
- package/dist/esm/condition/conditionUtil.js +13 -0
- package/dist/esm/condition/conditionUtil.js.map +1 -0
- package/dist/esm/condition/date/DateEquals.d.ts.map +1 -1
- package/dist/esm/condition/date/DateEquals.js +7 -2
- package/dist/esm/condition/date/DateEquals.js.map +1 -1
- package/dist/esm/condition/date/DateGreaterThan.d.ts.map +1 -1
- package/dist/esm/condition/date/DateGreaterThan.js +7 -2
- package/dist/esm/condition/date/DateGreaterThan.js.map +1 -1
- package/dist/esm/condition/date/DateGreaterThanEquals.d.ts.map +1 -1
- package/dist/esm/condition/date/DateGreaterThanEquals.js +7 -2
- package/dist/esm/condition/date/DateGreaterThanEquals.js.map +1 -1
- package/dist/esm/condition/date/DateLessThan.d.ts.map +1 -1
- package/dist/esm/condition/date/DateLessThan.js +7 -2
- package/dist/esm/condition/date/DateLessThan.js.map +1 -1
- package/dist/esm/condition/date/DateLessThanEquals.d.ts.map +1 -1
- package/dist/esm/condition/date/DateLessThanEquals.js +7 -2
- package/dist/esm/condition/date/DateLessThanEquals.js.map +1 -1
- package/dist/esm/condition/date/DateNotEquals.d.ts.map +1 -1
- package/dist/esm/condition/date/DateNotEquals.js +12 -19
- package/dist/esm/condition/date/DateNotEquals.js.map +1 -1
- package/dist/esm/condition/date/date.d.ts +2 -1
- package/dist/esm/condition/date/date.d.ts.map +1 -1
- package/dist/esm/condition/date/date.js +20 -5
- package/dist/esm/condition/date/date.js.map +1 -1
- package/dist/esm/condition/ipaddress/IpAddress.d.ts.map +1 -1
- package/dist/esm/condition/ipaddress/IpAddress.js +9 -16
- package/dist/esm/condition/ipaddress/IpAddress.js.map +1 -1
- package/dist/esm/condition/ipaddress/NotIpAddress.d.ts.map +1 -1
- package/dist/esm/condition/ipaddress/NotIpAddress.js +9 -20
- package/dist/esm/condition/ipaddress/NotIpAddress.js.map +1 -1
- package/dist/esm/condition/ipaddress/ip.d.ts +10 -0
- package/dist/esm/condition/ipaddress/ip.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/ip.js +54 -0
- package/dist/esm/condition/ipaddress/ip.js.map +1 -0
- package/dist/esm/condition/numeric/NumericEquals.d.ts.map +1 -1
- package/dist/esm/condition/numeric/NumericEquals.js +7 -2
- package/dist/esm/condition/numeric/NumericEquals.js.map +1 -1
- package/dist/esm/condition/numeric/NumericGreaterThan.d.ts.map +1 -1
- package/dist/esm/condition/numeric/NumericGreaterThan.js +7 -2
- package/dist/esm/condition/numeric/NumericGreaterThan.js.map +1 -1
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.d.ts.map +1 -1
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.js +7 -2
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.js.map +1 -1
- package/dist/esm/condition/numeric/NumericLessThan.d.ts.map +1 -1
- package/dist/esm/condition/numeric/NumericLessThan.js +7 -2
- package/dist/esm/condition/numeric/NumericLessThan.js.map +1 -1
- package/dist/esm/condition/numeric/NumericLessThanEquals.d.ts.map +1 -1
- package/dist/esm/condition/numeric/NumericLessThanEquals.js +7 -2
- package/dist/esm/condition/numeric/NumericLessThanEquals.js.map +1 -1
- package/dist/esm/condition/numeric/NumericNotEquals.d.ts.map +1 -1
- package/dist/esm/condition/numeric/NumericNotEquals.js +12 -19
- package/dist/esm/condition/numeric/NumericNotEquals.js.map +1 -1
- package/dist/esm/condition/numeric/numeric.d.ts +2 -1
- package/dist/esm/condition/numeric/numeric.d.ts.map +1 -1
- package/dist/esm/condition/numeric/numeric.js +18 -3
- package/dist/esm/condition/numeric/numeric.js.map +1 -1
- package/dist/esm/condition/string/StringEquals.d.ts.map +1 -1
- package/dist/esm/condition/string/StringEquals.js +25 -4
- package/dist/esm/condition/string/StringEquals.js.map +1 -1
- package/dist/esm/condition/string/StringEqualsIgnoreCase.d.ts.map +1 -1
- package/dist/esm/condition/string/StringEqualsIgnoreCase.js +24 -6
- package/dist/esm/condition/string/StringEqualsIgnoreCase.js.map +1 -1
- package/dist/esm/condition/string/StringLike.d.ts.map +1 -1
- package/dist/esm/condition/string/StringLike.js +25 -4
- package/dist/esm/condition/string/StringLike.js.map +1 -1
- package/dist/esm/condition/string/StringNotEquals.d.ts.map +1 -1
- package/dist/esm/condition/string/StringNotEquals.js +25 -4
- package/dist/esm/condition/string/StringNotEquals.js.map +1 -1
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.d.ts.map +1 -1
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.js +25 -3
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.js.map +1 -1
- package/dist/esm/condition/string/StringNotLike.d.ts.map +1 -1
- package/dist/esm/condition/string/StringNotLike.js +25 -3
- package/dist/esm/condition/string/StringNotLike.js.map +1 -1
- package/dist/esm/core_engine/coreSimulatorEngine.d.ts +10 -7
- package/dist/esm/core_engine/coreSimulatorEngine.d.ts.map +1 -1
- package/dist/esm/core_engine/coreSimulatorEngine.js +147 -28
- package/dist/esm/core_engine/coreSimulatorEngine.js.map +1 -1
- package/dist/esm/evaluate.d.ts +47 -0
- package/dist/esm/evaluate.d.ts.map +1 -1
- package/dist/esm/explain/displayExplainCli.d.ts +3 -0
- package/dist/esm/explain/displayExplainCli.d.ts.map +1 -0
- package/dist/esm/explain/displayExplainCli.js +246 -0
- package/dist/esm/explain/displayExplainCli.js.map +1 -0
- package/dist/esm/explain/statementExplain.d.ts +51 -0
- package/dist/esm/explain/statementExplain.d.ts.map +1 -0
- package/dist/esm/explain/statementExplain.js +6 -0
- package/dist/esm/explain/statementExplain.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/principal/principal.d.ts +28 -6
- package/dist/esm/principal/principal.d.ts.map +1 -1
- package/dist/esm/principal/principal.js +144 -38
- package/dist/esm/principal/principal.js.map +1 -1
- package/dist/esm/resource/resource.d.ts +13 -3
- package/dist/esm/resource/resource.d.ts.map +1 -1
- package/dist/esm/resource/resource.js +69 -16
- package/dist/esm/resource/resource.js.map +1 -1
- package/dist/esm/services/DefaultServiceAuthorizer.d.ts +2 -34
- package/dist/esm/services/DefaultServiceAuthorizer.d.ts.map +1 -1
- package/dist/esm/services/DefaultServiceAuthorizer.js +95 -131
- package/dist/esm/services/DefaultServiceAuthorizer.js.map +1 -1
- package/dist/esm/services/ServiceAuthorizer.d.ts +6 -7
- package/dist/esm/services/ServiceAuthorizer.d.ts.map +1 -1
- package/dist/esm/simulation_engine/simulation.d.ts +4 -0
- package/dist/esm/simulation_engine/simulation.d.ts.map +1 -1
- package/dist/esm/simulation_engine/simulationEngine.d.ts +2 -4
- package/dist/esm/simulation_engine/simulationEngine.d.ts.map +1 -1
- package/dist/esm/simulation_engine/simulationEngine.js +16 -4
- package/dist/esm/simulation_engine/simulationEngine.js.map +1 -1
- package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -1
- package/dist/esm/simulation_engine/unsafeSimulationEngine.js +5 -2
- package/dist/esm/simulation_engine/unsafeSimulationEngine.js.map +1 -1
- package/dist/esm/util.d.ts +31 -3
- package/dist/esm/util.d.ts.map +1 -1
- package/dist/esm/util.js +70 -31
- package/dist/esm/util.js.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/SCPAnalysis.d.ts +0 -6
- package/dist/cjs/SCPAnalysis.d.ts.map +0 -1
- package/dist/cjs/SCPAnalysis.js +0 -3
- package/dist/cjs/SCPAnalysis.js.map +0 -1
- package/dist/esm/SCPAnalysis.d.ts +0 -6
- package/dist/esm/SCPAnalysis.d.ts.map +0 -1
- package/dist/esm/SCPAnalysis.js +0 -2
- package/dist/esm/SCPAnalysis.js.map +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/*
|
|
4
|
+
I want to emit the policy object exactly as it was written. How do I get a structure
|
|
5
|
+
that matches the policy object exactly? Should I just embed the values in the explain?
|
|
6
|
+
*/
|
|
7
|
+
//# sourceMappingURL=statementExplain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statementExplain.js","sourceRoot":"","sources":["../../../src/explain/statementExplain.ts"],"names":[],"mappings":";;AA+DA;;;EAGE"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export { typeForContextKey } from './context_keys/contextKeys.js';
|
|
|
2
2
|
export { BaseConditionKeyType, isConditionKeyArray, type ConditionKeyType } from './context_keys/contextKeyTypes.js';
|
|
3
3
|
export { findContextKeys } from './context_keys/findContextKeys.js';
|
|
4
4
|
export { type EvaluationResult } from './evaluate.js';
|
|
5
|
+
export type { ActionExplain, ConditionExplain, ConditionValueExplain, PrincipalExplain, ResourceExplain, StatementExplain } from './explain/statementExplain.js';
|
|
5
6
|
export { allowedContextKeysForRequest } from './simulation_engine/contextKeys.js';
|
|
6
7
|
export { type Simulation } from './simulation_engine/simulation.js';
|
|
7
8
|
export { runSimulation } from './simulation_engine/simulationEngine.js';
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrH,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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjK,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/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,gEAAkE;AAAzD,mHAAA,iBAAiB,OAAA;AAC1B,wEAAqH;AAAtF,yHAAA,mBAAmB,OAAA;AAClD,wEAAoE;AAA3D,qHAAA,eAAe,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,gEAAkE;AAAzD,mHAAA,iBAAiB,OAAA;AAC1B,wEAAqH;AAAtF,yHAAA,mBAAmB,OAAA;AAClD,wEAAoE;AAA3D,qHAAA,eAAe,OAAA;AAGxB,qEAAkF;AAAzE,8HAAA,4BAA4B,OAAA;AAErC,+EAAwE;AAA/D,oHAAA,aAAa,OAAA;AAEtB,2FAAoF;AAA3E,gIAAA,mBAAmB,OAAA;AAC5B,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Principal, Statement } from "@cloud-copilot/iam-policy";
|
|
2
|
+
import { PrincipalExplain, StatementExplain } from "../explain/statementExplain.js";
|
|
2
3
|
import { AwsRequest } from "../request/request.js";
|
|
3
|
-
export type PrincipalMatchResult = 'Match' | 'NoMatch' | 'AccountLevelMatch';
|
|
4
|
+
export type PrincipalMatchResult = 'Match' | 'NoMatch' | 'AccountLevelMatch' | 'SessionRoleMatch' | 'SessionUserMatch';
|
|
4
5
|
/**
|
|
5
6
|
* Check to see if a request matches a Principal element in an IAM policy statement
|
|
6
7
|
*
|
|
@@ -8,7 +9,10 @@ export type PrincipalMatchResult = 'Match' | 'NoMatch' | 'AccountLevelMatch';
|
|
|
8
9
|
* @param principal the list of principals in the Principal element of the Statement
|
|
9
10
|
* @returns if the request matches the Principal element, and if so, how it matches
|
|
10
11
|
*/
|
|
11
|
-
export declare function requestMatchesPrincipal(request: AwsRequest, principal: Principal[]):
|
|
12
|
+
export declare function requestMatchesPrincipal(request: AwsRequest, principal: Principal[]): {
|
|
13
|
+
matches: PrincipalMatchResult;
|
|
14
|
+
explains: PrincipalExplain[];
|
|
15
|
+
};
|
|
12
16
|
/**
|
|
13
17
|
* Check to see if a request matches a NotPrincipal element in an IAM policy statement
|
|
14
18
|
*
|
|
@@ -16,7 +20,10 @@ export declare function requestMatchesPrincipal(request: AwsRequest, principal:
|
|
|
16
20
|
* @param notPrincipal the list of principals in the NotPrincipal element of the Statement
|
|
17
21
|
* @returns
|
|
18
22
|
*/
|
|
19
|
-
export declare function requestMatchesNotPrincipal(request: AwsRequest, notPrincipal: Principal[]):
|
|
23
|
+
export declare function requestMatchesNotPrincipal(request: AwsRequest, notPrincipal: Principal[]): {
|
|
24
|
+
matches: PrincipalMatchResult;
|
|
25
|
+
explains: PrincipalExplain[];
|
|
26
|
+
};
|
|
20
27
|
/**
|
|
21
28
|
* Check to see if a request matches a principal statement
|
|
22
29
|
*
|
|
@@ -24,9 +31,21 @@ export declare function requestMatchesNotPrincipal(request: AwsRequest, notPrinc
|
|
|
24
31
|
* @param principalStatement the principal statement to check the request against
|
|
25
32
|
* @returns if the request matches the principal statement, and if so, how it matches
|
|
26
33
|
*/
|
|
27
|
-
export declare function requestMatchesPrincipalStatement(request: AwsRequest, principalStatement: Principal):
|
|
28
|
-
|
|
34
|
+
export declare function requestMatchesPrincipalStatement(request: AwsRequest, principalStatement: Principal): PrincipalExplain;
|
|
35
|
+
/**
|
|
36
|
+
* Transfrom an assumed role session ARN into a role ARN
|
|
37
|
+
*
|
|
38
|
+
* @param assumedRoleArn the assumed role session ARN
|
|
39
|
+
* @returns the role ARN for the assumed role session
|
|
40
|
+
*/
|
|
29
41
|
export declare function roleArnFromAssumedRoleArn(assumedRoleArn: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Get a user ARN from a federated user ARN
|
|
44
|
+
*
|
|
45
|
+
* @param federatedUserArn the federated user ARN
|
|
46
|
+
* @returns the user ARN for the federated user ARN
|
|
47
|
+
*/
|
|
48
|
+
export declare function userArnFromFederatedUserArn(federatedUserArn: string): string;
|
|
30
49
|
/**
|
|
31
50
|
* Check if a request matches the Resource or NotResource elements of a statement.
|
|
32
51
|
*
|
|
@@ -34,5 +53,8 @@ export declare function roleArnFromAssumedRoleArn(assumedRoleArn: string): strin
|
|
|
34
53
|
* @param statement the statement to check against
|
|
35
54
|
* @returns true if the request matches the resources in the statement, false otherwise
|
|
36
55
|
*/
|
|
37
|
-
export declare function requestMatchesStatementPrincipals(request: AwsRequest, statement: Statement):
|
|
56
|
+
export declare function requestMatchesStatementPrincipals(request: AwsRequest, statement: Statement): {
|
|
57
|
+
matches: PrincipalMatchResult;
|
|
58
|
+
details: Pick<StatementExplain, 'principals' | 'notPrincipals'>;
|
|
59
|
+
};
|
|
38
60
|
//# 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,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,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,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AA6CnD,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,SAAS,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,kBAAkB,CAAA;AAEtH;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG;IAAC,OAAO,EAAE,oBAAoB,CAAC;IAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAAC,CAkClJ;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG;IAAC,OAAO,EAAE,oBAAoB,CAAC;IAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAAC,CAyCxJ;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,GAAG,gBAAgB,CA+FrH;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAK5E;AAGD;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG;IAAC,OAAO,EAAE,oBAAoB,CAAC;IAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,eAAe,CAAC,CAAA;CAAC,CAS7L"}
|
|
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.requestMatchesPrincipal = requestMatchesPrincipal;
|
|
4
4
|
exports.requestMatchesNotPrincipal = requestMatchesNotPrincipal;
|
|
5
5
|
exports.requestMatchesPrincipalStatement = requestMatchesPrincipalStatement;
|
|
6
|
-
exports.isAssumedRoleArn = isAssumedRoleArn;
|
|
7
6
|
exports.roleArnFromAssumedRoleArn = roleArnFromAssumedRoleArn;
|
|
7
|
+
exports.userArnFromFederatedUserArn = userArnFromFederatedUserArn;
|
|
8
8
|
exports.requestMatchesStatementPrincipals = requestMatchesStatementPrincipals;
|
|
9
|
+
const util_js_1 = require("../util.js");
|
|
9
10
|
/**
|
|
10
11
|
* Check to see if a request matches a Principal element in an IAM policy statement
|
|
11
12
|
*
|
|
@@ -14,14 +15,35 @@ exports.requestMatchesStatementPrincipals = requestMatchesStatementPrincipals;
|
|
|
14
15
|
* @returns if the request matches the Principal element, and if so, how it matches
|
|
15
16
|
*/
|
|
16
17
|
function requestMatchesPrincipal(request, principal) {
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
19
|
-
return
|
|
18
|
+
const explains = principal.map(principalStatement => requestMatchesPrincipalStatement(request, principalStatement));
|
|
19
|
+
if (explains.some(exp => exp.matches === 'Match')) {
|
|
20
|
+
return {
|
|
21
|
+
matches: 'Match',
|
|
22
|
+
explains
|
|
23
|
+
};
|
|
20
24
|
}
|
|
21
|
-
if (
|
|
22
|
-
return
|
|
25
|
+
if (explains.some(exp => exp.matches === 'SessionUserMatch')) {
|
|
26
|
+
return {
|
|
27
|
+
matches: 'SessionUserMatch',
|
|
28
|
+
explains
|
|
29
|
+
};
|
|
23
30
|
}
|
|
24
|
-
|
|
31
|
+
if (explains.some(exp => exp.matches === 'SessionRoleMatch')) {
|
|
32
|
+
return {
|
|
33
|
+
matches: 'SessionRoleMatch',
|
|
34
|
+
explains
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (explains.some(exp => exp.matches === 'AccountLevelMatch')) {
|
|
38
|
+
return {
|
|
39
|
+
matches: 'AccountLevelMatch',
|
|
40
|
+
explains
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
matches: 'NoMatch',
|
|
45
|
+
explains
|
|
46
|
+
};
|
|
25
47
|
}
|
|
26
48
|
/**
|
|
27
49
|
* Check to see if a request matches a NotPrincipal element in an IAM policy statement
|
|
@@ -31,20 +53,40 @@ function requestMatchesPrincipal(request, principal) {
|
|
|
31
53
|
* @returns
|
|
32
54
|
*/
|
|
33
55
|
function requestMatchesNotPrincipal(request, notPrincipal) {
|
|
34
|
-
const matches = notPrincipal.map(principalStatement => requestMatchesPrincipalStatement(request, principalStatement))
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
56
|
+
// const matches = notPrincipal.map(principalStatement => requestMatchesPrincipalStatement(request, principalStatement))
|
|
57
|
+
const explains = notPrincipal.map(principalStatement => {
|
|
58
|
+
const explain = requestMatchesPrincipalStatement(request, principalStatement);
|
|
59
|
+
/**
|
|
60
|
+
* Need to do research on this. If there is an account level match on a NotPrincipal, does that
|
|
61
|
+
* mean it tentatively matches the NotPrincipal, or does it mean it does not match the NotPrincipal?
|
|
62
|
+
*
|
|
63
|
+
* We need to test this.
|
|
64
|
+
*/
|
|
65
|
+
if (explain.matches === 'Match' || explain.matches === 'AccountLevelMatch' || explain.matches === 'SessionRoleMatch' || explain.matches === 'SessionUserMatch') {
|
|
66
|
+
explain.matches = 'NoMatch';
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
explain.matches = 'Match';
|
|
70
|
+
}
|
|
71
|
+
return explain;
|
|
72
|
+
});
|
|
73
|
+
if (explains.some(exp => exp.matches === 'NoMatch')) {
|
|
74
|
+
return {
|
|
75
|
+
matches: 'NoMatch',
|
|
76
|
+
explains
|
|
77
|
+
};
|
|
46
78
|
}
|
|
47
|
-
return
|
|
79
|
+
return {
|
|
80
|
+
matches: 'Match',
|
|
81
|
+
explains
|
|
82
|
+
};
|
|
83
|
+
// if(matches.includes('Match')) {
|
|
84
|
+
// return 'NoMatch'
|
|
85
|
+
// }
|
|
86
|
+
// if(matches.includes('AccountLevelMatch')) {
|
|
87
|
+
// return 'NoMatch'
|
|
88
|
+
// }
|
|
89
|
+
// return 'Match'
|
|
48
90
|
}
|
|
49
91
|
/**
|
|
50
92
|
* Check to see if a request matches a principal statement
|
|
@@ -56,55 +98,117 @@ function requestMatchesNotPrincipal(request, notPrincipal) {
|
|
|
56
98
|
function requestMatchesPrincipalStatement(request, principalStatement) {
|
|
57
99
|
if (principalStatement.isServicePrincipal()) {
|
|
58
100
|
if (principalStatement.service() === request.principal.value()) {
|
|
59
|
-
return
|
|
101
|
+
return {
|
|
102
|
+
matches: 'Match',
|
|
103
|
+
principal: principalStatement.value(),
|
|
104
|
+
};
|
|
60
105
|
}
|
|
61
|
-
return
|
|
106
|
+
return {
|
|
107
|
+
matches: 'NoMatch',
|
|
108
|
+
principal: principalStatement.value(),
|
|
109
|
+
};
|
|
62
110
|
}
|
|
63
111
|
if (principalStatement.isCanonicalUserPrincipal()) {
|
|
64
112
|
if (principalStatement.canonicalUser() === request.principal.value()) {
|
|
65
|
-
return
|
|
113
|
+
return {
|
|
114
|
+
matches: 'Match',
|
|
115
|
+
principal: principalStatement.value(),
|
|
116
|
+
};
|
|
66
117
|
}
|
|
67
|
-
return
|
|
118
|
+
return {
|
|
119
|
+
matches: 'NoMatch',
|
|
120
|
+
principal: principalStatement.value(),
|
|
121
|
+
};
|
|
68
122
|
}
|
|
69
123
|
if (principalStatement.isFederatedPrincipal()) {
|
|
70
124
|
if (principalStatement.federated() === request.principal.value()) {
|
|
71
|
-
return
|
|
125
|
+
return {
|
|
126
|
+
matches: 'Match',
|
|
127
|
+
principal: principalStatement.value(),
|
|
128
|
+
};
|
|
72
129
|
}
|
|
73
|
-
return
|
|
130
|
+
return {
|
|
131
|
+
matches: 'NoMatch',
|
|
132
|
+
principal: principalStatement.value(),
|
|
133
|
+
};
|
|
74
134
|
}
|
|
75
135
|
if (principalStatement.isWildcardPrincipal()) {
|
|
76
|
-
return
|
|
136
|
+
return {
|
|
137
|
+
matches: 'Match',
|
|
138
|
+
principal: principalStatement.value(),
|
|
139
|
+
};
|
|
77
140
|
}
|
|
78
141
|
if (principalStatement.isAccountPrincipal()) {
|
|
79
142
|
if (principalStatement.accountId() === request.principal.accountId()) {
|
|
80
|
-
return
|
|
143
|
+
return {
|
|
144
|
+
matches: 'AccountLevelMatch',
|
|
145
|
+
principal: principalStatement.value(),
|
|
146
|
+
};
|
|
81
147
|
}
|
|
82
|
-
return
|
|
148
|
+
return {
|
|
149
|
+
matches: 'NoMatch',
|
|
150
|
+
principal: principalStatement.value(),
|
|
151
|
+
};
|
|
83
152
|
}
|
|
84
153
|
if (principalStatement.isAwsPrincipal()) {
|
|
85
|
-
if (isAssumedRoleArn(request.principal.value())) {
|
|
154
|
+
if ((0, util_js_1.isAssumedRoleArn)(request.principal.value())) {
|
|
86
155
|
const sessionArn = request.principal.value();
|
|
87
156
|
const roleArn = roleArnFromAssumedRoleArn(sessionArn);
|
|
88
|
-
if (principalStatement.arn() === roleArn
|
|
89
|
-
return
|
|
157
|
+
if (principalStatement.arn() === roleArn) {
|
|
158
|
+
return {
|
|
159
|
+
matches: 'SessionRoleMatch',
|
|
160
|
+
principal: principalStatement.value(),
|
|
161
|
+
roleForSessionArn: roleArn,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else if ((0, util_js_1.isFederatedUserArn)(request.principal.value())) {
|
|
166
|
+
const sessionArn = request.principal.value();
|
|
167
|
+
const userArn = userArnFromFederatedUserArn(sessionArn);
|
|
168
|
+
if (principalStatement.arn() === userArn) {
|
|
169
|
+
return {
|
|
170
|
+
matches: 'SessionUserMatch',
|
|
171
|
+
principal: principalStatement.value(),
|
|
172
|
+
userForSessionArn: userArn,
|
|
173
|
+
};
|
|
90
174
|
}
|
|
91
175
|
}
|
|
92
176
|
if (principalStatement.arn() === request.principal.value()) {
|
|
93
|
-
return
|
|
177
|
+
return {
|
|
178
|
+
matches: 'Match',
|
|
179
|
+
principal: principalStatement.value()
|
|
180
|
+
};
|
|
94
181
|
}
|
|
95
182
|
}
|
|
96
|
-
return
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return assumedRoleArnRegex.test(principal);
|
|
183
|
+
return {
|
|
184
|
+
matches: 'NoMatch',
|
|
185
|
+
principal: principalStatement.value(),
|
|
186
|
+
};
|
|
101
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Transfrom an assumed role session ARN into a role ARN
|
|
190
|
+
*
|
|
191
|
+
* @param assumedRoleArn the assumed role session ARN
|
|
192
|
+
* @returns the role ARN for the assumed role session
|
|
193
|
+
*/
|
|
102
194
|
function roleArnFromAssumedRoleArn(assumedRoleArn) {
|
|
103
195
|
const stsParts = assumedRoleArn.split(':');
|
|
104
196
|
const resourceParts = stsParts.at(-1).split('/');
|
|
105
197
|
const rolePathAndName = resourceParts.slice(1, -1).join('/');
|
|
106
198
|
return `arn:aws:iam::${stsParts[4]}:role/${rolePathAndName}`;
|
|
107
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Get a user ARN from a federated user ARN
|
|
202
|
+
*
|
|
203
|
+
* @param federatedUserArn the federated user ARN
|
|
204
|
+
* @returns the user ARN for the federated user ARN
|
|
205
|
+
*/
|
|
206
|
+
function userArnFromFederatedUserArn(federatedUserArn) {
|
|
207
|
+
const stsParts = federatedUserArn.split(':');
|
|
208
|
+
const resource = stsParts.at(-1);
|
|
209
|
+
const username = resource.slice(resource.indexOf('/') + 1);
|
|
210
|
+
return `arn:aws:iam::${stsParts[4]}:user/${username}`;
|
|
211
|
+
}
|
|
108
212
|
/**
|
|
109
213
|
* Check if a request matches the Resource or NotResource elements of a statement.
|
|
110
214
|
*
|
|
@@ -114,10 +218,12 @@ function roleArnFromAssumedRoleArn(assumedRoleArn) {
|
|
|
114
218
|
*/
|
|
115
219
|
function requestMatchesStatementPrincipals(request, statement) {
|
|
116
220
|
if (statement.isPrincipalStatement()) {
|
|
117
|
-
|
|
221
|
+
const { matches, explains } = requestMatchesPrincipal(request, statement.principals());
|
|
222
|
+
return { matches, details: { principals: explains } };
|
|
118
223
|
}
|
|
119
224
|
else if (statement.isNotPrincipalStatement()) {
|
|
120
|
-
|
|
225
|
+
const { matches, explains } = requestMatchesNotPrincipal(request, statement.notPrincipals());
|
|
226
|
+
return { matches, details: { notPrincipals: explains } };
|
|
121
227
|
}
|
|
122
228
|
throw new Error('Statement should have Principal or NotPrincipal');
|
|
123
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"principal.js","sourceRoot":"","sources":["../../../src/principal/principal.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"principal.js","sourceRoot":"","sources":["../../../src/principal/principal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Resource, Statement } from "@cloud-copilot/iam-policy";
|
|
2
|
+
import { ResourceExplain, StatementExplain } from "../explain/statementExplain.js";
|
|
2
3
|
import { AwsRequest } from "../request/request.js";
|
|
3
4
|
/**
|
|
4
5
|
* Check if a request matches the Resource or NotResource elements of a statement.
|
|
@@ -7,7 +8,10 @@ import { AwsRequest } from "../request/request.js";
|
|
|
7
8
|
* @param statement the statement to check against
|
|
8
9
|
* @returns true if the request matches the resources in the statement, false otherwise
|
|
9
10
|
*/
|
|
10
|
-
export declare function requestMatchesStatementResources(request: AwsRequest, statement: Statement):
|
|
11
|
+
export declare function requestMatchesStatementResources(request: AwsRequest, statement: Statement): {
|
|
12
|
+
matches: boolean;
|
|
13
|
+
details: Pick<StatementExplain, 'resources' | 'notResources'>;
|
|
14
|
+
};
|
|
11
15
|
/**
|
|
12
16
|
* Check if a request matches a set of resources.
|
|
13
17
|
*
|
|
@@ -15,7 +19,10 @@ export declare function requestMatchesStatementResources(request: AwsRequest, st
|
|
|
15
19
|
* @param policyResources the resources to check against
|
|
16
20
|
* @returns true if the request matches any of the resources, false otherwise
|
|
17
21
|
*/
|
|
18
|
-
export declare function requestMatchesResources(request: AwsRequest, policyResources: Resource[]):
|
|
22
|
+
export declare function requestMatchesResources(request: AwsRequest, policyResources: Resource[]): {
|
|
23
|
+
matches: boolean;
|
|
24
|
+
explains: ResourceExplain[];
|
|
25
|
+
};
|
|
19
26
|
/**
|
|
20
27
|
* Check if a request matches a NotResource element in a policy.
|
|
21
28
|
*
|
|
@@ -23,5 +30,8 @@ export declare function requestMatchesResources(request: AwsRequest, policyResou
|
|
|
23
30
|
* @param policyResources the resources to check against
|
|
24
31
|
* @returns true if the request does not match any of the resources, false otherwise
|
|
25
32
|
*/
|
|
26
|
-
export declare function requestMatchesNotResources(request: AwsRequest, policyResources: Resource[]):
|
|
33
|
+
export declare function requestMatchesNotResources(request: AwsRequest, policyResources: Resource[]): {
|
|
34
|
+
matches: boolean;
|
|
35
|
+
explains: ResourceExplain[];
|
|
36
|
+
};
|
|
27
37
|
//# sourceMappingURL=resource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/resource/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAmBnD;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/resource/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAmBnD;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,cAAc,CAAC,CAAA;CAAC,CAiB7K;AAGD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,eAAe,EAAE,CAAA;CAAC,CAIzI;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,eAAe,EAAE,CAAA;CAAC,CAQ5I"}
|
|
@@ -27,12 +27,22 @@ function convertResourceSegmentToRegex(segment) {
|
|
|
27
27
|
*/
|
|
28
28
|
function requestMatchesStatementResources(request, statement) {
|
|
29
29
|
if (statement.isResourceStatement()) {
|
|
30
|
-
|
|
30
|
+
const { matches, explains } = requestMatchesResources(request, statement.resources());
|
|
31
|
+
if (!statement.resourceIsArray()) {
|
|
32
|
+
return { matches, details: { resources: explains[0] } };
|
|
33
|
+
}
|
|
34
|
+
return { matches, details: { resources: explains } };
|
|
35
|
+
// return requestMatchesResources(request, statement.resources());
|
|
31
36
|
}
|
|
32
37
|
else if (statement.isNotResourceStatement()) {
|
|
33
|
-
|
|
38
|
+
const { matches, explains } = requestMatchesNotResources(request, statement.notResources());
|
|
39
|
+
if (!statement.notResourceIsArray()) {
|
|
40
|
+
return { matches, details: { notResources: explains[0] } };
|
|
41
|
+
}
|
|
42
|
+
return { matches, details: { notResources: explains } };
|
|
43
|
+
// return requestMatchesNotResources(request, statement.notResources());
|
|
34
44
|
}
|
|
35
|
-
return true;
|
|
45
|
+
return { matches: true, details: {} };
|
|
36
46
|
}
|
|
37
47
|
/**
|
|
38
48
|
* Check if a request matches a set of resources.
|
|
@@ -42,7 +52,9 @@ function requestMatchesStatementResources(request, statement) {
|
|
|
42
52
|
* @returns true if the request matches any of the resources, false otherwise
|
|
43
53
|
*/
|
|
44
54
|
function requestMatchesResources(request, policyResources) {
|
|
45
|
-
|
|
55
|
+
const explains = policyResources.map(policyResource => singleResourceMatchesRequest(request, policyResource));
|
|
56
|
+
const matches = explains.some(explain => explain.matches);
|
|
57
|
+
return { matches, explains };
|
|
46
58
|
}
|
|
47
59
|
/**
|
|
48
60
|
* Check if a request matches a NotResource element in a policy.
|
|
@@ -52,7 +64,13 @@ function requestMatchesResources(request, policyResources) {
|
|
|
52
64
|
* @returns true if the request does not match any of the resources, false otherwise
|
|
53
65
|
*/
|
|
54
66
|
function requestMatchesNotResources(request, policyResources) {
|
|
55
|
-
|
|
67
|
+
const explains = policyResources.map(policyResource => {
|
|
68
|
+
const explain = singleResourceMatchesRequest(request, policyResource);
|
|
69
|
+
explain.matches = !explain.matches;
|
|
70
|
+
return explain;
|
|
71
|
+
});
|
|
72
|
+
const matches = !explains.some(explain => !explain.matches);
|
|
73
|
+
return { matches, explains };
|
|
56
74
|
}
|
|
57
75
|
/**
|
|
58
76
|
* Check if a single resource matches a request.
|
|
@@ -63,35 +81,70 @@ function requestMatchesNotResources(request, policyResources) {
|
|
|
63
81
|
*/
|
|
64
82
|
function singleResourceMatchesRequest(request, policyResource) {
|
|
65
83
|
if (policyResource.isAllResources()) {
|
|
66
|
-
return
|
|
84
|
+
return {
|
|
85
|
+
resource: policyResource.value(),
|
|
86
|
+
matches: true,
|
|
87
|
+
};
|
|
67
88
|
}
|
|
68
89
|
else if (policyResource.isArnResource()) {
|
|
69
90
|
if (!request.resource) {
|
|
70
|
-
return
|
|
91
|
+
return {
|
|
92
|
+
resource: policyResource.value(),
|
|
93
|
+
matches: false,
|
|
94
|
+
errors: ['Request does not have a resource'],
|
|
95
|
+
};
|
|
71
96
|
}
|
|
72
97
|
const resource = request.resource;
|
|
73
98
|
if (!convertResourceSegmentToRegex(policyResource.partition()).test(resource.partition())) {
|
|
74
|
-
return
|
|
99
|
+
return {
|
|
100
|
+
resource: policyResource.value(),
|
|
101
|
+
matches: false,
|
|
102
|
+
errors: ['Partition does not match'],
|
|
103
|
+
};
|
|
75
104
|
}
|
|
76
105
|
if (!convertResourceSegmentToRegex(policyResource.service()).test(resource.service())) {
|
|
77
|
-
return
|
|
106
|
+
return {
|
|
107
|
+
resource: policyResource.value(),
|
|
108
|
+
matches: false,
|
|
109
|
+
errors: ['Service does not match'],
|
|
110
|
+
};
|
|
78
111
|
}
|
|
79
112
|
if (!convertResourceSegmentToRegex(policyResource.region()).test(resource.region())) {
|
|
80
|
-
return
|
|
113
|
+
return {
|
|
114
|
+
resource: policyResource.value(),
|
|
115
|
+
matches: false,
|
|
116
|
+
errors: ['Region does not match'],
|
|
117
|
+
};
|
|
81
118
|
}
|
|
82
119
|
if (!convertResourceSegmentToRegex(policyResource.account()).test(resource.account())) {
|
|
83
|
-
return
|
|
120
|
+
return {
|
|
121
|
+
resource: policyResource.value(),
|
|
122
|
+
matches: false,
|
|
123
|
+
errors: ['Account does not match'],
|
|
124
|
+
};
|
|
84
125
|
}
|
|
85
126
|
//Wildcards and variables are not allowed in the product segment https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html "Incorrect wildcard usage"
|
|
86
127
|
const [policyProduct, policyResourceId] = (0, util_js_1.getResourceSegments)(policyResource.resource());
|
|
87
128
|
if (!resource.resource().startsWith(policyProduct)) {
|
|
88
|
-
return
|
|
129
|
+
return {
|
|
130
|
+
resource: policyResource.value(),
|
|
131
|
+
matches: false,
|
|
132
|
+
errors: ['Product does not match'],
|
|
133
|
+
};
|
|
89
134
|
}
|
|
90
135
|
const requestResourceId = resource.resource().slice(policyProduct.length);
|
|
91
|
-
|
|
92
|
-
|
|
136
|
+
const { pattern, errors } = (0, util_js_1.convertIamString)(policyResourceId, request);
|
|
137
|
+
if (!pattern.test(requestResourceId)) {
|
|
138
|
+
return {
|
|
139
|
+
resource: policyResource.value(),
|
|
140
|
+
matches: false,
|
|
141
|
+
errors: ['Resource does not match'],
|
|
142
|
+
};
|
|
93
143
|
}
|
|
94
|
-
return
|
|
144
|
+
return {
|
|
145
|
+
resource: policyResource.value(),
|
|
146
|
+
matches: true,
|
|
147
|
+
};
|
|
95
148
|
}
|
|
96
149
|
else {
|
|
97
150
|
throw new Error('Unknown resource type');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/resource/resource.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/resource/resource.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { StatementAnalysis } from "../StatementAnalysis.js";
|
|
1
|
+
import { RequestAnalysis } from "../evaluate.js";
|
|
3
2
|
import { ServiceAuthorizationRequest, ServiceAuthorizer } from "./ServiceAuthorizer.js";
|
|
4
3
|
/**
|
|
5
4
|
* The default authorizer for services.
|
|
6
5
|
*/
|
|
7
6
|
export declare class DefaultServiceAuthorizer implements ServiceAuthorizer {
|
|
8
|
-
authorize(request: ServiceAuthorizationRequest):
|
|
9
|
-
/**
|
|
10
|
-
* Determine the result of the SCP analysis.
|
|
11
|
-
*
|
|
12
|
-
* @param request The request to authorize.
|
|
13
|
-
* @returns The result of the SCP analysis.
|
|
14
|
-
*/
|
|
15
|
-
serviceControlPolicyResult(request: ServiceAuthorizationRequest): EvaluationResult;
|
|
16
|
-
/**
|
|
17
|
-
* Evaluate the identity statements to determine the result.
|
|
18
|
-
*
|
|
19
|
-
* @param request The request to authorize.
|
|
20
|
-
* @returns The result of the identity statement analysis.
|
|
21
|
-
*/
|
|
22
|
-
identityStatementResult(request: ServiceAuthorizationRequest): EvaluationResult;
|
|
23
|
-
/**
|
|
24
|
-
* Evaluate the resource policy to determine the result.
|
|
25
|
-
*
|
|
26
|
-
* @param request the request to authorize
|
|
27
|
-
* @returns the result of the resource policy analysis
|
|
28
|
-
*/
|
|
29
|
-
resourcePolicyResult(request: ServiceAuthorizationRequest): ResourceEvaluationResult;
|
|
30
|
-
/**
|
|
31
|
-
* Checks if a statement is an identity statement that allows the request.
|
|
32
|
-
*
|
|
33
|
-
* @param statement The statement to check.
|
|
34
|
-
* @returns Whether the statement is an identity statement that allows the request.
|
|
35
|
-
*/
|
|
36
|
-
identityStatementAllows(statement: StatementAnalysis): boolean;
|
|
37
|
-
identityStatementUknownAllow(statement: StatementAnalysis): boolean;
|
|
38
|
-
identityStatementUknownDeny(statement: StatementAnalysis): boolean;
|
|
39
|
-
identityStatementExplicitDeny(statement: StatementAnalysis): boolean;
|
|
7
|
+
authorize(request: ServiceAuthorizationRequest): RequestAnalysis;
|
|
40
8
|
}
|
|
41
9
|
//# sourceMappingURL=DefaultServiceAuthorizer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultServiceAuthorizer.d.ts","sourceRoot":"","sources":["../../../src/services/DefaultServiceAuthorizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"DefaultServiceAuthorizer.d.ts","sourceRoot":"","sources":["../../../src/services/DefaultServiceAuthorizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAExF;;GAEG;AACH,qBAAa,wBAAyB,YAAW,iBAAiB;IACzD,SAAS,CAAC,OAAO,EAAE,2BAA2B,GAAG,eAAe;CAoIxE"}
|