@actsecurity/iam-simulate 0.1.173
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/LICENSE.txt +661 -0
- package/README.md +257 -0
- package/dist/cjs/StatementAnalysis.d.ts +63 -0
- package/dist/cjs/StatementAnalysis.d.ts.map +1 -0
- package/dist/cjs/StatementAnalysis.js +48 -0
- package/dist/cjs/StatementAnalysis.js.map +1 -0
- package/dist/cjs/action/action.d.ts +37 -0
- package/dist/cjs/action/action.d.ts.map +1 -0
- package/dist/cjs/action/action.js +102 -0
- package/dist/cjs/action/action.js.map +1 -0
- package/dist/cjs/analysis/allowedConditions.d.ts +61 -0
- package/dist/cjs/analysis/allowedConditions.d.ts.map +1 -0
- package/dist/cjs/analysis/allowedConditions.js +395 -0
- package/dist/cjs/analysis/allowedConditions.js.map +1 -0
- package/dist/cjs/analysis/analyzeResults.d.ts +99 -0
- package/dist/cjs/analysis/analyzeResults.d.ts.map +1 -0
- package/dist/cjs/analysis/analyzeResults.js +187 -0
- package/dist/cjs/analysis/analyzeResults.js.map +1 -0
- package/dist/cjs/condition/BaseConditionOperator.d.ts +13 -0
- package/dist/cjs/condition/BaseConditionOperator.d.ts.map +1 -0
- package/dist/cjs/condition/BaseConditionOperator.js +3 -0
- package/dist/cjs/condition/BaseConditionOperator.js.map +1 -0
- package/dist/cjs/condition/arn/ArnEquals.d.ts +3 -0
- package/dist/cjs/condition/arn/ArnEquals.d.ts.map +1 -0
- package/dist/cjs/condition/arn/ArnEquals.js +12 -0
- package/dist/cjs/condition/arn/ArnEquals.js.map +1 -0
- package/dist/cjs/condition/arn/ArnLike.d.ts +3 -0
- package/dist/cjs/condition/arn/ArnLike.d.ts.map +1 -0
- package/dist/cjs/condition/arn/ArnLike.js +18 -0
- package/dist/cjs/condition/arn/ArnLike.js.map +1 -0
- package/dist/cjs/condition/arn/ArnNotEquals.d.ts +3 -0
- package/dist/cjs/condition/arn/ArnNotEquals.d.ts.map +1 -0
- package/dist/cjs/condition/arn/ArnNotEquals.js +12 -0
- package/dist/cjs/condition/arn/ArnNotEquals.js.map +1 -0
- package/dist/cjs/condition/arn/ArnNotLike.d.ts +3 -0
- package/dist/cjs/condition/arn/ArnNotLike.d.ts.map +1 -0
- package/dist/cjs/condition/arn/ArnNotLike.js +18 -0
- package/dist/cjs/condition/arn/ArnNotLike.js.map +1 -0
- 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 +71 -0
- package/dist/cjs/condition/arn/arn.js.map +1 -0
- package/dist/cjs/condition/binary/BinaryEquals.d.ts +7 -0
- package/dist/cjs/condition/binary/BinaryEquals.d.ts.map +1 -0
- package/dist/cjs/condition/binary/BinaryEquals.js +28 -0
- package/dist/cjs/condition/binary/BinaryEquals.js.map +1 -0
- package/dist/cjs/condition/boolean/Bool.d.ts +3 -0
- package/dist/cjs/condition/boolean/Bool.d.ts.map +1 -0
- package/dist/cjs/condition/boolean/Bool.js +54 -0
- package/dist/cjs/condition/boolean/Bool.js.map +1 -0
- package/dist/cjs/condition/condition.d.ts +26 -0
- package/dist/cjs/condition/condition.d.ts.map +1 -0
- package/dist/cjs/condition/condition.js +665 -0
- package/dist/cjs/condition/condition.js.map +1 -0
- 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 +19 -0
- package/dist/cjs/condition/conditionUtil.js.map +1 -0
- package/dist/cjs/condition/date/DateEquals.d.ts +3 -0
- package/dist/cjs/condition/date/DateEquals.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateEquals.js +22 -0
- package/dist/cjs/condition/date/DateEquals.js.map +1 -0
- package/dist/cjs/condition/date/DateGreaterThan.d.ts +3 -0
- package/dist/cjs/condition/date/DateGreaterThan.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateGreaterThan.js +22 -0
- package/dist/cjs/condition/date/DateGreaterThan.js.map +1 -0
- package/dist/cjs/condition/date/DateGreaterThanEquals.d.ts +3 -0
- package/dist/cjs/condition/date/DateGreaterThanEquals.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateGreaterThanEquals.js +22 -0
- package/dist/cjs/condition/date/DateGreaterThanEquals.js.map +1 -0
- package/dist/cjs/condition/date/DateLessThan.d.ts +3 -0
- package/dist/cjs/condition/date/DateLessThan.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateLessThan.js +22 -0
- package/dist/cjs/condition/date/DateLessThan.js.map +1 -0
- package/dist/cjs/condition/date/DateLessThanEquals.d.ts +3 -0
- package/dist/cjs/condition/date/DateLessThanEquals.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateLessThanEquals.js +22 -0
- package/dist/cjs/condition/date/DateLessThanEquals.js.map +1 -0
- package/dist/cjs/condition/date/DateNotEquals.d.ts +3 -0
- package/dist/cjs/condition/date/DateNotEquals.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateNotEquals.js +22 -0
- package/dist/cjs/condition/date/DateNotEquals.js.map +1 -0
- package/dist/cjs/condition/date/date.d.ts +18 -0
- package/dist/cjs/condition/date/date.d.ts.map +1 -0
- package/dist/cjs/condition/date/date.js +57 -0
- package/dist/cjs/condition/date/date.js.map +1 -0
- package/dist/cjs/condition/ipaddress/IpAddress.d.ts +3 -0
- package/dist/cjs/condition/ipaddress/IpAddress.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/IpAddress.js +20 -0
- package/dist/cjs/condition/ipaddress/IpAddress.js.map +1 -0
- package/dist/cjs/condition/ipaddress/NotIpAddress.d.ts +3 -0
- package/dist/cjs/condition/ipaddress/NotIpAddress.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/NotIpAddress.js +20 -0
- package/dist/cjs/condition/ipaddress/NotIpAddress.js.map +1 -0
- package/dist/cjs/condition/ipaddress/ip.d.ts +11 -0
- package/dist/cjs/condition/ipaddress/ip.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/ip.js +70 -0
- package/dist/cjs/condition/ipaddress/ip.js.map +1 -0
- package/dist/cjs/condition/ipaddress/ipv4.d.ts +24 -0
- package/dist/cjs/condition/ipaddress/ipv4.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/ipv4.js +59 -0
- package/dist/cjs/condition/ipaddress/ipv4.js.map +1 -0
- package/dist/cjs/condition/ipaddress/ipv6.d.ts +24 -0
- package/dist/cjs/condition/ipaddress/ipv6.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/ipv6.js +111 -0
- package/dist/cjs/condition/ipaddress/ipv6.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericEquals.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericEquals.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericEquals.js +22 -0
- package/dist/cjs/condition/numeric/NumericEquals.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericGreaterThan.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericGreaterThan.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericGreaterThan.js +22 -0
- package/dist/cjs/condition/numeric/NumericGreaterThan.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.js +22 -0
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericLessThan.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericLessThan.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericLessThan.js +22 -0
- package/dist/cjs/condition/numeric/NumericLessThan.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericLessThanEquals.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericLessThanEquals.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericLessThanEquals.js +22 -0
- package/dist/cjs/condition/numeric/NumericLessThanEquals.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericNotEquals.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericNotEquals.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericNotEquals.js +22 -0
- package/dist/cjs/condition/numeric/NumericNotEquals.js.map +1 -0
- package/dist/cjs/condition/numeric/numeric.d.ts +18 -0
- package/dist/cjs/condition/numeric/numeric.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/numeric.js +56 -0
- package/dist/cjs/condition/numeric/numeric.js.map +1 -0
- package/dist/cjs/condition/string/StringEquals.d.ts +3 -0
- package/dist/cjs/condition/string/StringEquals.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringEquals.js +35 -0
- package/dist/cjs/condition/string/StringEquals.js.map +1 -0
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.d.ts +3 -0
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.js +35 -0
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.js.map +1 -0
- package/dist/cjs/condition/string/StringLike.d.ts +3 -0
- package/dist/cjs/condition/string/StringLike.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringLike.js +35 -0
- package/dist/cjs/condition/string/StringLike.js.map +1 -0
- package/dist/cjs/condition/string/StringNotEquals.d.ts +3 -0
- package/dist/cjs/condition/string/StringNotEquals.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringNotEquals.js +35 -0
- package/dist/cjs/condition/string/StringNotEquals.js.map +1 -0
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.d.ts +3 -0
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.js +35 -0
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.js.map +1 -0
- package/dist/cjs/condition/string/StringNotLike.d.ts +3 -0
- package/dist/cjs/condition/string/StringNotLike.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringNotLike.js +35 -0
- package/dist/cjs/condition/string/StringNotLike.js.map +1 -0
- package/dist/cjs/context_keys/contextKeyTypes.d.ts +19 -0
- package/dist/cjs/context_keys/contextKeyTypes.d.ts.map +1 -0
- package/dist/cjs/context_keys/contextKeyTypes.js +27 -0
- package/dist/cjs/context_keys/contextKeyTypes.js.map +1 -0
- package/dist/cjs/context_keys/contextKeys.d.ts +24 -0
- package/dist/cjs/context_keys/contextKeys.d.ts.map +1 -0
- package/dist/cjs/context_keys/contextKeys.js +121 -0
- package/dist/cjs/context_keys/contextKeys.js.map +1 -0
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.d.ts +103 -0
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.d.ts.map +1 -0
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.js +153 -0
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.js.map +1 -0
- package/dist/cjs/context_keys/findContextKeys.d.ts +19 -0
- package/dist/cjs/context_keys/findContextKeys.d.ts.map +1 -0
- package/dist/cjs/context_keys/findContextKeys.js +58 -0
- package/dist/cjs/context_keys/findContextKeys.js.map +1 -0
- package/dist/cjs/core_engine/CoreSimulatorEngine.d.ts +134 -0
- package/dist/cjs/core_engine/CoreSimulatorEngine.d.ts.map +1 -0
- package/dist/cjs/core_engine/CoreSimulatorEngine.js +444 -0
- package/dist/cjs/core_engine/CoreSimulatorEngine.js.map +1 -0
- package/dist/cjs/evaluate.d.ts +199 -0
- package/dist/cjs/evaluate.d.ts.map +1 -0
- package/dist/cjs/evaluate.js +3 -0
- package/dist/cjs/evaluate.js.map +1 -0
- 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 +260 -0
- package/dist/cjs/explain/displayExplainCli.js.map +1 -0
- package/dist/cjs/explain/statementExplain.d.ts +161 -0
- package/dist/cjs/explain/statementExplain.d.ts.map +1 -0
- package/dist/cjs/explain/statementExplain.js +33 -0
- package/dist/cjs/explain/statementExplain.js.map +1 -0
- package/dist/cjs/global_conditions/globalConditionKeys.d.ts +3 -0
- package/dist/cjs/global_conditions/globalConditionKeys.d.ts.map +1 -0
- package/dist/cjs/global_conditions/globalConditionKeys.js +12 -0
- package/dist/cjs/global_conditions/globalConditionKeys.js.map +1 -0
- package/dist/cjs/index.d.ts +16 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/policyType.d.ts +13 -0
- package/dist/cjs/policyType.d.ts.map +1 -0
- package/dist/cjs/policyType.js +3 -0
- package/dist/cjs/policyType.js.map +1 -0
- package/dist/cjs/principal/principal.d.ts +61 -0
- package/dist/cjs/principal/principal.d.ts.map +1 -0
- package/dist/cjs/principal/principal.js +357 -0
- package/dist/cjs/principal/principal.js.map +1 -0
- package/dist/cjs/request/request.d.ts +66 -0
- package/dist/cjs/request/request.d.ts.map +1 -0
- package/dist/cjs/request/request.js +42 -0
- package/dist/cjs/request/request.js.map +1 -0
- package/dist/cjs/request/requestAction.d.ts +27 -0
- package/dist/cjs/request/requestAction.d.ts.map +1 -0
- package/dist/cjs/request/requestAction.js +20 -0
- package/dist/cjs/request/requestAction.js.map +1 -0
- package/dist/cjs/request/requestPrincipal.d.ts +92 -0
- package/dist/cjs/request/requestPrincipal.d.ts.map +1 -0
- package/dist/cjs/request/requestPrincipal.js +88 -0
- package/dist/cjs/request/requestPrincipal.js.map +1 -0
- package/dist/cjs/request/requestResource.d.ts +55 -0
- package/dist/cjs/request/requestResource.d.ts.map +1 -0
- package/dist/cjs/request/requestResource.js +40 -0
- package/dist/cjs/request/requestResource.js.map +1 -0
- package/dist/cjs/requestContext.d.ts +63 -0
- package/dist/cjs/requestContext.d.ts.map +1 -0
- package/dist/cjs/requestContext.js +46 -0
- package/dist/cjs/requestContext.js.map +1 -0
- package/dist/cjs/resource/resource.d.ts +54 -0
- package/dist/cjs/resource/resource.d.ts.map +1 -0
- package/dist/cjs/resource/resource.js +585 -0
- package/dist/cjs/resource/resource.js.map +1 -0
- package/dist/cjs/services/DefaultServiceAuthorizer.d.ts +182 -0
- package/dist/cjs/services/DefaultServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/DefaultServiceAuthorizer.js +625 -0
- package/dist/cjs/services/DefaultServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/IamServiceAuthorizer.d.ts +10 -0
- package/dist/cjs/services/IamServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/IamServiceAuthorizer.js +65 -0
- package/dist/cjs/services/IamServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/KmsServiceAuthorizer.d.ts +29 -0
- package/dist/cjs/services/KmsServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/KmsServiceAuthorizer.js +83 -0
- package/dist/cjs/services/KmsServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/ServiceAuthorizer.d.ts +27 -0
- package/dist/cjs/services/ServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/ServiceAuthorizer.js +3 -0
- package/dist/cjs/services/ServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/StsServiceAuthorizer.d.ts +19 -0
- package/dist/cjs/services/StsServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/StsServiceAuthorizer.js +45 -0
- package/dist/cjs/services/StsServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/s3/S3ServiceAuthorizer.d.ts +24 -0
- package/dist/cjs/services/s3/S3ServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/s3/S3ServiceAuthorizer.js +79 -0
- package/dist/cjs/services/s3/S3ServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/s3/s3BlockPublicAccess.d.ts +50 -0
- package/dist/cjs/services/s3/s3BlockPublicAccess.d.ts.map +1 -0
- package/dist/cjs/services/s3/s3BlockPublicAccess.js +301 -0
- package/dist/cjs/services/s3/s3BlockPublicAccess.js.map +1 -0
- package/dist/cjs/simulation_engine/contextKeys.d.ts +13 -0
- package/dist/cjs/simulation_engine/contextKeys.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/contextKeys.js +58 -0
- package/dist/cjs/simulation_engine/contextKeys.js.map +1 -0
- package/dist/cjs/simulation_engine/overallResult.d.ts +13 -0
- package/dist/cjs/simulation_engine/overallResult.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/overallResult.js +35 -0
- package/dist/cjs/simulation_engine/overallResult.js.map +1 -0
- package/dist/cjs/simulation_engine/policyResources.d.ts +44 -0
- package/dist/cjs/simulation_engine/policyResources.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/policyResources.js +120 -0
- package/dist/cjs/simulation_engine/policyResources.js.map +1 -0
- package/dist/cjs/simulation_engine/resourceTypes.d.ts +11 -0
- package/dist/cjs/simulation_engine/resourceTypes.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/resourceTypes.js +26 -0
- package/dist/cjs/simulation_engine/resourceTypes.js.map +1 -0
- package/dist/cjs/simulation_engine/simulation.d.ts +114 -0
- package/dist/cjs/simulation_engine/simulation.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/simulation.js +35 -0
- package/dist/cjs/simulation_engine/simulation.js.map +1 -0
- package/dist/cjs/simulation_engine/simulationEngine.d.ts +128 -0
- package/dist/cjs/simulation_engine/simulationEngine.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/simulationEngine.js +432 -0
- package/dist/cjs/simulation_engine/simulationEngine.js.map +1 -0
- package/dist/cjs/simulation_engine/simulationOptions.d.ts +21 -0
- package/dist/cjs/simulation_engine/simulationOptions.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/simulationOptions.js +3 -0
- package/dist/cjs/simulation_engine/simulationOptions.js.map +1 -0
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts +13 -0
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.js +62 -0
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.js.map +1 -0
- package/dist/cjs/util/resourceStrings.d.ts +19 -0
- package/dist/cjs/util/resourceStrings.d.ts.map +1 -0
- package/dist/cjs/util/resourceStrings.js +107 -0
- package/dist/cjs/util/resourceStrings.js.map +1 -0
- package/dist/cjs/util.d.ts +90 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +350 -0
- package/dist/cjs/util.js.map +1 -0
- package/dist/esm/StatementAnalysis.d.ts +63 -0
- package/dist/esm/StatementAnalysis.d.ts.map +1 -0
- package/dist/esm/StatementAnalysis.js +46 -0
- package/dist/esm/StatementAnalysis.js.map +1 -0
- package/dist/esm/action/action.d.ts +37 -0
- package/dist/esm/action/action.d.ts.map +1 -0
- package/dist/esm/action/action.js +100 -0
- package/dist/esm/action/action.js.map +1 -0
- package/dist/esm/analysis/allowedConditions.d.ts +61 -0
- package/dist/esm/analysis/allowedConditions.d.ts.map +1 -0
- package/dist/esm/analysis/allowedConditions.js +382 -0
- package/dist/esm/analysis/allowedConditions.js.map +1 -0
- package/dist/esm/analysis/analyzeResults.d.ts +99 -0
- package/dist/esm/analysis/analyzeResults.d.ts.map +1 -0
- package/dist/esm/analysis/analyzeResults.js +183 -0
- package/dist/esm/analysis/analyzeResults.js.map +1 -0
- package/dist/esm/condition/BaseConditionOperator.d.ts +13 -0
- package/dist/esm/condition/BaseConditionOperator.d.ts.map +1 -0
- package/dist/esm/condition/BaseConditionOperator.js +3 -0
- package/dist/esm/condition/BaseConditionOperator.js.map +1 -0
- package/dist/esm/condition/arn/ArnEquals.d.ts +3 -0
- package/dist/esm/condition/arn/ArnEquals.d.ts.map +1 -0
- package/dist/esm/condition/arn/ArnEquals.js +10 -0
- package/dist/esm/condition/arn/ArnEquals.js.map +1 -0
- package/dist/esm/condition/arn/ArnLike.d.ts +3 -0
- package/dist/esm/condition/arn/ArnLike.d.ts.map +1 -0
- package/dist/esm/condition/arn/ArnLike.js +16 -0
- package/dist/esm/condition/arn/ArnLike.js.map +1 -0
- package/dist/esm/condition/arn/ArnNotEquals.d.ts +3 -0
- package/dist/esm/condition/arn/ArnNotEquals.d.ts.map +1 -0
- package/dist/esm/condition/arn/ArnNotEquals.js +10 -0
- package/dist/esm/condition/arn/ArnNotEquals.js.map +1 -0
- package/dist/esm/condition/arn/ArnNotLike.d.ts +3 -0
- package/dist/esm/condition/arn/ArnNotLike.d.ts.map +1 -0
- package/dist/esm/condition/arn/ArnNotLike.js +16 -0
- package/dist/esm/condition/arn/ArnNotLike.js.map +1 -0
- 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 +70 -0
- package/dist/esm/condition/arn/arn.js.map +1 -0
- package/dist/esm/condition/binary/BinaryEquals.d.ts +7 -0
- package/dist/esm/condition/binary/BinaryEquals.d.ts.map +1 -0
- package/dist/esm/condition/binary/BinaryEquals.js +27 -0
- package/dist/esm/condition/binary/BinaryEquals.js.map +1 -0
- package/dist/esm/condition/boolean/Bool.d.ts +3 -0
- package/dist/esm/condition/boolean/Bool.d.ts.map +1 -0
- package/dist/esm/condition/boolean/Bool.js +53 -0
- package/dist/esm/condition/boolean/Bool.js.map +1 -0
- package/dist/esm/condition/condition.d.ts +26 -0
- package/dist/esm/condition/condition.d.ts.map +1 -0
- package/dist/esm/condition/condition.js +666 -0
- package/dist/esm/condition/condition.js.map +1 -0
- 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 +17 -0
- package/dist/esm/condition/conditionUtil.js.map +1 -0
- package/dist/esm/condition/date/DateEquals.d.ts +3 -0
- package/dist/esm/condition/date/DateEquals.d.ts.map +1 -0
- package/dist/esm/condition/date/DateEquals.js +20 -0
- package/dist/esm/condition/date/DateEquals.js.map +1 -0
- package/dist/esm/condition/date/DateGreaterThan.d.ts +3 -0
- package/dist/esm/condition/date/DateGreaterThan.d.ts.map +1 -0
- package/dist/esm/condition/date/DateGreaterThan.js +20 -0
- package/dist/esm/condition/date/DateGreaterThan.js.map +1 -0
- package/dist/esm/condition/date/DateGreaterThanEquals.d.ts +3 -0
- package/dist/esm/condition/date/DateGreaterThanEquals.d.ts.map +1 -0
- package/dist/esm/condition/date/DateGreaterThanEquals.js +20 -0
- package/dist/esm/condition/date/DateGreaterThanEquals.js.map +1 -0
- package/dist/esm/condition/date/DateLessThan.d.ts +3 -0
- package/dist/esm/condition/date/DateLessThan.d.ts.map +1 -0
- package/dist/esm/condition/date/DateLessThan.js +20 -0
- package/dist/esm/condition/date/DateLessThan.js.map +1 -0
- package/dist/esm/condition/date/DateLessThanEquals.d.ts +3 -0
- package/dist/esm/condition/date/DateLessThanEquals.d.ts.map +1 -0
- package/dist/esm/condition/date/DateLessThanEquals.js +20 -0
- package/dist/esm/condition/date/DateLessThanEquals.js.map +1 -0
- package/dist/esm/condition/date/DateNotEquals.d.ts +3 -0
- package/dist/esm/condition/date/DateNotEquals.d.ts.map +1 -0
- package/dist/esm/condition/date/DateNotEquals.js +20 -0
- package/dist/esm/condition/date/DateNotEquals.js.map +1 -0
- package/dist/esm/condition/date/date.d.ts +18 -0
- package/dist/esm/condition/date/date.d.ts.map +1 -0
- package/dist/esm/condition/date/date.js +54 -0
- package/dist/esm/condition/date/date.js.map +1 -0
- package/dist/esm/condition/ipaddress/IpAddress.d.ts +3 -0
- package/dist/esm/condition/ipaddress/IpAddress.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/IpAddress.js +18 -0
- package/dist/esm/condition/ipaddress/IpAddress.js.map +1 -0
- package/dist/esm/condition/ipaddress/NotIpAddress.d.ts +3 -0
- package/dist/esm/condition/ipaddress/NotIpAddress.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/NotIpAddress.js +18 -0
- package/dist/esm/condition/ipaddress/NotIpAddress.js.map +1 -0
- package/dist/esm/condition/ipaddress/ip.d.ts +11 -0
- package/dist/esm/condition/ipaddress/ip.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/ip.js +68 -0
- package/dist/esm/condition/ipaddress/ip.js.map +1 -0
- package/dist/esm/condition/ipaddress/ipv4.d.ts +24 -0
- package/dist/esm/condition/ipaddress/ipv4.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/ipv4.js +54 -0
- package/dist/esm/condition/ipaddress/ipv4.js.map +1 -0
- package/dist/esm/condition/ipaddress/ipv6.d.ts +24 -0
- package/dist/esm/condition/ipaddress/ipv6.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/ipv6.js +106 -0
- package/dist/esm/condition/ipaddress/ipv6.js.map +1 -0
- package/dist/esm/condition/numeric/NumericEquals.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericEquals.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericEquals.js +20 -0
- package/dist/esm/condition/numeric/NumericEquals.js.map +1 -0
- package/dist/esm/condition/numeric/NumericGreaterThan.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericGreaterThan.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericGreaterThan.js +20 -0
- package/dist/esm/condition/numeric/NumericGreaterThan.js.map +1 -0
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.js +20 -0
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.js.map +1 -0
- package/dist/esm/condition/numeric/NumericLessThan.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericLessThan.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericLessThan.js +20 -0
- package/dist/esm/condition/numeric/NumericLessThan.js.map +1 -0
- package/dist/esm/condition/numeric/NumericLessThanEquals.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericLessThanEquals.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericLessThanEquals.js +20 -0
- package/dist/esm/condition/numeric/NumericLessThanEquals.js.map +1 -0
- package/dist/esm/condition/numeric/NumericNotEquals.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericNotEquals.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericNotEquals.js +20 -0
- package/dist/esm/condition/numeric/NumericNotEquals.js.map +1 -0
- package/dist/esm/condition/numeric/numeric.d.ts +18 -0
- package/dist/esm/condition/numeric/numeric.d.ts.map +1 -0
- package/dist/esm/condition/numeric/numeric.js +53 -0
- package/dist/esm/condition/numeric/numeric.js.map +1 -0
- package/dist/esm/condition/string/StringEquals.d.ts +3 -0
- package/dist/esm/condition/string/StringEquals.d.ts.map +1 -0
- package/dist/esm/condition/string/StringEquals.js +34 -0
- package/dist/esm/condition/string/StringEquals.js.map +1 -0
- package/dist/esm/condition/string/StringEqualsIgnoreCase.d.ts +3 -0
- package/dist/esm/condition/string/StringEqualsIgnoreCase.d.ts.map +1 -0
- package/dist/esm/condition/string/StringEqualsIgnoreCase.js +34 -0
- package/dist/esm/condition/string/StringEqualsIgnoreCase.js.map +1 -0
- package/dist/esm/condition/string/StringLike.d.ts +3 -0
- package/dist/esm/condition/string/StringLike.d.ts.map +1 -0
- package/dist/esm/condition/string/StringLike.js +34 -0
- package/dist/esm/condition/string/StringLike.js.map +1 -0
- package/dist/esm/condition/string/StringNotEquals.d.ts +3 -0
- package/dist/esm/condition/string/StringNotEquals.d.ts.map +1 -0
- package/dist/esm/condition/string/StringNotEquals.js +34 -0
- package/dist/esm/condition/string/StringNotEquals.js.map +1 -0
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.d.ts +3 -0
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.d.ts.map +1 -0
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.js +34 -0
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.js.map +1 -0
- package/dist/esm/condition/string/StringNotLike.d.ts +3 -0
- package/dist/esm/condition/string/StringNotLike.d.ts.map +1 -0
- package/dist/esm/condition/string/StringNotLike.js +34 -0
- package/dist/esm/condition/string/StringNotLike.js.map +1 -0
- package/dist/esm/context_keys/contextKeyTypes.d.ts +19 -0
- package/dist/esm/context_keys/contextKeyTypes.d.ts.map +1 -0
- package/dist/esm/context_keys/contextKeyTypes.js +23 -0
- package/dist/esm/context_keys/contextKeyTypes.js.map +1 -0
- package/dist/esm/context_keys/contextKeys.d.ts +24 -0
- package/dist/esm/context_keys/contextKeys.d.ts.map +1 -0
- package/dist/esm/context_keys/contextKeys.js +117 -0
- package/dist/esm/context_keys/contextKeys.js.map +1 -0
- package/dist/esm/context_keys/discoveryContextKeyConstraints.d.ts +103 -0
- package/dist/esm/context_keys/discoveryContextKeyConstraints.d.ts.map +1 -0
- package/dist/esm/context_keys/discoveryContextKeyConstraints.js +149 -0
- package/dist/esm/context_keys/discoveryContextKeyConstraints.js.map +1 -0
- package/dist/esm/context_keys/findContextKeys.d.ts +19 -0
- package/dist/esm/context_keys/findContextKeys.d.ts.map +1 -0
- package/dist/esm/context_keys/findContextKeys.js +55 -0
- package/dist/esm/context_keys/findContextKeys.js.map +1 -0
- package/dist/esm/core_engine/CoreSimulatorEngine.d.ts +134 -0
- package/dist/esm/core_engine/CoreSimulatorEngine.d.ts.map +1 -0
- package/dist/esm/core_engine/CoreSimulatorEngine.js +441 -0
- package/dist/esm/core_engine/CoreSimulatorEngine.js.map +1 -0
- package/dist/esm/evaluate.d.ts +199 -0
- package/dist/esm/evaluate.d.ts.map +1 -0
- package/dist/esm/evaluate.js +2 -0
- package/dist/esm/evaluate.js.map +1 -0
- 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 +258 -0
- package/dist/esm/explain/displayExplainCli.js.map +1 -0
- package/dist/esm/explain/statementExplain.d.ts +161 -0
- package/dist/esm/explain/statementExplain.d.ts.map +1 -0
- package/dist/esm/explain/statementExplain.js +30 -0
- package/dist/esm/explain/statementExplain.js.map +1 -0
- package/dist/esm/global_conditions/globalConditionKeys.d.ts +3 -0
- package/dist/esm/global_conditions/globalConditionKeys.d.ts.map +1 -0
- package/dist/esm/global_conditions/globalConditionKeys.js +9 -0
- package/dist/esm/global_conditions/globalConditionKeys.js.map +1 -0
- package/dist/esm/index.d.ts +16 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/policyType.d.ts +13 -0
- package/dist/esm/policyType.d.ts.map +1 -0
- package/dist/esm/policyType.js +2 -0
- package/dist/esm/policyType.js.map +1 -0
- package/dist/esm/principal/principal.d.ts +61 -0
- package/dist/esm/principal/principal.d.ts.map +1 -0
- package/dist/esm/principal/principal.js +354 -0
- package/dist/esm/principal/principal.js.map +1 -0
- package/dist/esm/request/request.d.ts +66 -0
- package/dist/esm/request/request.d.ts.map +1 -0
- package/dist/esm/request/request.js +34 -0
- package/dist/esm/request/request.js.map +1 -0
- package/dist/esm/request/requestAction.d.ts +27 -0
- package/dist/esm/request/requestAction.d.ts.map +1 -0
- package/dist/esm/request/requestAction.js +15 -0
- package/dist/esm/request/requestAction.js.map +1 -0
- package/dist/esm/request/requestPrincipal.d.ts +92 -0
- package/dist/esm/request/requestPrincipal.d.ts.map +1 -0
- package/dist/esm/request/requestPrincipal.js +80 -0
- package/dist/esm/request/requestPrincipal.js.map +1 -0
- package/dist/esm/request/requestResource.d.ts +55 -0
- package/dist/esm/request/requestResource.d.ts.map +1 -0
- package/dist/esm/request/requestResource.js +34 -0
- package/dist/esm/request/requestResource.js.map +1 -0
- package/dist/esm/requestContext.d.ts +63 -0
- package/dist/esm/requestContext.d.ts.map +1 -0
- package/dist/esm/requestContext.js +39 -0
- package/dist/esm/requestContext.js.map +1 -0
- package/dist/esm/resource/resource.d.ts +54 -0
- package/dist/esm/resource/resource.d.ts.map +1 -0
- package/dist/esm/resource/resource.js +582 -0
- package/dist/esm/resource/resource.js.map +1 -0
- package/dist/esm/services/DefaultServiceAuthorizer.d.ts +182 -0
- package/dist/esm/services/DefaultServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/DefaultServiceAuthorizer.js +623 -0
- package/dist/esm/services/DefaultServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/IamServiceAuthorizer.d.ts +10 -0
- package/dist/esm/services/IamServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/IamServiceAuthorizer.js +63 -0
- package/dist/esm/services/IamServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/KmsServiceAuthorizer.d.ts +29 -0
- package/dist/esm/services/KmsServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/KmsServiceAuthorizer.js +82 -0
- package/dist/esm/services/KmsServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/ServiceAuthorizer.d.ts +27 -0
- package/dist/esm/services/ServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/ServiceAuthorizer.js +5 -0
- package/dist/esm/services/ServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/StsServiceAuthorizer.d.ts +19 -0
- package/dist/esm/services/StsServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/StsServiceAuthorizer.js +44 -0
- package/dist/esm/services/StsServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/s3/S3ServiceAuthorizer.d.ts +24 -0
- package/dist/esm/services/s3/S3ServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/s3/S3ServiceAuthorizer.js +76 -0
- package/dist/esm/services/s3/S3ServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/s3/s3BlockPublicAccess.d.ts +50 -0
- package/dist/esm/services/s3/s3BlockPublicAccess.d.ts.map +1 -0
- package/dist/esm/services/s3/s3BlockPublicAccess.js +299 -0
- package/dist/esm/services/s3/s3BlockPublicAccess.js.map +1 -0
- package/dist/esm/simulation_engine/contextKeys.d.ts +13 -0
- package/dist/esm/simulation_engine/contextKeys.d.ts.map +1 -0
- package/dist/esm/simulation_engine/contextKeys.js +55 -0
- package/dist/esm/simulation_engine/contextKeys.js.map +1 -0
- package/dist/esm/simulation_engine/overallResult.d.ts +13 -0
- package/dist/esm/simulation_engine/overallResult.d.ts.map +1 -0
- package/dist/esm/simulation_engine/overallResult.js +32 -0
- package/dist/esm/simulation_engine/overallResult.js.map +1 -0
- package/dist/esm/simulation_engine/policyResources.d.ts +44 -0
- package/dist/esm/simulation_engine/policyResources.d.ts.map +1 -0
- package/dist/esm/simulation_engine/policyResources.js +117 -0
- package/dist/esm/simulation_engine/policyResources.js.map +1 -0
- package/dist/esm/simulation_engine/resourceTypes.d.ts +11 -0
- package/dist/esm/simulation_engine/resourceTypes.d.ts.map +1 -0
- package/dist/esm/simulation_engine/resourceTypes.js +23 -0
- package/dist/esm/simulation_engine/resourceTypes.js.map +1 -0
- package/dist/esm/simulation_engine/simulation.d.ts +114 -0
- package/dist/esm/simulation_engine/simulation.d.ts.map +1 -0
- package/dist/esm/simulation_engine/simulation.js +30 -0
- package/dist/esm/simulation_engine/simulation.js.map +1 -0
- package/dist/esm/simulation_engine/simulationEngine.d.ts +128 -0
- package/dist/esm/simulation_engine/simulationEngine.d.ts.map +1 -0
- package/dist/esm/simulation_engine/simulationEngine.js +430 -0
- package/dist/esm/simulation_engine/simulationEngine.js.map +1 -0
- package/dist/esm/simulation_engine/simulationOptions.d.ts +21 -0
- package/dist/esm/simulation_engine/simulationOptions.d.ts.map +1 -0
- package/dist/esm/simulation_engine/simulationOptions.js +3 -0
- package/dist/esm/simulation_engine/simulationOptions.js.map +1 -0
- package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts +13 -0
- package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -0
- package/dist/esm/simulation_engine/unsafeSimulationEngine.js +62 -0
- package/dist/esm/simulation_engine/unsafeSimulationEngine.js.map +1 -0
- package/dist/esm/util/resourceStrings.d.ts +19 -0
- package/dist/esm/util/resourceStrings.d.ts.map +1 -0
- package/dist/esm/util/resourceStrings.js +103 -0
- package/dist/esm/util/resourceStrings.js.map +1 -0
- package/dist/esm/util.d.ts +90 -0
- package/dist/esm/util.d.ts.map +1 -0
- package/dist/esm/util.js +341 -0
- package/dist/esm/util.js.map +1 -0
- package/package.json +119 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {} from '@actsecurity/iam-policy';
|
|
2
|
+
import {} from './condition/condition.js';
|
|
3
|
+
import {} from './explain/statementExplain.js';
|
|
4
|
+
import {} from './principal/principal.js';
|
|
5
|
+
/**
|
|
6
|
+
* Checks if a statement is an identity statement that allows the request.
|
|
7
|
+
*
|
|
8
|
+
* @param statement The statement to check.
|
|
9
|
+
* @returns Whether the statement is an identity statement that allows the request.
|
|
10
|
+
*/
|
|
11
|
+
export function identityStatementAllows(statement) {
|
|
12
|
+
if (statement.resourceMatch &&
|
|
13
|
+
statement.actionMatch &&
|
|
14
|
+
statement.conditionMatch === 'Match' &&
|
|
15
|
+
statement.statement.effect() === 'Allow') {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
export function identityStatementExplicitDeny(statement) {
|
|
21
|
+
if (statement.resourceMatch &&
|
|
22
|
+
statement.actionMatch &&
|
|
23
|
+
statement.conditionMatch === 'Match' &&
|
|
24
|
+
statement.statement.effect() === 'Deny') {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
export function statementMatches(analysis) {
|
|
30
|
+
return (analysis.resourceMatch &&
|
|
31
|
+
analysis.actionMatch &&
|
|
32
|
+
analysis.conditionMatch === 'Match' &&
|
|
33
|
+
['Match', 'AccountLevelMatch', 'SessionRoleMatch', 'SessionUserMatch'].includes(analysis.principalMatch));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Determines whether ignored conditions are decisive for a statement and should be reported.
|
|
37
|
+
*
|
|
38
|
+
* @param analysis the analysis of the statement
|
|
39
|
+
* @returns true if the ignored conditions are decisive, false otherwise
|
|
40
|
+
*/
|
|
41
|
+
export function reportIgnoredConditions(analysis) {
|
|
42
|
+
return (analysis.resourceMatch &&
|
|
43
|
+
analysis.actionMatch &&
|
|
44
|
+
['Match', 'AccountLevelMatch', 'SessionRoleMatch', 'SessionUserMatch'].includes(analysis.principalMatch));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=StatementAnalysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementAnalysis.js","sourceRoot":"","sources":["../../src/StatementAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,MAAM,yBAAyB,CAAA;AACxE,OAAO,EAA6B,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAyB,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAA6B,MAAM,0BAA0B,CAAA;AAqDpE;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAA4B;IAClE,IACE,SAAS,CAAC,aAAa;QACvB,SAAS,CAAC,WAAW;QACrB,SAAS,CAAC,cAAc,KAAK,OAAO;QACpC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,OAAO,EACxC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,SAA4B;IACxE,IACE,SAAS,CAAC,aAAa;QACvB,SAAS,CAAC,WAAW;QACrB,SAAS,CAAC,cAAc,KAAK,OAAO;QACpC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,MAAM,EACvC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAGC;IAED,OAAO,CACL,QAAQ,CAAC,aAAa;QACtB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,cAAc,KAAK,OAAO;QACnC,CAAC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAC7E,QAAQ,CAAC,cAAc,CACxB,CACF,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAqF;IAErF,OAAO,CACL,QAAQ,CAAC,aAAa;QACtB,QAAQ,CAAC,WAAW;QACpB,CAAC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAC7E,QAAQ,CAAC,cAAc,CACxB,CACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type Action, type Statement } from '@actsecurity/iam-policy';
|
|
2
|
+
import { type ActionExplain, type StatementExplain } from '../explain/statementExplain.js';
|
|
3
|
+
import { type AwsRequest } from '../request/request.js';
|
|
4
|
+
/**
|
|
5
|
+
* Check if a request matches the Action or NotAction elements of a statement.
|
|
6
|
+
*
|
|
7
|
+
* @param request the request to check
|
|
8
|
+
* @param statement the statement to check against
|
|
9
|
+
* @returns true if the request matches the Action or NotAction in the statement, false otherwise
|
|
10
|
+
*/
|
|
11
|
+
export declare function requestMatchesStatementActions(request: AwsRequest, statement: Statement): {
|
|
12
|
+
matches: boolean;
|
|
13
|
+
details: Pick<StatementExplain, 'actions' | 'notActions'>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Check if a request matches a set of actions.
|
|
17
|
+
*
|
|
18
|
+
* @param request the request to check
|
|
19
|
+
* @param actions the actions to check against
|
|
20
|
+
* @returns true if the request matches any of the actions, false otherwise
|
|
21
|
+
*/
|
|
22
|
+
export declare function requestMatchesActions(request: AwsRequest, actions: Action[]): {
|
|
23
|
+
matches: boolean;
|
|
24
|
+
explains: ActionExplain[];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Check if a request does not match a set of actions.
|
|
28
|
+
*
|
|
29
|
+
* @param request the request to check
|
|
30
|
+
* @param actions the actions to check against
|
|
31
|
+
* @returns true if the request does not match any of the actions, false if the request matches any of the actions
|
|
32
|
+
*/
|
|
33
|
+
export declare function requestMatchesNotActions(request: AwsRequest, actions: Action[]): {
|
|
34
|
+
matches: boolean;
|
|
35
|
+
explains: ActionExplain[];
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/action/action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAC1F,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAIvD;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,SAAS,GACnB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,YAAY,CAAC,CAAA;CAAE,CAejF;AAgBD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,MAAM,EAAE,GAChB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAIjD;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,MAAM,EAAE,GAChB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CASjD"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import {} from '@actsecurity/iam-policy';
|
|
2
|
+
import {} from '../explain/statementExplain.js';
|
|
3
|
+
import {} from '../request/request.js';
|
|
4
|
+
const whitespaceRegex = /\s/;
|
|
5
|
+
/**
|
|
6
|
+
* Check if a request matches the Action or NotAction elements of a statement.
|
|
7
|
+
*
|
|
8
|
+
* @param request the request to check
|
|
9
|
+
* @param statement the statement to check against
|
|
10
|
+
* @returns true if the request matches the Action or NotAction in the statement, false otherwise
|
|
11
|
+
*/
|
|
12
|
+
export function requestMatchesStatementActions(request, statement) {
|
|
13
|
+
if (statement.isActionStatement()) {
|
|
14
|
+
const { matches, explains } = requestMatchesActions(request, statement.actions());
|
|
15
|
+
if (!statement.actionIsArray()) {
|
|
16
|
+
return { matches, details: { actions: explains[0] } };
|
|
17
|
+
}
|
|
18
|
+
return { matches, details: { actions: explains } };
|
|
19
|
+
}
|
|
20
|
+
else if (statement.isNotActionStatement()) {
|
|
21
|
+
const { matches, explains } = requestMatchesNotActions(request, statement.notActions());
|
|
22
|
+
if (!statement.notActionIsArray()) {
|
|
23
|
+
return { matches, details: { notActions: explains[0] } };
|
|
24
|
+
}
|
|
25
|
+
return { matches, details: { notActions: explains } };
|
|
26
|
+
}
|
|
27
|
+
throw new Error('Statement has neither Actions nor NotActions');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Convert an action action (the part after the colon) to a regular expression.
|
|
31
|
+
*
|
|
32
|
+
* @param action the action to convert to a regular expression
|
|
33
|
+
* @returns a regular that replaces any wildcards in the action with the appropriate regular expression.
|
|
34
|
+
*/
|
|
35
|
+
function convertActionToRegex(action) {
|
|
36
|
+
if (action.indexOf(':') != -1) {
|
|
37
|
+
throw new Error('Action should not contain a colon');
|
|
38
|
+
}
|
|
39
|
+
const pattern = '^' + action.replace(/\?/g, '.').replace(/\*/g, '.*?') + '$';
|
|
40
|
+
return new RegExp(pattern, 'i');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if a request matches a set of actions.
|
|
44
|
+
*
|
|
45
|
+
* @param request the request to check
|
|
46
|
+
* @param actions the actions to check against
|
|
47
|
+
* @returns true if the request matches any of the actions, false otherwise
|
|
48
|
+
*/
|
|
49
|
+
export function requestMatchesActions(request, actions) {
|
|
50
|
+
const explains = actions.map((action) => requestMatchesSingleAction(request, action));
|
|
51
|
+
const matches = explains.some((explain) => explain.matches);
|
|
52
|
+
return { matches, explains };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if a request does not match a set of actions.
|
|
56
|
+
*
|
|
57
|
+
* @param request the request to check
|
|
58
|
+
* @param actions the actions to check against
|
|
59
|
+
* @returns true if the request does not match any of the actions, false if the request matches any of the actions
|
|
60
|
+
*/
|
|
61
|
+
export function requestMatchesNotActions(request, actions) {
|
|
62
|
+
const explains = actions.map((action) => {
|
|
63
|
+
const explain = requestMatchesSingleAction(request, action);
|
|
64
|
+
explain.matches = !explain.matches;
|
|
65
|
+
return explain;
|
|
66
|
+
});
|
|
67
|
+
const matches = !explains.some((explain) => !explain.matches);
|
|
68
|
+
return { matches, explains };
|
|
69
|
+
}
|
|
70
|
+
function requestMatchesSingleAction(request, action) {
|
|
71
|
+
if (action.isWildcardAction()) {
|
|
72
|
+
return {
|
|
73
|
+
action: action.value(),
|
|
74
|
+
matches: true
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
else if (action.isServiceAction()) {
|
|
78
|
+
const actionPart = action.action();
|
|
79
|
+
if (actionPart.length === 0 || whitespaceRegex.test(actionPart)) {
|
|
80
|
+
return {
|
|
81
|
+
action: action.value(),
|
|
82
|
+
matches: false
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (request.action.service() != action.service()) {
|
|
86
|
+
return {
|
|
87
|
+
action: action.value(),
|
|
88
|
+
matches: false
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const actionRegex = convertActionToRegex(actionPart);
|
|
92
|
+
const matches = actionRegex.test(request.action.action());
|
|
93
|
+
return {
|
|
94
|
+
action: action.value(),
|
|
95
|
+
matches
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
throw new Error('Unknown action type');
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/action/action.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAA6C,MAAM,gCAAgC,CAAA;AAC1F,OAAO,EAAmB,MAAM,uBAAuB,CAAA;AAEvD,MAAM,eAAe,GAAG,IAAI,CAAA;AAE5B;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAAmB,EACnB,SAAoB;IAEpB,IAAI,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAClC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;QACjF,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;YAC/B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QACvD,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAA;IACpD,CAAC;SAAM,IAAI,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;QAC5C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,wBAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAA;QACvF,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QAC1D,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAA;IACvD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;AACjE,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,MAAc;IAC1C,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA;IAC5E,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAmB,EACnB,OAAiB;IAEjB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;IACrF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAmB,EACnB,OAAiB;IAEjB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC3D,OAAO,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAA;QAClC,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;AAC9B,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAmB,EAAE,MAAc;IACrE,IAAI,MAAM,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAC9B,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE;YACtB,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;QAClC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAChE,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE;gBACtB,OAAO,EAAE,KAAK;aACf,CAAA;QACH,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE;gBACtB,OAAO,EAAE,KAAK;aACf,CAAA;QACH,CAAC;QACD,MAAM,WAAW,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAA;QACpD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QACzD,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE;YACtB,OAAO;SACR,CAAA;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;AACxC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type Condition } from '@actsecurity/iam-policy';
|
|
2
|
+
import { type AllowedConditionExpression, type AllowedConditionSource, type IdentityAnalysis, type RcpAnalysis, type ResourceAnalysis, type ScpAnalysis } from '../evaluate.js';
|
|
3
|
+
import { type StatementAnalysis } from '../StatementAnalysis.js';
|
|
4
|
+
/**
|
|
5
|
+
* Convert a statement's ignored allow-side conditions to an expression.
|
|
6
|
+
*
|
|
7
|
+
* @param statement the statement analysis to convert
|
|
8
|
+
* @param policyType the policy family containing the statement
|
|
9
|
+
* @param orgIdentifier the organization identifier for control-policy statements
|
|
10
|
+
* @returns an expression for the statement's ignored conditions
|
|
11
|
+
*/
|
|
12
|
+
export declare function allowStatementExpression(statement: StatementAnalysis, policyType: AllowedConditionSource['policyType'], orgIdentifier?: string): AllowedConditionExpression;
|
|
13
|
+
/**
|
|
14
|
+
* Convert a statement's ignored deny-side conditions to an expression that avoids the deny.
|
|
15
|
+
*
|
|
16
|
+
* @param statement the statement analysis to convert
|
|
17
|
+
* @param policyType the policy family containing the statement
|
|
18
|
+
* @param orgIdentifier the organization identifier for control-policy statements
|
|
19
|
+
* @returns an expression that must hold to avoid the deny
|
|
20
|
+
*/
|
|
21
|
+
export declare function denyStatementEscapeExpression(statement: StatementAnalysis, policyType: AllowedConditionSource['policyType'], orgIdentifier?: string): AllowedConditionExpression;
|
|
22
|
+
/**
|
|
23
|
+
* Invert a single IAM condition into an allowed-condition expression.
|
|
24
|
+
*
|
|
25
|
+
* @param condition the condition to invert
|
|
26
|
+
* @param source source metadata for the condition
|
|
27
|
+
* @returns the expression that satisfies the logical complement of the condition
|
|
28
|
+
*/
|
|
29
|
+
export declare function invertCondition(condition: Condition, source: AllowedConditionSource): AllowedConditionExpression;
|
|
30
|
+
/**
|
|
31
|
+
* Combine condition expressions with AND semantics and simplify identity/absorbing values.
|
|
32
|
+
*
|
|
33
|
+
* @param expressions the expressions to combine
|
|
34
|
+
* @returns a simplified expression
|
|
35
|
+
*/
|
|
36
|
+
export declare function and(expressions: AllowedConditionExpression[]): AllowedConditionExpression;
|
|
37
|
+
/**
|
|
38
|
+
* Combine condition expressions with OR semantics and simplify identity/absorbing values.
|
|
39
|
+
*
|
|
40
|
+
* @param expressions the expressions to combine
|
|
41
|
+
* @returns a simplified expression
|
|
42
|
+
*/
|
|
43
|
+
export declare function or(expressions: AllowedConditionExpression[]): AllowedConditionExpression;
|
|
44
|
+
export declare function allowedConditionOutput(expression: AllowedConditionExpression, simulationMode: string, result: string): AllowedConditionExpression | undefined;
|
|
45
|
+
export declare function sessionPolicyExpression(analysis: IdentityAnalysis | undefined, sessionPolicyPresent: boolean): AllowedConditionExpression;
|
|
46
|
+
export declare function identityPolicyExpression(analysis: IdentityAnalysis | undefined): AllowedConditionExpression;
|
|
47
|
+
export declare function permissionBoundaryExpression(analysis: IdentityAnalysis | undefined): AllowedConditionExpression;
|
|
48
|
+
export declare function endpointPolicyExpression(analysis: IdentityAnalysis | undefined): AllowedConditionExpression;
|
|
49
|
+
export declare function resourceAllowStatementsExpression(statements: StatementAnalysis[]): AllowedConditionExpression;
|
|
50
|
+
export declare function allDenyEscapeExpressions(input: {
|
|
51
|
+
sessionAnalysis?: IdentityAnalysis;
|
|
52
|
+
scpAnalysis?: ScpAnalysis;
|
|
53
|
+
rcpAnalysis?: RcpAnalysis;
|
|
54
|
+
identityAnalysis?: IdentityAnalysis;
|
|
55
|
+
resourceAnalysis?: ResourceAnalysis;
|
|
56
|
+
permissionBoundaryAnalysis?: IdentityAnalysis;
|
|
57
|
+
endpointAnalysis?: IdentityAnalysis;
|
|
58
|
+
}): AllowedConditionExpression[];
|
|
59
|
+
export declare function always(): AllowedConditionExpression;
|
|
60
|
+
export declare function never(reason: 'explicitDenyWithoutConditions' | 'noApplicableAllow'): AllowedConditionExpression;
|
|
61
|
+
//# sourceMappingURL=allowedConditions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allowedConditions.d.ts","sourceRoot":"","sources":["../../../src/analysis/allowedConditions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EACL,KAAK,0BAA0B,EAE/B,KAAK,sBAAsB,EAE3B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,iBAAiB,EAC5B,UAAU,EAAE,sBAAsB,CAAC,YAAY,CAAC,EAChD,aAAa,CAAC,EAAE,MAAM,GACrB,0BAA0B,CAE5B;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,iBAAiB,EAC5B,UAAU,EAAE,sBAAsB,CAAC,YAAY,CAAC,EAChD,aAAa,CAAC,EAAE,MAAM,GACrB,0BAA0B,CAO5B;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,sBAAsB,GAC7B,0BAA0B,CAK5B;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,WAAW,EAAE,0BAA0B,EAAE,GAAG,0BAA0B,CAmBzF;AAED;;;;;GAKG;AACH,wBAAgB,EAAE,CAAC,WAAW,EAAE,0BAA0B,EAAE,GAAG,0BAA0B,CAmBxF;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,0BAA0B,EACtC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,0BAA0B,GAAG,SAAS,CAKxC;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,oBAAoB,EAAE,OAAO,GAC5B,0BAA0B,CAE5B;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC,0BAA0B,CAE5B;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC,0BAA0B,CAE5B;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC,0BAA0B,CAE5B;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,iBAAiB,EAAE,GAC9B,0BAA0B,CAE5B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,eAAe,CAAC,EAAE,gBAAgB,CAAA;IAClC,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,0BAA0B,CAAC,EAAE,gBAAgB,CAAA;IAC7C,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CACpC,GAAG,0BAA0B,EAAE,CAU/B;AA+VD,wBAAgB,MAAM,IAAI,0BAA0B,CAEnD;AAED,wBAAgB,KAAK,CACnB,MAAM,EAAE,+BAA+B,GAAG,mBAAmB,GAC5D,0BAA0B,CAE5B"}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import {} from '@actsecurity/iam-policy';
|
|
2
|
+
import {} from '../evaluate.js';
|
|
3
|
+
import {} from '../StatementAnalysis.js';
|
|
4
|
+
/**
|
|
5
|
+
* Convert a statement's ignored allow-side conditions to an expression.
|
|
6
|
+
*
|
|
7
|
+
* @param statement the statement analysis to convert
|
|
8
|
+
* @param policyType the policy family containing the statement
|
|
9
|
+
* @param orgIdentifier the organization identifier for control-policy statements
|
|
10
|
+
* @returns an expression for the statement's ignored conditions
|
|
11
|
+
*/
|
|
12
|
+
export function allowStatementExpression(statement, policyType, orgIdentifier) {
|
|
13
|
+
return statementConditionExpression(statement, policyType, false, orgIdentifier);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Convert a statement's ignored deny-side conditions to an expression that avoids the deny.
|
|
17
|
+
*
|
|
18
|
+
* @param statement the statement analysis to convert
|
|
19
|
+
* @param policyType the policy family containing the statement
|
|
20
|
+
* @param orgIdentifier the organization identifier for control-policy statements
|
|
21
|
+
* @returns an expression that must hold to avoid the deny
|
|
22
|
+
*/
|
|
23
|
+
export function denyStatementEscapeExpression(statement, policyType, orgIdentifier) {
|
|
24
|
+
if (!statement.ignoredConditions || statement.ignoredConditions.length === 0) {
|
|
25
|
+
return never('explicitDenyWithoutConditions');
|
|
26
|
+
}
|
|
27
|
+
const source = sourceForStatement(statement, policyType, orgIdentifier);
|
|
28
|
+
return or(statement.ignoredConditions.map((condition) => invertCondition(condition, source)));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Invert a single IAM condition into an allowed-condition expression.
|
|
32
|
+
*
|
|
33
|
+
* @param condition the condition to invert
|
|
34
|
+
* @param source source metadata for the condition
|
|
35
|
+
* @returns the expression that satisfies the logical complement of the condition
|
|
36
|
+
*/
|
|
37
|
+
export function invertCondition(condition, source) {
|
|
38
|
+
const op = condition.operation().value();
|
|
39
|
+
const key = condition.conditionKey();
|
|
40
|
+
const values = condition.conditionValues();
|
|
41
|
+
return invertConditionParts(op, key, values, source);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Combine condition expressions with AND semantics and simplify identity/absorbing values.
|
|
45
|
+
*
|
|
46
|
+
* @param expressions the expressions to combine
|
|
47
|
+
* @returns a simplified expression
|
|
48
|
+
*/
|
|
49
|
+
export function and(expressions) {
|
|
50
|
+
const children = expressions.map((expr) => simplify(expr));
|
|
51
|
+
if (children.some((expr) => expr.conditionType === 'never')) {
|
|
52
|
+
return children.find((expr) => expr.conditionType === 'never');
|
|
53
|
+
}
|
|
54
|
+
const withoutAlways = dedupe(children
|
|
55
|
+
.filter((expr) => expr.conditionType !== 'always')
|
|
56
|
+
.flatMap((expr) => expr.conditionType === 'group' && expr.operator === 'and' ? expr.conditions : [expr]));
|
|
57
|
+
if (withoutAlways.length === 0) {
|
|
58
|
+
return always();
|
|
59
|
+
}
|
|
60
|
+
if (withoutAlways.length === 1) {
|
|
61
|
+
return withoutAlways[0];
|
|
62
|
+
}
|
|
63
|
+
return { conditionType: 'group', operator: 'and', conditions: withoutAlways };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Combine condition expressions with OR semantics and simplify identity/absorbing values.
|
|
67
|
+
*
|
|
68
|
+
* @param expressions the expressions to combine
|
|
69
|
+
* @returns a simplified expression
|
|
70
|
+
*/
|
|
71
|
+
export function or(expressions) {
|
|
72
|
+
const children = expressions.map((expr) => simplify(expr));
|
|
73
|
+
if (children.some((expr) => expr.conditionType === 'always')) {
|
|
74
|
+
return always();
|
|
75
|
+
}
|
|
76
|
+
const withoutNever = dedupe(children
|
|
77
|
+
.filter((expr) => expr.conditionType !== 'never')
|
|
78
|
+
.flatMap((expr) => expr.conditionType === 'group' && expr.operator === 'or' ? expr.conditions : [expr]));
|
|
79
|
+
if (withoutNever.length === 0) {
|
|
80
|
+
return never('noApplicableAllow');
|
|
81
|
+
}
|
|
82
|
+
if (withoutNever.length === 1) {
|
|
83
|
+
return withoutNever[0];
|
|
84
|
+
}
|
|
85
|
+
return { conditionType: 'group', operator: 'or', conditions: withoutNever };
|
|
86
|
+
}
|
|
87
|
+
export function allowedConditionOutput(expression, simulationMode, result) {
|
|
88
|
+
if (simulationMode !== 'Discovery' || result !== 'Allowed') {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
return publicExpression(expression);
|
|
92
|
+
}
|
|
93
|
+
export function sessionPolicyExpression(analysis, sessionPolicyPresent) {
|
|
94
|
+
return sessionPolicyPresent ? identityAllowExpression(analysis, 'session') : always();
|
|
95
|
+
}
|
|
96
|
+
export function identityPolicyExpression(analysis) {
|
|
97
|
+
return identityAllowExpression(analysis, 'identity');
|
|
98
|
+
}
|
|
99
|
+
export function permissionBoundaryExpression(analysis) {
|
|
100
|
+
return identityAllowExpression(analysis, 'permissionBoundary');
|
|
101
|
+
}
|
|
102
|
+
export function endpointPolicyExpression(analysis) {
|
|
103
|
+
return identityAllowExpression(analysis, 'endpointPolicy');
|
|
104
|
+
}
|
|
105
|
+
export function resourceAllowStatementsExpression(statements) {
|
|
106
|
+
return allowStatementsExpression(statements, 'resource');
|
|
107
|
+
}
|
|
108
|
+
export function allDenyEscapeExpressions(input) {
|
|
109
|
+
return [
|
|
110
|
+
...denyEscapeExpressions(input.sessionAnalysis, 'session'),
|
|
111
|
+
...controlPolicyDenyEscapeExpressions(input.scpAnalysis, 'scp'),
|
|
112
|
+
...controlPolicyDenyEscapeExpressions(input.rcpAnalysis, 'rcp'),
|
|
113
|
+
...denyEscapeExpressions(input.identityAnalysis, 'identity'),
|
|
114
|
+
...resourceDenyEscapeExpressions(input.resourceAnalysis),
|
|
115
|
+
...denyEscapeExpressions(input.permissionBoundaryAnalysis, 'permissionBoundary'),
|
|
116
|
+
...denyEscapeExpressions(input.endpointAnalysis, 'endpointPolicy')
|
|
117
|
+
];
|
|
118
|
+
}
|
|
119
|
+
function identityAllowExpression(analysis, policyType) {
|
|
120
|
+
if (!analysis || analysis.result !== 'Allowed') {
|
|
121
|
+
return never('noApplicableAllow');
|
|
122
|
+
}
|
|
123
|
+
return allowStatementsExpression(analysis.allowStatements, policyType);
|
|
124
|
+
}
|
|
125
|
+
function allowStatementsExpression(statements, policyType) {
|
|
126
|
+
if (statements.length === 0) {
|
|
127
|
+
return never('noApplicableAllow');
|
|
128
|
+
}
|
|
129
|
+
return or(statements.map((statement) => allowStatementExpression(statement, policyType)));
|
|
130
|
+
}
|
|
131
|
+
function denyEscapeExpressions(analysis, policyType) {
|
|
132
|
+
return denyStatementsThatNeedEscapes(analysis).map((statement) => denyStatementEscapeExpression(statement, policyType));
|
|
133
|
+
}
|
|
134
|
+
function resourceDenyEscapeExpressions(analysis) {
|
|
135
|
+
return denyStatementsThatNeedEscapes(analysis).map((statement) => denyStatementEscapeExpression(statement, 'resource'));
|
|
136
|
+
}
|
|
137
|
+
function controlPolicyDenyEscapeExpressions(analysis, policyType) {
|
|
138
|
+
return (analysis?.ouAnalysis ?? []).flatMap((ou) => denyStatementsThatNeedEscapes(ou).map((statement) => denyStatementEscapeExpression(statement, policyType, ou.orgIdentifier)));
|
|
139
|
+
}
|
|
140
|
+
function denyStatementsThatNeedEscapes(analysis) {
|
|
141
|
+
return [...(analysis?.denyStatements ?? []), ...(analysis?.unmatchedStatements ?? [])].filter((statement) => statement.statement.isDeny() && (statement.ignoredConditions?.length ?? 0) > 0);
|
|
142
|
+
}
|
|
143
|
+
function statementConditionExpression(statement, policyType, inverted, orgIdentifier) {
|
|
144
|
+
const source = sourceForStatement(statement, policyType, orgIdentifier);
|
|
145
|
+
const conditions = statement.ignoredConditions ?? [];
|
|
146
|
+
const conditionExpressions = conditions.map((condition) => conditionLeaf(condition, source, inverted));
|
|
147
|
+
const sessionExpression = sessionNameExpression(statement, source);
|
|
148
|
+
if (sessionExpression) {
|
|
149
|
+
conditionExpressions.push(sessionExpression);
|
|
150
|
+
}
|
|
151
|
+
return and(conditionExpressions);
|
|
152
|
+
}
|
|
153
|
+
function sourceForStatement(statement, policyType, orgIdentifier) {
|
|
154
|
+
const sid = statement.statement.sid();
|
|
155
|
+
return {
|
|
156
|
+
policyType,
|
|
157
|
+
effect: statement.statement.effect(),
|
|
158
|
+
policyIdentifier: statement.policyId,
|
|
159
|
+
...(orgIdentifier ? { orgIdentifier } : {}),
|
|
160
|
+
...(sid ? { statementId: sid } : {}),
|
|
161
|
+
statementIndex: statement.statement.index()
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function conditionLeaf(condition, source, inverted) {
|
|
165
|
+
return {
|
|
166
|
+
conditionType: 'condition',
|
|
167
|
+
op: condition.operation().value(),
|
|
168
|
+
key: condition.conditionKey(),
|
|
169
|
+
values: condition.conditionValues(),
|
|
170
|
+
sources: [source],
|
|
171
|
+
...(inverted ? { inverted: true } : {})
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function sessionNameExpression(statement, source) {
|
|
175
|
+
if (!statement.ignoredRoleSessionName) {
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
const names = principalExplains(statement)
|
|
179
|
+
.map((explain) => sessionNameFromAssumedRoleArn(explain.principal))
|
|
180
|
+
.filter((name) => name !== undefined);
|
|
181
|
+
if (names.length === 0) {
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
conditionType: 'sessionName',
|
|
186
|
+
sessionName: Array.from(new Set(names)),
|
|
187
|
+
sources: [source]
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function principalExplains(statement) {
|
|
191
|
+
const principals = statement.explain.principals ?? statement.explain.notPrincipals;
|
|
192
|
+
if (!principals) {
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
195
|
+
return Array.isArray(principals) ? principals : [principals];
|
|
196
|
+
}
|
|
197
|
+
function sessionNameFromAssumedRoleArn(arn) {
|
|
198
|
+
const resource = arn.split(':').at(-1);
|
|
199
|
+
if (!resource?.startsWith('assumed-role/')) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
return resource.split('/').at(2);
|
|
203
|
+
}
|
|
204
|
+
function invertConditionParts(op, key, values, source) {
|
|
205
|
+
const setOperator = conditionSetOperator(op);
|
|
206
|
+
const hasIfExists = isIfExists(op);
|
|
207
|
+
const base = conditionBaseOperator(op);
|
|
208
|
+
if (hasIfExists) {
|
|
209
|
+
const withoutIfExists = operatorName(base, setOperator, false);
|
|
210
|
+
const invertedBase = invertConditionParts(withoutIfExists, key, values, source);
|
|
211
|
+
if (negativeConditionOperatorsMatchMissingKeys(base)) {
|
|
212
|
+
return invertedBase;
|
|
213
|
+
}
|
|
214
|
+
return and([leaf('Null', key, ['false'], source), invertedBase]);
|
|
215
|
+
}
|
|
216
|
+
if (base.toLowerCase() === 'null' || base.toLowerCase() === 'bool') {
|
|
217
|
+
return leaf(invertedOperatorName(op, base, setOperator, hasIfExists), key, flipBooleanValues(values), source);
|
|
218
|
+
}
|
|
219
|
+
if (setOperator === 'ForAllValues') {
|
|
220
|
+
return and([
|
|
221
|
+
leaf('Null', key, ['false'], source),
|
|
222
|
+
leaf(operatorName(invertBaseOperator(base), 'ForAnyValue', false), key, values, source)
|
|
223
|
+
]);
|
|
224
|
+
}
|
|
225
|
+
if (setOperator === 'ForAnyValue') {
|
|
226
|
+
return or([
|
|
227
|
+
leaf('Null', key, ['true'], source),
|
|
228
|
+
leaf(operatorName(invertBaseOperator(base), 'ForAllValues', false), key, values, source)
|
|
229
|
+
]);
|
|
230
|
+
}
|
|
231
|
+
return leaf(invertBaseOperator(base), key, values, source);
|
|
232
|
+
}
|
|
233
|
+
function leaf(op, key, values, source) {
|
|
234
|
+
return {
|
|
235
|
+
conditionType: 'condition',
|
|
236
|
+
op,
|
|
237
|
+
key,
|
|
238
|
+
values,
|
|
239
|
+
sources: [source],
|
|
240
|
+
inverted: true
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
function conditionSetOperator(op) {
|
|
244
|
+
const prefix = op.includes(':') ? op.split(':')[0].toLowerCase() : undefined;
|
|
245
|
+
if (prefix === 'forallvalues') {
|
|
246
|
+
return 'ForAllValues';
|
|
247
|
+
}
|
|
248
|
+
if (prefix === 'foranyvalue') {
|
|
249
|
+
return 'ForAnyValue';
|
|
250
|
+
}
|
|
251
|
+
return undefined;
|
|
252
|
+
}
|
|
253
|
+
function conditionBaseOperator(op) {
|
|
254
|
+
return op
|
|
255
|
+
.split(':')
|
|
256
|
+
.at(-1)
|
|
257
|
+
.replace(/IfExists$/i, '');
|
|
258
|
+
}
|
|
259
|
+
function isIfExists(op) {
|
|
260
|
+
return /IfExists$/i.test(op);
|
|
261
|
+
}
|
|
262
|
+
function invertedOperatorName(originalOp, base, setOperator, hasIfExists) {
|
|
263
|
+
if (base.toLowerCase() === 'bool' || base.toLowerCase() === 'null') {
|
|
264
|
+
return operatorName(base, setOperator, hasIfExists);
|
|
265
|
+
}
|
|
266
|
+
return originalOp;
|
|
267
|
+
}
|
|
268
|
+
function negativeConditionOperatorsMatchMissingKeys(base) {
|
|
269
|
+
return new Set([
|
|
270
|
+
'stringnotequals',
|
|
271
|
+
'stringnotequalsignorecase',
|
|
272
|
+
'stringnotlike',
|
|
273
|
+
'arnnotequals',
|
|
274
|
+
'arnnotlike',
|
|
275
|
+
'numericnotequals',
|
|
276
|
+
'datenotequals',
|
|
277
|
+
'notipaddress',
|
|
278
|
+
'binarynotequals'
|
|
279
|
+
]).has(base.toLowerCase());
|
|
280
|
+
}
|
|
281
|
+
function operatorName(base, setOperator, ifExists) {
|
|
282
|
+
const op = canonicalBaseOperator(base) + (ifExists ? 'IfExists' : '');
|
|
283
|
+
return setOperator ? `${setOperator}:${op}` : op;
|
|
284
|
+
}
|
|
285
|
+
function invertBaseOperator(base) {
|
|
286
|
+
const map = {
|
|
287
|
+
stringequals: 'StringNotEquals',
|
|
288
|
+
stringnotequals: 'StringEquals',
|
|
289
|
+
stringequalsignorecase: 'StringNotEqualsIgnoreCase',
|
|
290
|
+
stringnotequalsignorecase: 'StringEqualsIgnoreCase',
|
|
291
|
+
stringlike: 'StringNotLike',
|
|
292
|
+
stringnotlike: 'StringLike',
|
|
293
|
+
arnequals: 'ArnNotEquals',
|
|
294
|
+
arnnotequals: 'ArnEquals',
|
|
295
|
+
arnlike: 'ArnNotLike',
|
|
296
|
+
arnnotlike: 'ArnLike',
|
|
297
|
+
numericequals: 'NumericNotEquals',
|
|
298
|
+
numericnotequals: 'NumericEquals',
|
|
299
|
+
numericlessthan: 'NumericGreaterThanEquals',
|
|
300
|
+
numericlessthanequals: 'NumericGreaterThan',
|
|
301
|
+
numericgreaterthan: 'NumericLessThanEquals',
|
|
302
|
+
numericgreaterthanequals: 'NumericLessThan',
|
|
303
|
+
dateequals: 'DateNotEquals',
|
|
304
|
+
datenotequals: 'DateEquals',
|
|
305
|
+
datelessthan: 'DateGreaterThanEquals',
|
|
306
|
+
datelessthanequals: 'DateGreaterThan',
|
|
307
|
+
dategreaterthan: 'DateLessThanEquals',
|
|
308
|
+
dategreaterthanequals: 'DateLessThan',
|
|
309
|
+
ipaddress: 'NotIpAddress',
|
|
310
|
+
notipaddress: 'IpAddress',
|
|
311
|
+
binaryequals: 'BinaryNotEquals',
|
|
312
|
+
binarynotequals: 'BinaryEquals'
|
|
313
|
+
};
|
|
314
|
+
return map[base.toLowerCase()] ?? `Not:${base}`;
|
|
315
|
+
}
|
|
316
|
+
function canonicalBaseOperator(base) {
|
|
317
|
+
const canonical = {
|
|
318
|
+
stringequals: 'StringEquals',
|
|
319
|
+
stringnotequals: 'StringNotEquals',
|
|
320
|
+
stringequalsignorecase: 'StringEqualsIgnoreCase',
|
|
321
|
+
stringnotequalsignorecase: 'StringNotEqualsIgnoreCase',
|
|
322
|
+
stringlike: 'StringLike',
|
|
323
|
+
stringnotlike: 'StringNotLike',
|
|
324
|
+
arnequals: 'ArnEquals',
|
|
325
|
+
arnnotequals: 'ArnNotEquals',
|
|
326
|
+
arnlike: 'ArnLike',
|
|
327
|
+
arnnotlike: 'ArnNotLike',
|
|
328
|
+
numericequals: 'NumericEquals',
|
|
329
|
+
numericnotequals: 'NumericNotEquals',
|
|
330
|
+
numericlessthan: 'NumericLessThan',
|
|
331
|
+
numericlessthanequals: 'NumericLessThanEquals',
|
|
332
|
+
numericgreaterthan: 'NumericGreaterThan',
|
|
333
|
+
numericgreaterthanequals: 'NumericGreaterThanEquals',
|
|
334
|
+
dateequals: 'DateEquals',
|
|
335
|
+
datenotequals: 'DateNotEquals',
|
|
336
|
+
datelessthan: 'DateLessThan',
|
|
337
|
+
datelessthanequals: 'DateLessThanEquals',
|
|
338
|
+
dategreaterthan: 'DateGreaterThan',
|
|
339
|
+
dategreaterthanequals: 'DateGreaterThanEquals',
|
|
340
|
+
bool: 'Bool',
|
|
341
|
+
null: 'Null',
|
|
342
|
+
ipaddress: 'IpAddress',
|
|
343
|
+
notipaddress: 'NotIpAddress',
|
|
344
|
+
binaryequals: 'BinaryEquals',
|
|
345
|
+
binarynotequals: 'BinaryNotEquals'
|
|
346
|
+
};
|
|
347
|
+
return canonical[base.toLowerCase()] ?? base;
|
|
348
|
+
}
|
|
349
|
+
function flipBooleanValues(values) {
|
|
350
|
+
return values.map((value) => (value.toLowerCase() === 'true' ? 'false' : 'true'));
|
|
351
|
+
}
|
|
352
|
+
function publicExpression(expression) {
|
|
353
|
+
const simplified = simplify(expression);
|
|
354
|
+
return simplified.conditionType === 'always' || simplified.conditionType === 'never'
|
|
355
|
+
? undefined
|
|
356
|
+
: simplified;
|
|
357
|
+
}
|
|
358
|
+
function simplify(expression) {
|
|
359
|
+
if (expression.conditionType !== 'group') {
|
|
360
|
+
return expression;
|
|
361
|
+
}
|
|
362
|
+
return expression.operator === 'and' ? and(expression.conditions) : or(expression.conditions);
|
|
363
|
+
}
|
|
364
|
+
export function always() {
|
|
365
|
+
return { conditionType: 'always' };
|
|
366
|
+
}
|
|
367
|
+
export function never(reason) {
|
|
368
|
+
return { conditionType: 'never', reason };
|
|
369
|
+
}
|
|
370
|
+
function dedupe(expressions) {
|
|
371
|
+
const seen = new Set();
|
|
372
|
+
const result = [];
|
|
373
|
+
for (const expression of expressions) {
|
|
374
|
+
const key = JSON.stringify(expression);
|
|
375
|
+
if (!seen.has(key)) {
|
|
376
|
+
seen.add(key);
|
|
377
|
+
result.push(expression);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return result;
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=allowedConditions.js.map
|