@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
package/dist/esm/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/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,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/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAwB,mBAAmB,EAAyB,MAAM,mCAAmC,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAwB,mBAAmB,EAAyB,MAAM,mCAAmC,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGpE,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,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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isAssumedRoleArn, isFederatedUserArn } from "../util.js";
|
|
1
2
|
/**
|
|
2
3
|
* Check to see if a request matches a Principal element in an IAM policy statement
|
|
3
4
|
*
|
|
@@ -6,14 +7,35 @@
|
|
|
6
7
|
* @returns if the request matches the Principal element, and if so, how it matches
|
|
7
8
|
*/
|
|
8
9
|
export function requestMatchesPrincipal(request, principal) {
|
|
9
|
-
const
|
|
10
|
-
if (
|
|
11
|
-
return
|
|
10
|
+
const explains = principal.map(principalStatement => requestMatchesPrincipalStatement(request, principalStatement));
|
|
11
|
+
if (explains.some(exp => exp.matches === 'Match')) {
|
|
12
|
+
return {
|
|
13
|
+
matches: 'Match',
|
|
14
|
+
explains
|
|
15
|
+
};
|
|
12
16
|
}
|
|
13
|
-
if (
|
|
14
|
-
return
|
|
17
|
+
if (explains.some(exp => exp.matches === 'SessionUserMatch')) {
|
|
18
|
+
return {
|
|
19
|
+
matches: 'SessionUserMatch',
|
|
20
|
+
explains
|
|
21
|
+
};
|
|
15
22
|
}
|
|
16
|
-
|
|
23
|
+
if (explains.some(exp => exp.matches === 'SessionRoleMatch')) {
|
|
24
|
+
return {
|
|
25
|
+
matches: 'SessionRoleMatch',
|
|
26
|
+
explains
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (explains.some(exp => exp.matches === 'AccountLevelMatch')) {
|
|
30
|
+
return {
|
|
31
|
+
matches: 'AccountLevelMatch',
|
|
32
|
+
explains
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
matches: 'NoMatch',
|
|
37
|
+
explains
|
|
38
|
+
};
|
|
17
39
|
}
|
|
18
40
|
/**
|
|
19
41
|
* Check to see if a request matches a NotPrincipal element in an IAM policy statement
|
|
@@ -23,20 +45,40 @@ export function requestMatchesPrincipal(request, principal) {
|
|
|
23
45
|
* @returns
|
|
24
46
|
*/
|
|
25
47
|
export function requestMatchesNotPrincipal(request, notPrincipal) {
|
|
26
|
-
const matches = notPrincipal.map(principalStatement => requestMatchesPrincipalStatement(request, principalStatement))
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
48
|
+
// const matches = notPrincipal.map(principalStatement => requestMatchesPrincipalStatement(request, principalStatement))
|
|
49
|
+
const explains = notPrincipal.map(principalStatement => {
|
|
50
|
+
const explain = requestMatchesPrincipalStatement(request, principalStatement);
|
|
51
|
+
/**
|
|
52
|
+
* Need to do research on this. If there is an account level match on a NotPrincipal, does that
|
|
53
|
+
* mean it tentatively matches the NotPrincipal, or does it mean it does not match the NotPrincipal?
|
|
54
|
+
*
|
|
55
|
+
* We need to test this.
|
|
56
|
+
*/
|
|
57
|
+
if (explain.matches === 'Match' || explain.matches === 'AccountLevelMatch' || explain.matches === 'SessionRoleMatch' || explain.matches === 'SessionUserMatch') {
|
|
58
|
+
explain.matches = 'NoMatch';
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
explain.matches = 'Match';
|
|
62
|
+
}
|
|
63
|
+
return explain;
|
|
64
|
+
});
|
|
65
|
+
if (explains.some(exp => exp.matches === 'NoMatch')) {
|
|
66
|
+
return {
|
|
67
|
+
matches: 'NoMatch',
|
|
68
|
+
explains
|
|
69
|
+
};
|
|
38
70
|
}
|
|
39
|
-
return
|
|
71
|
+
return {
|
|
72
|
+
matches: 'Match',
|
|
73
|
+
explains
|
|
74
|
+
};
|
|
75
|
+
// if(matches.includes('Match')) {
|
|
76
|
+
// return 'NoMatch'
|
|
77
|
+
// }
|
|
78
|
+
// if(matches.includes('AccountLevelMatch')) {
|
|
79
|
+
// return 'NoMatch'
|
|
80
|
+
// }
|
|
81
|
+
// return 'Match'
|
|
40
82
|
}
|
|
41
83
|
/**
|
|
42
84
|
* Check to see if a request matches a principal statement
|
|
@@ -48,55 +90,117 @@ export function requestMatchesNotPrincipal(request, notPrincipal) {
|
|
|
48
90
|
export function requestMatchesPrincipalStatement(request, principalStatement) {
|
|
49
91
|
if (principalStatement.isServicePrincipal()) {
|
|
50
92
|
if (principalStatement.service() === request.principal.value()) {
|
|
51
|
-
return
|
|
93
|
+
return {
|
|
94
|
+
matches: 'Match',
|
|
95
|
+
principal: principalStatement.value(),
|
|
96
|
+
};
|
|
52
97
|
}
|
|
53
|
-
return
|
|
98
|
+
return {
|
|
99
|
+
matches: 'NoMatch',
|
|
100
|
+
principal: principalStatement.value(),
|
|
101
|
+
};
|
|
54
102
|
}
|
|
55
103
|
if (principalStatement.isCanonicalUserPrincipal()) {
|
|
56
104
|
if (principalStatement.canonicalUser() === request.principal.value()) {
|
|
57
|
-
return
|
|
105
|
+
return {
|
|
106
|
+
matches: 'Match',
|
|
107
|
+
principal: principalStatement.value(),
|
|
108
|
+
};
|
|
58
109
|
}
|
|
59
|
-
return
|
|
110
|
+
return {
|
|
111
|
+
matches: 'NoMatch',
|
|
112
|
+
principal: principalStatement.value(),
|
|
113
|
+
};
|
|
60
114
|
}
|
|
61
115
|
if (principalStatement.isFederatedPrincipal()) {
|
|
62
116
|
if (principalStatement.federated() === request.principal.value()) {
|
|
63
|
-
return
|
|
117
|
+
return {
|
|
118
|
+
matches: 'Match',
|
|
119
|
+
principal: principalStatement.value(),
|
|
120
|
+
};
|
|
64
121
|
}
|
|
65
|
-
return
|
|
122
|
+
return {
|
|
123
|
+
matches: 'NoMatch',
|
|
124
|
+
principal: principalStatement.value(),
|
|
125
|
+
};
|
|
66
126
|
}
|
|
67
127
|
if (principalStatement.isWildcardPrincipal()) {
|
|
68
|
-
return
|
|
128
|
+
return {
|
|
129
|
+
matches: 'Match',
|
|
130
|
+
principal: principalStatement.value(),
|
|
131
|
+
};
|
|
69
132
|
}
|
|
70
133
|
if (principalStatement.isAccountPrincipal()) {
|
|
71
134
|
if (principalStatement.accountId() === request.principal.accountId()) {
|
|
72
|
-
return
|
|
135
|
+
return {
|
|
136
|
+
matches: 'AccountLevelMatch',
|
|
137
|
+
principal: principalStatement.value(),
|
|
138
|
+
};
|
|
73
139
|
}
|
|
74
|
-
return
|
|
140
|
+
return {
|
|
141
|
+
matches: 'NoMatch',
|
|
142
|
+
principal: principalStatement.value(),
|
|
143
|
+
};
|
|
75
144
|
}
|
|
76
145
|
if (principalStatement.isAwsPrincipal()) {
|
|
77
146
|
if (isAssumedRoleArn(request.principal.value())) {
|
|
78
147
|
const sessionArn = request.principal.value();
|
|
79
148
|
const roleArn = roleArnFromAssumedRoleArn(sessionArn);
|
|
80
|
-
if (principalStatement.arn() === roleArn
|
|
81
|
-
return
|
|
149
|
+
if (principalStatement.arn() === roleArn) {
|
|
150
|
+
return {
|
|
151
|
+
matches: 'SessionRoleMatch',
|
|
152
|
+
principal: principalStatement.value(),
|
|
153
|
+
roleForSessionArn: roleArn,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else if (isFederatedUserArn(request.principal.value())) {
|
|
158
|
+
const sessionArn = request.principal.value();
|
|
159
|
+
const userArn = userArnFromFederatedUserArn(sessionArn);
|
|
160
|
+
if (principalStatement.arn() === userArn) {
|
|
161
|
+
return {
|
|
162
|
+
matches: 'SessionUserMatch',
|
|
163
|
+
principal: principalStatement.value(),
|
|
164
|
+
userForSessionArn: userArn,
|
|
165
|
+
};
|
|
82
166
|
}
|
|
83
167
|
}
|
|
84
168
|
if (principalStatement.arn() === request.principal.value()) {
|
|
85
|
-
return
|
|
169
|
+
return {
|
|
170
|
+
matches: 'Match',
|
|
171
|
+
principal: principalStatement.value()
|
|
172
|
+
};
|
|
86
173
|
}
|
|
87
174
|
}
|
|
88
|
-
return
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return assumedRoleArnRegex.test(principal);
|
|
175
|
+
return {
|
|
176
|
+
matches: 'NoMatch',
|
|
177
|
+
principal: principalStatement.value(),
|
|
178
|
+
};
|
|
93
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Transfrom an assumed role session ARN into a role ARN
|
|
182
|
+
*
|
|
183
|
+
* @param assumedRoleArn the assumed role session ARN
|
|
184
|
+
* @returns the role ARN for the assumed role session
|
|
185
|
+
*/
|
|
94
186
|
export function roleArnFromAssumedRoleArn(assumedRoleArn) {
|
|
95
187
|
const stsParts = assumedRoleArn.split(':');
|
|
96
188
|
const resourceParts = stsParts.at(-1).split('/');
|
|
97
189
|
const rolePathAndName = resourceParts.slice(1, -1).join('/');
|
|
98
190
|
return `arn:aws:iam::${stsParts[4]}:role/${rolePathAndName}`;
|
|
99
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Get a user ARN from a federated user ARN
|
|
194
|
+
*
|
|
195
|
+
* @param federatedUserArn the federated user ARN
|
|
196
|
+
* @returns the user ARN for the federated user ARN
|
|
197
|
+
*/
|
|
198
|
+
export function userArnFromFederatedUserArn(federatedUserArn) {
|
|
199
|
+
const stsParts = federatedUserArn.split(':');
|
|
200
|
+
const resource = stsParts.at(-1);
|
|
201
|
+
const username = resource.slice(resource.indexOf('/') + 1);
|
|
202
|
+
return `arn:aws:iam::${stsParts[4]}:user/${username}`;
|
|
203
|
+
}
|
|
100
204
|
/**
|
|
101
205
|
* Check if a request matches the Resource or NotResource elements of a statement.
|
|
102
206
|
*
|
|
@@ -106,10 +210,12 @@ export function roleArnFromAssumedRoleArn(assumedRoleArn) {
|
|
|
106
210
|
*/
|
|
107
211
|
export function requestMatchesStatementPrincipals(request, statement) {
|
|
108
212
|
if (statement.isPrincipalStatement()) {
|
|
109
|
-
|
|
213
|
+
const { matches, explains } = requestMatchesPrincipal(request, statement.principals());
|
|
214
|
+
return { matches, details: { principals: explains } };
|
|
110
215
|
}
|
|
111
216
|
else if (statement.isNotPrincipalStatement()) {
|
|
112
|
-
|
|
217
|
+
const { matches, explains } = requestMatchesNotPrincipal(request, statement.notPrincipals());
|
|
218
|
+
return { matches, details: { notPrincipals: explains } };
|
|
113
219
|
}
|
|
114
220
|
throw new Error('Statement should have Principal or NotPrincipal');
|
|
115
221
|
}
|
|
@@ -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":"AAGA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA8ClE;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAmB,EAAE,SAAsB;IACjF,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,gCAAgC,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAA;IACnH,IAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,QAAQ;SACT,CAAA;IACH,CAAC;IAED,IAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,kBAAkB,CAAC,EAAE,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE,kBAAkB;YAC3B,QAAQ;SACT,CAAA;IACH,CAAC;IAED,IAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,kBAAkB,CAAC,EAAE,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE,kBAAkB;YAC3B,QAAQ;SACT,CAAA;IACH,CAAC;IAED,IAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,mBAAmB,CAAC,EAAE,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,mBAAmB;YAC5B,QAAQ;SACT,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,QAAQ;KACT,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAmB,EAAE,YAAyB;IACvF,wHAAwH;IACxH,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE;QACrD,MAAM,OAAO,GAAG,gCAAgC,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;QAC7E;;;;;WAKG;QACH,IAAG,OAAO,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,mBAAmB,IAAI,OAAO,CAAC,OAAO,KAAK,kBAAkB,IAAI,OAAO,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;YAC9J,OAAO,CAAC,OAAO,GAAG,SAAS,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,OAAO,GAAG,OAAO,CAAA;QAC3B,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAA;IAGF,IAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,EAAE,CAAC;QACnD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,QAAQ;SACT,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,QAAQ;KACT,CAAA;IAED,kCAAkC;IAClC,qBAAqB;IACrB,IAAI;IAGJ,8CAA8C;IAC9C,qBAAqB;IACrB,IAAI;IAEJ,iBAAiB;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC,CAAC,OAAmB,EAAE,kBAA6B;IACjG,IAAG,kBAAkB,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC3C,IAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;aACtC,CAAA;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;SACtC,CAAA;IACH,CAAC;IAED,IAAG,kBAAkB,CAAC,wBAAwB,EAAE,EAAE,CAAC;QACjD,IAAG,kBAAkB,CAAC,aAAa,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;YACpE,OAAO;gBACL,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;aACtC,CAAA;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;SACtC,CAAA;IACH,CAAC;IAED,IAAG,kBAAkB,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC7C,IAAG,kBAAkB,CAAC,SAAS,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;YAChE,OAAO;gBACL,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;aACtC,CAAA;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;SACtC,CAAA;IACH,CAAC;IAED,IAAG,kBAAkB,CAAC,mBAAmB,EAAE,EAAE,CAAC;QAC5C,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;SACtC,CAAA;IACH,CAAC;IAED,IAAG,kBAAkB,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC3C,IAAG,kBAAkB,CAAC,SAAS,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC;YACpE,OAAO;gBACL,OAAO,EAAE,mBAAmB;gBAC5B,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;aACtC,CAAA;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;SACtC,CAAA;IACH,CAAC;IAED,IAAG,kBAAkB,CAAC,cAAc,EAAE,EAAE,CAAC;QACvC,IAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;YAC5C,MAAM,OAAO,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAA;YACrD,IAAG,kBAAkB,CAAC,GAAG,EAAE,KAAM,OAAO,EAAE,CAAC;gBACzC,OAAO;oBACL,OAAO,EAAE,kBAAkB;oBAC3B,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;oBACrC,iBAAiB,EAAE,OAAO;iBAC3B,CAAA;YACH,CAAC;QACH,CAAC;aAAM,IAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;YAC5C,MAAM,OAAO,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAA;YACvD,IAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,OAAO,EAAE,CAAC;gBACxC,OAAO;oBACL,OAAO,EAAE,kBAAkB;oBAC3B,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;oBACrC,iBAAiB,EAAE,OAAO;iBAC3B,CAAA;YACH,CAAC;QACH,CAAC;QAED,IAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;YAC1D,OAAO;gBACL,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;aACtC,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE;KACtC,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,cAAsB;IAC9D,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1C,MAAM,aAAa,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjD,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5D,OAAO,gBAAgB,QAAQ,CAAC,CAAC,CAAC,SAAS,eAAe,EAAE,CAAA;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,gBAAwB;IAClE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAA;IACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1D,OAAO,gBAAgB,QAAQ,CAAC,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAA;AACvD,CAAC;AAGD;;;;;;GAMG;AACH,MAAM,UAAU,iCAAiC,CAAC,OAAmB,EAAE,SAAoB;IACzF,IAAG,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;QACpC,MAAM,EAAC,OAAO,EAAE,QAAQ,EAAC,GAAG,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAA;QACpF,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,EAAC,UAAU,EAAE,QAAQ,EAAC,EAAC,CAAA;IACnD,CAAC;SAAM,IAAG,SAAS,CAAC,uBAAuB,EAAE,EAAE,CAAC;QAC9C,MAAM,EAAC,OAAO,EAAE,QAAQ,EAAC,GAAG,0BAA0B,CAAC,OAAO,EAAE,SAAS,CAAC,aAAa,EAAE,CAAC,CAAA;QAC1F,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,EAAC,aAAa,EAAE,QAAQ,EAAC,EAAC,CAAA;IACtD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;AACpE,CAAC"}
|
|
@@ -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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { convertIamString, getResourceSegments } from "../util.js";
|
|
2
2
|
//TODO: Make a check to see if the action is a wildcard only action. This will have to happen outside of these functions.
|
|
3
3
|
/**
|
|
4
4
|
* Convert a resource segment to a regular expression. This is without variables.
|
|
@@ -22,12 +22,22 @@ function convertResourceSegmentToRegex(segment) {
|
|
|
22
22
|
*/
|
|
23
23
|
export function requestMatchesStatementResources(request, statement) {
|
|
24
24
|
if (statement.isResourceStatement()) {
|
|
25
|
-
|
|
25
|
+
const { matches, explains } = requestMatchesResources(request, statement.resources());
|
|
26
|
+
if (!statement.resourceIsArray()) {
|
|
27
|
+
return { matches, details: { resources: explains[0] } };
|
|
28
|
+
}
|
|
29
|
+
return { matches, details: { resources: explains } };
|
|
30
|
+
// return requestMatchesResources(request, statement.resources());
|
|
26
31
|
}
|
|
27
32
|
else if (statement.isNotResourceStatement()) {
|
|
28
|
-
|
|
33
|
+
const { matches, explains } = requestMatchesNotResources(request, statement.notResources());
|
|
34
|
+
if (!statement.notResourceIsArray()) {
|
|
35
|
+
return { matches, details: { notResources: explains[0] } };
|
|
36
|
+
}
|
|
37
|
+
return { matches, details: { notResources: explains } };
|
|
38
|
+
// return requestMatchesNotResources(request, statement.notResources());
|
|
29
39
|
}
|
|
30
|
-
return true;
|
|
40
|
+
return { matches: true, details: {} };
|
|
31
41
|
}
|
|
32
42
|
/**
|
|
33
43
|
* Check if a request matches a set of resources.
|
|
@@ -37,7 +47,9 @@ export function requestMatchesStatementResources(request, statement) {
|
|
|
37
47
|
* @returns true if the request matches any of the resources, false otherwise
|
|
38
48
|
*/
|
|
39
49
|
export function requestMatchesResources(request, policyResources) {
|
|
40
|
-
|
|
50
|
+
const explains = policyResources.map(policyResource => singleResourceMatchesRequest(request, policyResource));
|
|
51
|
+
const matches = explains.some(explain => explain.matches);
|
|
52
|
+
return { matches, explains };
|
|
41
53
|
}
|
|
42
54
|
/**
|
|
43
55
|
* Check if a request matches a NotResource element in a policy.
|
|
@@ -47,7 +59,13 @@ export function requestMatchesResources(request, policyResources) {
|
|
|
47
59
|
* @returns true if the request does not match any of the resources, false otherwise
|
|
48
60
|
*/
|
|
49
61
|
export function requestMatchesNotResources(request, policyResources) {
|
|
50
|
-
|
|
62
|
+
const explains = policyResources.map(policyResource => {
|
|
63
|
+
const explain = singleResourceMatchesRequest(request, policyResource);
|
|
64
|
+
explain.matches = !explain.matches;
|
|
65
|
+
return explain;
|
|
66
|
+
});
|
|
67
|
+
const matches = !explains.some(explain => !explain.matches);
|
|
68
|
+
return { matches, explains };
|
|
51
69
|
}
|
|
52
70
|
/**
|
|
53
71
|
* Check if a single resource matches a request.
|
|
@@ -58,35 +76,70 @@ export function requestMatchesNotResources(request, policyResources) {
|
|
|
58
76
|
*/
|
|
59
77
|
function singleResourceMatchesRequest(request, policyResource) {
|
|
60
78
|
if (policyResource.isAllResources()) {
|
|
61
|
-
return
|
|
79
|
+
return {
|
|
80
|
+
resource: policyResource.value(),
|
|
81
|
+
matches: true,
|
|
82
|
+
};
|
|
62
83
|
}
|
|
63
84
|
else if (policyResource.isArnResource()) {
|
|
64
85
|
if (!request.resource) {
|
|
65
|
-
return
|
|
86
|
+
return {
|
|
87
|
+
resource: policyResource.value(),
|
|
88
|
+
matches: false,
|
|
89
|
+
errors: ['Request does not have a resource'],
|
|
90
|
+
};
|
|
66
91
|
}
|
|
67
92
|
const resource = request.resource;
|
|
68
93
|
if (!convertResourceSegmentToRegex(policyResource.partition()).test(resource.partition())) {
|
|
69
|
-
return
|
|
94
|
+
return {
|
|
95
|
+
resource: policyResource.value(),
|
|
96
|
+
matches: false,
|
|
97
|
+
errors: ['Partition does not match'],
|
|
98
|
+
};
|
|
70
99
|
}
|
|
71
100
|
if (!convertResourceSegmentToRegex(policyResource.service()).test(resource.service())) {
|
|
72
|
-
return
|
|
101
|
+
return {
|
|
102
|
+
resource: policyResource.value(),
|
|
103
|
+
matches: false,
|
|
104
|
+
errors: ['Service does not match'],
|
|
105
|
+
};
|
|
73
106
|
}
|
|
74
107
|
if (!convertResourceSegmentToRegex(policyResource.region()).test(resource.region())) {
|
|
75
|
-
return
|
|
108
|
+
return {
|
|
109
|
+
resource: policyResource.value(),
|
|
110
|
+
matches: false,
|
|
111
|
+
errors: ['Region does not match'],
|
|
112
|
+
};
|
|
76
113
|
}
|
|
77
114
|
if (!convertResourceSegmentToRegex(policyResource.account()).test(resource.account())) {
|
|
78
|
-
return
|
|
115
|
+
return {
|
|
116
|
+
resource: policyResource.value(),
|
|
117
|
+
matches: false,
|
|
118
|
+
errors: ['Account does not match'],
|
|
119
|
+
};
|
|
79
120
|
}
|
|
80
121
|
//Wildcards and variables are not allowed in the product segment https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html "Incorrect wildcard usage"
|
|
81
122
|
const [policyProduct, policyResourceId] = getResourceSegments(policyResource.resource());
|
|
82
123
|
if (!resource.resource().startsWith(policyProduct)) {
|
|
83
|
-
return
|
|
124
|
+
return {
|
|
125
|
+
resource: policyResource.value(),
|
|
126
|
+
matches: false,
|
|
127
|
+
errors: ['Product does not match'],
|
|
128
|
+
};
|
|
84
129
|
}
|
|
85
130
|
const requestResourceId = resource.resource().slice(policyProduct.length);
|
|
86
|
-
|
|
87
|
-
|
|
131
|
+
const { pattern, errors } = convertIamString(policyResourceId, request);
|
|
132
|
+
if (!pattern.test(requestResourceId)) {
|
|
133
|
+
return {
|
|
134
|
+
resource: policyResource.value(),
|
|
135
|
+
matches: false,
|
|
136
|
+
errors: ['Resource does not match'],
|
|
137
|
+
};
|
|
88
138
|
}
|
|
89
|
-
return
|
|
139
|
+
return {
|
|
140
|
+
resource: policyResource.value(),
|
|
141
|
+
matches: true,
|
|
142
|
+
};
|
|
90
143
|
}
|
|
91
144
|
else {
|
|
92
145
|
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"}
|