@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,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.classifyS3RuntimePublicBucketPolicy = classifyS3RuntimePublicBucketPolicy;
|
|
4
|
+
const util_js_1 = require("../../util.js");
|
|
5
|
+
/**
|
|
6
|
+
* Classifies a standard S3 bucket policy as public or non-public for runtime
|
|
7
|
+
* RestrictPublicBuckets behavior.
|
|
8
|
+
*
|
|
9
|
+
* @param policy the loaded S3 bucket policy to classify
|
|
10
|
+
* @returns whether the policy is runtime-public and, when public, the public statements
|
|
11
|
+
*/
|
|
12
|
+
function classifyS3RuntimePublicBucketPolicy(policy) {
|
|
13
|
+
const publicStatements = policy
|
|
14
|
+
.statements()
|
|
15
|
+
.filter((statement) => statement.isAllow() && statementIsRuntimePublic(statement))
|
|
16
|
+
.map((statement) => statementIdentifier(statement));
|
|
17
|
+
if (publicStatements.length > 0) {
|
|
18
|
+
return { result: 'public', publicStatements };
|
|
19
|
+
}
|
|
20
|
+
return { result: 'nonPublic' };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Determines whether an individual Allow statement makes a bucket policy runtime-public.
|
|
24
|
+
*
|
|
25
|
+
* @param statement the statement to classify
|
|
26
|
+
* @returns true if the statement is public for runtime RestrictPublicBuckets behavior
|
|
27
|
+
*/
|
|
28
|
+
function statementIsRuntimePublic(statement) {
|
|
29
|
+
if (!statement.isPrincipalStatement()) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
const principals = statement.principals();
|
|
33
|
+
if (principals.some((principal) => principal.isWildcardPrincipal())) {
|
|
34
|
+
return !hasPublicAccessLimitingCondition(statement);
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Gets the statement index and Sid for classifier output.
|
|
40
|
+
*
|
|
41
|
+
* @param statement the statement to identify
|
|
42
|
+
* @returns the statement index and optional Sid
|
|
43
|
+
*/
|
|
44
|
+
function statementIdentifier(statement) {
|
|
45
|
+
return {
|
|
46
|
+
index: statement.index(),
|
|
47
|
+
...(statement.sid() ? { sid: statement.sid() } : {})
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Determines whether a wildcard-principal statement has a condition that limits access
|
|
52
|
+
* enough to be non-public for S3 BPA runtime classification.
|
|
53
|
+
*
|
|
54
|
+
* @param statement the wildcard-principal statement to inspect
|
|
55
|
+
* @returns true if a supported condition makes the statement non-public
|
|
56
|
+
*/
|
|
57
|
+
function hasPublicAccessLimitingCondition(statement) {
|
|
58
|
+
const conditionMap = statement.conditionMap();
|
|
59
|
+
if (!conditionMap) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return (hasFixedValueCondition(conditionMap, 'aws:PrincipalOrgID') ||
|
|
63
|
+
hasFixedValueCondition(conditionMap, 'aws:PrincipalAccount') ||
|
|
64
|
+
hasPrincipalArnLimitingCondition(conditionMap) ||
|
|
65
|
+
hasOrgPathLimitingCondition(conditionMap, 'aws:PrincipalOrgPaths') ||
|
|
66
|
+
hasAwsServicePrincipalLimitingCondition(conditionMap) ||
|
|
67
|
+
hasPrincipalServiceNameLimitingCondition(conditionMap) ||
|
|
68
|
+
hasUseridLimitingCondition(conditionMap) ||
|
|
69
|
+
hasFixedValueCondition(conditionMap, 'aws:SourceVpce') ||
|
|
70
|
+
hasFixedValueCondition(conditionMap, 'aws:SourceVpc') ||
|
|
71
|
+
hasSourceVpcArnLimitingCondition(conditionMap) ||
|
|
72
|
+
hasFixedValueCondition(conditionMap, 'aws:VpceAccount') ||
|
|
73
|
+
hasFixedValueCondition(conditionMap, 'aws:VpceOrgID') ||
|
|
74
|
+
hasOrgPathLimitingCondition(conditionMap, 'aws:VpceOrgPaths') ||
|
|
75
|
+
hasSourceIpLimitingCondition(conditionMap) ||
|
|
76
|
+
hasFixedArnCondition(conditionMap, 'aws:SourceArn') ||
|
|
77
|
+
hasFixedValueCondition(conditionMap, 'aws:SourceAccount'));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Checks for exact fixed-value conditions for account, org, VPC, and similar keys.
|
|
81
|
+
*
|
|
82
|
+
* @param conditionMap the statement condition map
|
|
83
|
+
* @param key the condition key to inspect
|
|
84
|
+
* @returns true if the key is constrained to fixed values by supported operators
|
|
85
|
+
*/
|
|
86
|
+
function hasFixedValueCondition(conditionMap, key) {
|
|
87
|
+
return conditionEntries(conditionMap, key).some(({ operator, values }) => ['StringEquals', 'StringEqualsIgnoreCase', 'ForAnyValue:StringEquals'].includes(operator) ||
|
|
88
|
+
(operator === 'StringLike' && values.every((value) => !hasWildcard(value))));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Checks for public-access-limiting aws:PrincipalArn conditions.
|
|
92
|
+
*
|
|
93
|
+
* @param conditionMap the statement condition map
|
|
94
|
+
* @returns true if PrincipalArn is constrained to a fixed account principal pattern
|
|
95
|
+
*/
|
|
96
|
+
function hasPrincipalArnLimitingCondition(conditionMap) {
|
|
97
|
+
return conditionEntries(conditionMap, 'aws:PrincipalArn').some(({ operator, values }) => {
|
|
98
|
+
if (operator === 'ArnEquals') {
|
|
99
|
+
return values.every(isArnWithFixedAccount);
|
|
100
|
+
}
|
|
101
|
+
if (operator === 'ArnLike') {
|
|
102
|
+
return values.every((value) => isArnWithFixedAccount(value) && arnWildcardOnlyInResource(value));
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Checks for exact SourceVpcArn conditions.
|
|
109
|
+
*
|
|
110
|
+
* @param conditionMap the statement condition map
|
|
111
|
+
* @returns true if SourceVpcArn is constrained to exact ARNs
|
|
112
|
+
*/
|
|
113
|
+
function hasSourceVpcArnLimitingCondition(conditionMap) {
|
|
114
|
+
return hasFixedArnCondition(conditionMap, 'aws:SourceVpcArn');
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Checks for fixed ARN conditions.
|
|
118
|
+
*
|
|
119
|
+
* @param conditionMap the statement condition map
|
|
120
|
+
* @param key the condition key to inspect
|
|
121
|
+
* @returns true if the key is constrained to fixed ARN values
|
|
122
|
+
*/
|
|
123
|
+
function hasFixedArnCondition(conditionMap, key) {
|
|
124
|
+
return conditionEntries(conditionMap, key).some(({ operator, values }) => operator === 'ArnEquals' && values.every(isArnWithFixedAccount));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Checks for AWS Organizations path conditions with fixed org path prefixes.
|
|
128
|
+
*
|
|
129
|
+
* @param conditionMap the statement condition map
|
|
130
|
+
* @param key the condition key to inspect
|
|
131
|
+
* @returns true if the path condition is fixed or uses a documented suffix wildcard shape
|
|
132
|
+
*/
|
|
133
|
+
function hasOrgPathLimitingCondition(conditionMap, key) {
|
|
134
|
+
return conditionEntries(conditionMap, key).some(({ operator, values }) => {
|
|
135
|
+
if (operator === 'StringEquals') {
|
|
136
|
+
return values.every(isFixedOrgPath);
|
|
137
|
+
}
|
|
138
|
+
if (operator === 'StringLike') {
|
|
139
|
+
return values.every(isFixedOrgPathWithOptionalSuffixWildcard);
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Checks for conditions that limit access to AWS service principals.
|
|
146
|
+
*
|
|
147
|
+
* @param conditionMap the statement condition map
|
|
148
|
+
* @returns true if the statement is limited to AWS service principals
|
|
149
|
+
*/
|
|
150
|
+
function hasAwsServicePrincipalLimitingCondition(conditionMap) {
|
|
151
|
+
return conditionEntries(conditionMap, 'aws:PrincipalIsAWSService').some(({ operator, values }) => ['Bool', 'StringEquals', 'StringEqualsIgnoreCase', 'StringLike'].includes(operator) &&
|
|
152
|
+
values.every((value) => value.toLowerCase() === 'true'));
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Checks for service-principal name conditions.
|
|
156
|
+
*
|
|
157
|
+
* @param conditionMap the statement condition map
|
|
158
|
+
* @returns true if the statement is limited to service principal names
|
|
159
|
+
*/
|
|
160
|
+
function hasPrincipalServiceNameLimitingCondition(conditionMap) {
|
|
161
|
+
return ['aws:PrincipalServiceName', 'aws:PrincipalServiceNamesList'].some((key) => conditionEntries(conditionMap, key).some(({ operator, values }) => {
|
|
162
|
+
return ([
|
|
163
|
+
'StringEquals',
|
|
164
|
+
'ForAnyValue:StringEquals',
|
|
165
|
+
'StringLike',
|
|
166
|
+
'ForAnyValue:StringLike'
|
|
167
|
+
].includes(operator) && values.every(isServiceNamePattern));
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Checks for aws:userid conditions with a fixed stable ID prefix.
|
|
172
|
+
*
|
|
173
|
+
* @param conditionMap the statement condition map
|
|
174
|
+
* @returns true if userid is constrained to exact values or fixed-prefix session suffix wildcards
|
|
175
|
+
*/
|
|
176
|
+
function hasUseridLimitingCondition(conditionMap) {
|
|
177
|
+
return conditionEntries(conditionMap, 'aws:userid').some(({ operator, values }) => {
|
|
178
|
+
if (operator === 'StringEquals') {
|
|
179
|
+
return values.every((value) => !hasWildcard(value));
|
|
180
|
+
}
|
|
181
|
+
if (operator === 'StringLike') {
|
|
182
|
+
return values.every((value) => /^[A-Z0-9]+:\*$/.test(value));
|
|
183
|
+
}
|
|
184
|
+
return false;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Checks for sufficiently narrow aws:SourceIp conditions.
|
|
189
|
+
*
|
|
190
|
+
* @param conditionMap the statement condition map
|
|
191
|
+
* @returns true if SourceIp ranges are narrow enough to be non-public
|
|
192
|
+
*/
|
|
193
|
+
function hasSourceIpLimitingCondition(conditionMap) {
|
|
194
|
+
return conditionEntries(conditionMap, 'aws:SourceIp').some(({ operator, values }) => operator === 'IpAddress' && values.every(sourceIpRangeIsNonPublic));
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Gets condition entries for a key using case-insensitive key matching.
|
|
198
|
+
*
|
|
199
|
+
* @param conditionMap the statement condition map
|
|
200
|
+
* @param key the condition key to inspect
|
|
201
|
+
* @returns matching condition entries
|
|
202
|
+
*/
|
|
203
|
+
function conditionEntries(conditionMap, key) {
|
|
204
|
+
const entries = [];
|
|
205
|
+
for (const [operator, keyValues] of Object.entries(conditionMap)) {
|
|
206
|
+
for (const [conditionKey, values] of Object.entries(keyValues)) {
|
|
207
|
+
if (conditionKey.toLowerCase() === key.toLowerCase()) {
|
|
208
|
+
entries.push({ operator, values });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return entries;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Checks whether an ARN pattern has a fixed account component.
|
|
216
|
+
*
|
|
217
|
+
* @param value the ARN or ARN pattern to inspect
|
|
218
|
+
* @returns true if the account component is fixed and non-wildcard
|
|
219
|
+
*/
|
|
220
|
+
function isArnWithFixedAccount(value) {
|
|
221
|
+
const arn = (0, util_js_1.splitArnParts)(value);
|
|
222
|
+
return !!arn.accountId && !hasWildcard(arn.accountId);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Checks whether ARN wildcards are limited to the resource component.
|
|
226
|
+
*
|
|
227
|
+
* @param value the ARN pattern to inspect
|
|
228
|
+
* @returns true if partition, service, region, and account are fixed
|
|
229
|
+
*/
|
|
230
|
+
function arnWildcardOnlyInResource(value) {
|
|
231
|
+
const arn = (0, util_js_1.splitArnParts)(value);
|
|
232
|
+
return ![arn.partition, arn.service, arn.region, arn.accountId].some((part) => part ? hasWildcard(part) : false);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Checks whether a string has IAM wildcard characters.
|
|
236
|
+
*
|
|
237
|
+
* @param value the value to inspect
|
|
238
|
+
* @returns true if the value contains `*` or `?`
|
|
239
|
+
*/
|
|
240
|
+
function hasWildcard(value) {
|
|
241
|
+
return value.includes('*') || value.includes('?');
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Checks whether an Organizations path has a fixed org/root path prefix.
|
|
245
|
+
*
|
|
246
|
+
* @param value the org path value to inspect
|
|
247
|
+
* @returns true if the value is fixed and starts with an org path
|
|
248
|
+
*/
|
|
249
|
+
function isFixedOrgPath(value) {
|
|
250
|
+
return /^o-[a-z0-9]+\/[^*?]+/.test(value) && !hasWildcard(value);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Checks whether an Organizations path is fixed or uses a suffix wildcard.
|
|
254
|
+
*
|
|
255
|
+
* @param value the org path value to inspect
|
|
256
|
+
* @returns true if the value has a fixed org path prefix and optional trailing wildcard
|
|
257
|
+
*/
|
|
258
|
+
function isFixedOrgPathWithOptionalSuffixWildcard(value) {
|
|
259
|
+
if (!value.endsWith('*')) {
|
|
260
|
+
return isFixedOrgPath(value);
|
|
261
|
+
}
|
|
262
|
+
const prefix = value.slice(0, -1);
|
|
263
|
+
return /^o-[a-z0-9]+\/[^*?]+/.test(prefix) && !hasWildcard(prefix);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Checks whether a value is an AWS service-name pattern.
|
|
267
|
+
*
|
|
268
|
+
* @param value the service name or pattern to inspect
|
|
269
|
+
* @returns true if the value is an amazonaws.com service name pattern
|
|
270
|
+
*/
|
|
271
|
+
function isServiceNamePattern(value) {
|
|
272
|
+
return /^([a-z0-9-]+|\*)\.(amazonaws\.com|amazonaws\.com\.cn)$/.test(value);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Determines whether a SourceIp CIDR is narrow/private enough to be non-public.
|
|
276
|
+
*
|
|
277
|
+
* @param cidr the CIDR value to inspect
|
|
278
|
+
* @returns true if the CIDR is non-public for S3 BPA classification
|
|
279
|
+
*/
|
|
280
|
+
function sourceIpRangeIsNonPublic(cidr) {
|
|
281
|
+
const [address, prefixString] = cidr.split('/');
|
|
282
|
+
const prefix = Number(prefixString);
|
|
283
|
+
if (!address || !Number.isInteger(prefix)) {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
if (address.includes(':')) {
|
|
287
|
+
return prefix >= 32;
|
|
288
|
+
}
|
|
289
|
+
const firstOctet = Number(address.split('.')[0]);
|
|
290
|
+
const secondOctet = Number(address.split('.')[1]);
|
|
291
|
+
if (!Number.isInteger(firstOctet) || !Number.isInteger(secondOctet)) {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
if (firstOctet === 10 ||
|
|
295
|
+
(firstOctet === 172 && secondOctet >= 16 && secondOctet <= 31) ||
|
|
296
|
+
(firstOctet === 192 && secondOctet === 168)) {
|
|
297
|
+
return true;
|
|
298
|
+
}
|
|
299
|
+
return prefix >= 8;
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=s3BlockPublicAccess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3BlockPublicAccess.js","sourceRoot":"","sources":["../../../../src/services/s3/s3BlockPublicAccess.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ResourceType } from '@actsecurity/iam-data';
|
|
2
|
+
/**
|
|
3
|
+
* Get the allowed context keys for a request.
|
|
4
|
+
*
|
|
5
|
+
* @param service The service the action belongs to
|
|
6
|
+
* @param action The action to get the allowed context keys for
|
|
7
|
+
* @param resource The resource the action is being performed on
|
|
8
|
+
* @param bucketAbacEnabled Whether ABAC is enabled on the S3 bucket (only applies to S3)
|
|
9
|
+
* @returns The allowed context keys for the request as lower case strings
|
|
10
|
+
* @throws error if the service or action does not exist
|
|
11
|
+
*/
|
|
12
|
+
export declare function allowedContextKeysForRequest(service: string, action: string, resource: string, bucketAbacEnabled: boolean, suggestedResourceType: ResourceType | undefined): Promise<string[]>;
|
|
13
|
+
//# sourceMappingURL=contextKeys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextKeys.d.ts","sourceRoot":"","sources":["../../../src/simulation_engine/contextKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAA;AAI9B;;;;;;;;;GASG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,OAAO,EAC1B,qBAAqB,EAAE,YAAY,GAAG,SAAS,GAC9C,OAAO,CAAC,MAAM,EAAE,CAAC,CAwCnB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.allowedContextKeysForRequest = allowedContextKeysForRequest;
|
|
4
|
+
const iam_data_1 = require("@actsecurity/iam-data");
|
|
5
|
+
const util_js_1 = require("../util.js");
|
|
6
|
+
const resourceTypes_js_1 = require("./resourceTypes.js");
|
|
7
|
+
/**
|
|
8
|
+
* Get the allowed context keys for a request.
|
|
9
|
+
*
|
|
10
|
+
* @param service The service the action belongs to
|
|
11
|
+
* @param action The action to get the allowed context keys for
|
|
12
|
+
* @param resource The resource the action is being performed on
|
|
13
|
+
* @param bucketAbacEnabled Whether ABAC is enabled on the S3 bucket (only applies to S3)
|
|
14
|
+
* @returns The allowed context keys for the request as lower case strings
|
|
15
|
+
* @throws error if the service or action does not exist
|
|
16
|
+
*/
|
|
17
|
+
async function allowedContextKeysForRequest(service, action, resource, bucketAbacEnabled, suggestedResourceType) {
|
|
18
|
+
const actionDetails = await (0, iam_data_1.iamActionDetails)(service, action);
|
|
19
|
+
const actionConditionKeys = (0, util_js_1.lowerCaseAll)(actionDetails.conditionKeys);
|
|
20
|
+
const isWildCardOnly = await (0, util_js_1.isWildcardOnlyAction)(service, action);
|
|
21
|
+
if (isWildCardOnly) {
|
|
22
|
+
return [...actionConditionKeys, ...lowerCaseGlobalConditionKeys()];
|
|
23
|
+
}
|
|
24
|
+
let resourceType = suggestedResourceType;
|
|
25
|
+
if (!resourceType) {
|
|
26
|
+
const resourceTypes = await (0, resourceTypes_js_1.getResourceTypesForAction)(service, action, resource);
|
|
27
|
+
if (resourceTypes.length === 0) {
|
|
28
|
+
throw new Error(`No resource types found for action ${action} on service ${service}`);
|
|
29
|
+
}
|
|
30
|
+
else if (resourceTypes.length > 1) {
|
|
31
|
+
throw new Error(`Multiple resource types found for action ${action} on service ${service}`);
|
|
32
|
+
}
|
|
33
|
+
resourceType = resourceTypes[0];
|
|
34
|
+
}
|
|
35
|
+
const resourceTypeConditions = [
|
|
36
|
+
...(resourceType.conditionKeys ?? []),
|
|
37
|
+
...(actionDetails.resourceTypes.find((rt) => rt.name === resourceType.key)?.conditionKeys ??
|
|
38
|
+
[])
|
|
39
|
+
];
|
|
40
|
+
const allKeys = [
|
|
41
|
+
...(0, util_js_1.lowerCaseAll)(resourceTypeConditions),
|
|
42
|
+
...actionConditionKeys,
|
|
43
|
+
...lowerCaseGlobalConditionKeys()
|
|
44
|
+
];
|
|
45
|
+
if (!(0, util_js_1.isS3BucketOrObjectArn)(resource) || bucketAbacEnabled) {
|
|
46
|
+
return allKeys;
|
|
47
|
+
}
|
|
48
|
+
// Filter out S3 ABAC keys if bucket ABAC is not enabled
|
|
49
|
+
return allKeys.filter((key) => !key.startsWith('aws:resourcetag/') && !key.startsWith('s3:buckettag/'));
|
|
50
|
+
}
|
|
51
|
+
let lowerCaseConditionKeys;
|
|
52
|
+
function lowerCaseGlobalConditionKeys() {
|
|
53
|
+
if (!lowerCaseConditionKeys) {
|
|
54
|
+
lowerCaseConditionKeys = (0, iam_data_1.getAllGlobalConditionKeys)().map((k) => k.toLowerCase());
|
|
55
|
+
}
|
|
56
|
+
return lowerCaseConditionKeys;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=contextKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextKeys.js","sourceRoot":"","sources":["../../../src/simulation_engine/contextKeys.ts"],"names":[],"mappings":";;AAkBA,oEA8CC;AAhED,oDAI8B;AAC9B,wCAAsF;AACtF,yDAA8D;AAE9D;;;;;;;;;GASG;AACI,KAAK,UAAU,4BAA4B,CAChD,OAAe,EACf,MAAc,EACd,QAAgB,EAChB,iBAA0B,EAC1B,qBAA+C;IAE/C,MAAM,aAAa,GAAG,MAAM,IAAA,2BAAgB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7D,MAAM,mBAAmB,GAAG,IAAA,sBAAY,EAAC,aAAa,CAAC,aAAa,CAAC,CAAA;IAErE,MAAM,cAAc,GAAG,MAAM,IAAA,8BAAoB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAClE,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,mBAAmB,EAAE,GAAG,4BAA4B,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,YAAY,GAAG,qBAAqB,CAAA;IACxC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,aAAa,GAAG,MAAM,IAAA,4CAAyB,EAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAChF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,eAAe,OAAO,EAAE,CAAC,CAAA;QACvF,CAAC;aAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4CAA4C,MAAM,eAAe,OAAO,EAAE,CAAC,CAAA;QAC7F,CAAC;QACD,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,sBAAsB,GAAG;QAC7B,GAAG,CAAC,YAAY,CAAC,aAAa,IAAI,EAAE,CAAC;QACrC,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,YAAa,CAAC,GAAG,CAAC,EAAE,aAAa;YACxF,EAAE,CAAC;KACN,CAAA;IAED,MAAM,OAAO,GAAG;QACd,GAAG,IAAA,sBAAY,EAAC,sBAAsB,CAAC;QACvC,GAAG,mBAAmB;QACtB,GAAG,4BAA4B,EAAE;KAClC,CAAA;IAED,IAAI,CAAC,IAAA,+BAAqB,EAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAC1D,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,wDAAwD;IACxD,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CACjF,CAAA;AACH,CAAC;AAED,IAAI,sBAA4C,CAAA;AAChD,SAAS,4BAA4B;IACnC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,sBAAsB,GAAG,IAAA,oCAAyB,GAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,sBAAsB,CAAA;AAC/B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { EvaluationResult } from '../evaluate.js';
|
|
2
|
+
import type { SimulationResourceResult } from './simulationEngine.js';
|
|
3
|
+
/**
|
|
4
|
+
* Calculates the overall evaluation result from multiple simulation resource results.
|
|
5
|
+
*
|
|
6
|
+
* @param results Array of simulation resource results to evaluate
|
|
7
|
+
* @returns The overall evaluation result following AWS IAM evaluation logic:
|
|
8
|
+
* - 'Allowed' if any result is allowed
|
|
9
|
+
* - 'ExplicitlyDenied' if all results are explicitly denied
|
|
10
|
+
* - 'ImplicitlyDenied' for all other cases (including empty results)
|
|
11
|
+
*/
|
|
12
|
+
export declare function calculateOverallResult(results: SimulationResourceResult[]): EvaluationResult;
|
|
13
|
+
//# sourceMappingURL=overallResult.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overallResult.d.ts","sourceRoot":"","sources":["../../../src/simulation_engine/overallResult.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAErE;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,EAAE,GAAG,gBAAgB,CAyB5F"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateOverallResult = calculateOverallResult;
|
|
4
|
+
/**
|
|
5
|
+
* Calculates the overall evaluation result from multiple simulation resource results.
|
|
6
|
+
*
|
|
7
|
+
* @param results Array of simulation resource results to evaluate
|
|
8
|
+
* @returns The overall evaluation result following AWS IAM evaluation logic:
|
|
9
|
+
* - 'Allowed' if any result is allowed
|
|
10
|
+
* - 'ExplicitlyDenied' if all results are explicitly denied
|
|
11
|
+
* - 'ImplicitlyDenied' for all other cases (including empty results)
|
|
12
|
+
*/
|
|
13
|
+
function calculateOverallResult(results) {
|
|
14
|
+
if (results.length === 0) {
|
|
15
|
+
return 'ImplicitlyDenied';
|
|
16
|
+
}
|
|
17
|
+
let hasExplicitlyDenied = false;
|
|
18
|
+
let hasImplicitlyDenied = false;
|
|
19
|
+
for (const result of results) {
|
|
20
|
+
const evaluationResult = result.analysis?.result;
|
|
21
|
+
if (evaluationResult === 'Allowed') {
|
|
22
|
+
return 'Allowed';
|
|
23
|
+
}
|
|
24
|
+
if (evaluationResult === 'ExplicitlyDenied') {
|
|
25
|
+
hasExplicitlyDenied = true;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
hasImplicitlyDenied = true;
|
|
29
|
+
}
|
|
30
|
+
if (hasExplicitlyDenied && !hasImplicitlyDenied) {
|
|
31
|
+
return 'ExplicitlyDenied';
|
|
32
|
+
}
|
|
33
|
+
return 'ImplicitlyDenied';
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=overallResult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overallResult.js","sourceRoot":"","sources":["../../../src/simulation_engine/overallResult.ts"],"names":[],"mappings":";;AAYA,wDAyBC;AAlCD;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CAAC,OAAmC;IACxE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IAED,IAAI,mBAAmB,GAAG,KAAK,CAAA;IAC/B,IAAI,mBAAmB,GAAG,KAAK,CAAA;IAE/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAA;QAChD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,IAAI,gBAAgB,KAAK,kBAAkB,EAAE,CAAC;YAC5C,mBAAmB,GAAG,IAAI,CAAA;YAC1B,SAAQ;QACV,CAAC;QACD,mBAAmB,GAAG,IAAI,CAAA;IAC5B,CAAC;IAED,IAAI,mBAAmB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IAED,OAAO,kBAAkB,CAAA;AAC3B,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ResourceType } from '@actsecurity/iam-data';
|
|
2
|
+
import { type Statement } from '@actsecurity/iam-policy';
|
|
3
|
+
import { type PolicyWithName } from '../core_engine/CoreSimulatorEngine.js';
|
|
4
|
+
/**
|
|
5
|
+
* Extracts matching resource strings from a set of policies for a given action and resource pattern.
|
|
6
|
+
*
|
|
7
|
+
* @param policies Array of policies to search through (undefined entries are skipped)
|
|
8
|
+
* @param action The action to match against policy statements
|
|
9
|
+
* @param resourceType The resource type to filter resource strings by
|
|
10
|
+
* @param resourceArnPattern The resource ARN pattern to match against
|
|
11
|
+
* @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
|
|
12
|
+
* @returns Array of unique resource strings that match the criteria
|
|
13
|
+
*/
|
|
14
|
+
export declare function getMatchingResourceStringsForPolicies(policies: (PolicyWithName | undefined)[], action: string, resourceType: ResourceType, resourceArnPattern: string, shouldExpandShortArns: boolean): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Extracts resource strings from a single policy statement that allows the specified action.
|
|
17
|
+
*
|
|
18
|
+
* @param statement The policy statement to analyze
|
|
19
|
+
* @param action The action to check if the statement allows
|
|
20
|
+
* @param resourceType The resource type to filter by
|
|
21
|
+
* @param resourceArnPattern The resource ARN pattern to match
|
|
22
|
+
* @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
|
|
23
|
+
* @returns Array of resource strings from the statement, or empty array if statement doesn't allow the action
|
|
24
|
+
*/
|
|
25
|
+
export declare function getResourceStringsFromStatement(statement: Statement, action: string, resourceType: ResourceType, resourceArnPattern: string, shouldExpandShortArns: boolean): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Extracts resource strings from a statement's Resource or NotResource elements that match the given criteria.
|
|
28
|
+
*
|
|
29
|
+
* @param statement The policy statement to analyze
|
|
30
|
+
* @param resourceType The resource type to filter by
|
|
31
|
+
* @param resourceArnPattern The resource ARN pattern to check for overlap
|
|
32
|
+
* @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
|
|
33
|
+
* @returns Array of matching resource strings, or ['*'] for certain NotResource cases
|
|
34
|
+
*/
|
|
35
|
+
export declare function statementResourceStringsForResourceTypeAndPattern(statement: Statement, resourceType: ResourceType, resourceArnPattern: string, shouldExpandShortArns: boolean): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Determines if a policy statement allows the specified action.
|
|
38
|
+
*
|
|
39
|
+
* @param statement The policy statement to check
|
|
40
|
+
* @param action The action to test against the statement
|
|
41
|
+
* @returns true if the statement allows the action, false otherwise
|
|
42
|
+
*/
|
|
43
|
+
export declare function statementAllowsAction(statement: Statement, action: string): boolean;
|
|
44
|
+
//# sourceMappingURL=policyResources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policyResources.d.ts","sourceRoot":"","sources":["../../../src/simulation_engine/policyResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAMxD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAG3E;;;;;;;;;GASG;AACH,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,EACxC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,MAAM,EAC1B,qBAAqB,EAAE,OAAO,GAC7B,MAAM,EAAE,CAoBV;AAED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,MAAM,EAC1B,qBAAqB,EAAE,OAAO,GAC7B,MAAM,EAAE,CAUV;AAED;;;;;;;;GAQG;AACH,wBAAgB,iDAAiD,CAC/D,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,MAAM,EAC1B,qBAAqB,EAAE,OAAO,GAC7B,MAAM,EAAE,CAkCV;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAkBnF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMatchingResourceStringsForPolicies = getMatchingResourceStringsForPolicies;
|
|
4
|
+
exports.getResourceStringsFromStatement = getResourceStringsFromStatement;
|
|
5
|
+
exports.statementResourceStringsForResourceTypeAndPattern = statementResourceStringsForResourceTypeAndPattern;
|
|
6
|
+
exports.statementAllowsAction = statementAllowsAction;
|
|
7
|
+
const iam_utils_1 = require("@actsecurity/iam-utils");
|
|
8
|
+
const resourceStrings_js_1 = require("../util/resourceStrings.js");
|
|
9
|
+
/**
|
|
10
|
+
* Extracts matching resource strings from a set of policies for a given action and resource pattern.
|
|
11
|
+
*
|
|
12
|
+
* @param policies Array of policies to search through (undefined entries are skipped)
|
|
13
|
+
* @param action The action to match against policy statements
|
|
14
|
+
* @param resourceType The resource type to filter resource strings by
|
|
15
|
+
* @param resourceArnPattern The resource ARN pattern to match against
|
|
16
|
+
* @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
|
|
17
|
+
* @returns Array of unique resource strings that match the criteria
|
|
18
|
+
*/
|
|
19
|
+
function getMatchingResourceStringsForPolicies(policies, action, resourceType, resourceArnPattern, shouldExpandShortArns) {
|
|
20
|
+
const resourceStrings = new Set();
|
|
21
|
+
for (const policy of policies) {
|
|
22
|
+
if (!policy) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
for (const statement of policy.statements()) {
|
|
26
|
+
const stmtResourceStrings = getResourceStringsFromStatement(statement, action, resourceType, resourceArnPattern, shouldExpandShortArns);
|
|
27
|
+
for (const rs of stmtResourceStrings) {
|
|
28
|
+
resourceStrings.add(rs);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return Array.from(resourceStrings);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Extracts resource strings from a single policy statement that allows the specified action.
|
|
36
|
+
*
|
|
37
|
+
* @param statement The policy statement to analyze
|
|
38
|
+
* @param action The action to check if the statement allows
|
|
39
|
+
* @param resourceType The resource type to filter by
|
|
40
|
+
* @param resourceArnPattern The resource ARN pattern to match
|
|
41
|
+
* @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
|
|
42
|
+
* @returns Array of resource strings from the statement, or empty array if statement doesn't allow the action
|
|
43
|
+
*/
|
|
44
|
+
function getResourceStringsFromStatement(statement, action, resourceType, resourceArnPattern, shouldExpandShortArns) {
|
|
45
|
+
if (statementAllowsAction(statement, action)) {
|
|
46
|
+
return statementResourceStringsForResourceTypeAndPattern(statement, resourceType, resourceArnPattern, shouldExpandShortArns);
|
|
47
|
+
}
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Extracts resource strings from a statement's Resource or NotResource elements that match the given criteria.
|
|
52
|
+
*
|
|
53
|
+
* @param statement The policy statement to analyze
|
|
54
|
+
* @param resourceType The resource type to filter by
|
|
55
|
+
* @param resourceArnPattern The resource ARN pattern to check for overlap
|
|
56
|
+
* @param shouldExpandShortArns Whether to expand short ARNs (fewer than 6 segments) by padding with wildcards
|
|
57
|
+
* @returns Array of matching resource strings, or ['*'] for certain NotResource cases
|
|
58
|
+
*/
|
|
59
|
+
function statementResourceStringsForResourceTypeAndPattern(statement, resourceType, resourceArnPattern, shouldExpandShortArns) {
|
|
60
|
+
if (statement.isResourceStatement() && statement.isAllow()) {
|
|
61
|
+
const resourceStrings = [];
|
|
62
|
+
for (const stmtResource of statement.resources()) {
|
|
63
|
+
const effectiveValue = shouldExpandShortArns
|
|
64
|
+
? (0, resourceStrings_js_1.expandShortArn)(stmtResource.value())
|
|
65
|
+
: stmtResource.value();
|
|
66
|
+
if ((0, iam_utils_1.resourceStringMatchesResourceTypePattern)(effectiveValue, resourceType.arn)) {
|
|
67
|
+
if ((0, resourceStrings_js_1.resourceArnsOverlap)(resourceArnPattern, effectiveValue)) {
|
|
68
|
+
resourceStrings.push(stmtResource.value());
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return resourceStrings;
|
|
73
|
+
}
|
|
74
|
+
if (statement.isNotResourceStatement() && statement.isAllow()) {
|
|
75
|
+
for (const stmtNotResource of statement.notResources()) {
|
|
76
|
+
const effectiveValue = shouldExpandShortArns
|
|
77
|
+
? (0, resourceStrings_js_1.expandShortArn)(stmtNotResource.value())
|
|
78
|
+
: stmtNotResource.value();
|
|
79
|
+
// If any NotResource string equals or is a superset of the resource type pattern, then the statement does not apply to the string. Otherwise, it should return the string '*'
|
|
80
|
+
if (effectiveValue === resourceArnPattern ||
|
|
81
|
+
isResourceArnSuperset(effectiveValue, resourceArnPattern)) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return ['*'];
|
|
86
|
+
}
|
|
87
|
+
// If it's a statement that has no Resource or NotResource such as a trust policy, just return the original pattern
|
|
88
|
+
return [resourceArnPattern];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Determines if a policy statement allows the specified action.
|
|
92
|
+
*
|
|
93
|
+
* @param statement The policy statement to check
|
|
94
|
+
* @param action The action to test against the statement
|
|
95
|
+
* @returns true if the statement allows the action, false otherwise
|
|
96
|
+
*/
|
|
97
|
+
function statementAllowsAction(statement, action) {
|
|
98
|
+
if (statement.isActionStatement() && statement.isAllow()) {
|
|
99
|
+
for (const stmtAction of statement.actions()) {
|
|
100
|
+
if ((0, iam_utils_1.actionMatchesPattern)(action, stmtAction.value())) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
else if (statement.isNotActionStatement() && statement.isAllow()) {
|
|
107
|
+
for (const stmtAction of statement.notActions()) {
|
|
108
|
+
if ((0, iam_utils_1.actionMatchesPattern)(action, stmtAction.value())) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
function isResourceArnSuperset(arnSuperset, arnSubset) {
|
|
117
|
+
const regexSuperset = (0, iam_utils_1.resourceArnWithWildcardsToRegex)(arnSuperset);
|
|
118
|
+
return regexSuperset.test(arnSubset);
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=policyResources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policyResources.js","sourceRoot":"","sources":["../../../src/simulation_engine/policyResources.ts"],"names":[],"mappings":";;AAoBA,sFA0BC;AAYD,0EAgBC;AAWD,8GAuCC;AASD,sDAkBC;AArJD,sDAI+B;AAE/B,mEAAgF;AAEhF;;;;;;;;;GASG;AACH,SAAgB,qCAAqC,CACnD,QAAwC,EACxC,MAAc,EACd,YAA0B,EAC1B,kBAA0B,EAC1B,qBAA8B;IAE9B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAA;IACzC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAQ;QACV,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;YAC5C,MAAM,mBAAmB,GAAG,+BAA+B,CACzD,SAAS,EACT,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,CACtB,CAAA;YACD,KAAK,MAAM,EAAE,IAAI,mBAAmB,EAAE,CAAC;gBACrC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,+BAA+B,CAC7C,SAAoB,EACpB,MAAc,EACd,YAA0B,EAC1B,kBAA0B,EAC1B,qBAA8B;IAE9B,IAAI,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;QAC7C,OAAO,iDAAiD,CACtD,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,CACtB,CAAA;IACH,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,iDAAiD,CAC/D,SAAoB,EACpB,YAA0B,EAC1B,kBAA0B,EAC1B,qBAA8B;IAE9B,IAAI,SAAS,CAAC,mBAAmB,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3D,MAAM,eAAe,GAAa,EAAE,CAAA;QACpC,KAAK,MAAM,YAAY,IAAI,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC;YACjD,MAAM,cAAc,GAAG,qBAAqB;gBAC1C,CAAC,CAAC,IAAA,mCAAc,EAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBACtC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;YACxB,IAAI,IAAA,oDAAwC,EAAC,cAAc,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/E,IAAI,IAAA,wCAAmB,EAAC,kBAAkB,EAAE,cAAc,CAAC,EAAE,CAAC;oBAC5D,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,IAAI,SAAS,CAAC,sBAAsB,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9D,KAAK,MAAM,eAAe,IAAI,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;YACvD,MAAM,cAAc,GAAG,qBAAqB;gBAC1C,CAAC,CAAC,IAAA,mCAAc,EAAC,eAAe,CAAC,KAAK,EAAE,CAAC;gBACzC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;YAC3B,8KAA8K;YAC9K,IACE,cAAc,KAAK,kBAAkB;gBACrC,qBAAqB,CAAC,cAAc,EAAE,kBAAkB,CAAC,EACzD,CAAC;gBACD,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IAED,mHAAmH;IACnH,OAAO,CAAC,kBAAkB,CAAC,CAAA;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,qBAAqB,CAAC,SAAoB,EAAE,MAAc;IACxE,IAAI,SAAS,CAAC,iBAAiB,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QACzD,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,IAAA,gCAAoB,EAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;gBACrD,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,IAAI,SAAS,CAAC,oBAAoB,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QACnE,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;YAChD,IAAI,IAAA,gCAAoB,EAAC,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;gBACrD,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAmB,EAAE,SAAiB;IACnE,MAAM,aAAa,GAAG,IAAA,2CAA+B,EAAC,WAAW,CAAC,CAAA;IAClE,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ResourceType } from '@actsecurity/iam-data';
|
|
2
|
+
/**
|
|
3
|
+
* Get the the possible resource types for an action and resource
|
|
4
|
+
*
|
|
5
|
+
* @param service the service the action belongs to
|
|
6
|
+
* @param action the action to get the resource type for
|
|
7
|
+
* @param resource the resource type matching the action, if any
|
|
8
|
+
* @throws an error if the service or action does not exist, or if the action is a wildcard only action
|
|
9
|
+
*/
|
|
10
|
+
export declare function getResourceTypesForAction(service: string, action: string, resource: string): Promise<ResourceType[]>;
|
|
11
|
+
//# sourceMappingURL=resourceTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceTypes.d.ts","sourceRoot":"","sources":["../../../src/simulation_engine/resourceTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAA;AAG9B;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBzB"}
|