@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
package/README.md
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# IAM Simulate
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@cloud-copilot/iam-simulate) [](LICENSE.txt) [](https://github.com/cloud-copilot/iam-simulate/actions/workflows/guarddog.yml) [](https://snyk.io/test/github/cloud-copilot/iam-simulate?targetFile=package.json)
|
|
4
|
+
|
|
5
|
+
An AWS IAM Simulator and Policy Tester built as a Node/Typescript library.
|
|
6
|
+
|
|
7
|
+
The simulator currently supports these features of AWS IAM
|
|
8
|
+
|
|
9
|
+
### IAM Feature Support
|
|
10
|
+
|
|
11
|
+
- Identity Policies
|
|
12
|
+
- Resource Policies
|
|
13
|
+
- Service Control Policies
|
|
14
|
+
- Resource Control Policies
|
|
15
|
+
- Permission Boundaries
|
|
16
|
+
- All [AWS Condition Operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)
|
|
17
|
+
- Same Account and Cross Account Requests
|
|
18
|
+
- Custom trust behavior for IAM Trust Policies and KMS Key Policies
|
|
19
|
+
|
|
20
|
+
### Request Validation
|
|
21
|
+
|
|
22
|
+
iam-simulate will automatically validate inputs including
|
|
23
|
+
|
|
24
|
+
- IAM policies using [iam-policy](https://github.com/cloud-copilot/iam-policy)
|
|
25
|
+
- IAM Actions using [iam-data](https://github.com/cloud-copilot/iam-data)
|
|
26
|
+
- The resource ARN against allowed resource types for the action
|
|
27
|
+
- The context keys allowed for the action/resource and their types.
|
|
28
|
+
|
|
29
|
+
Currently all [global condition keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) are allowed for all requests which is not strictly true. More validation will be added in the future.
|
|
30
|
+
|
|
31
|
+
### Explanation
|
|
32
|
+
|
|
33
|
+
iam-simulate will detail which statements were decisive in the final decision to allow or deny a request.
|
|
34
|
+
|
|
35
|
+
It will also return "explains" for each statement that was evaluated, detailing why that statement applied to the request or not.
|
|
36
|
+
|
|
37
|
+
### Features Coming Soon
|
|
38
|
+
|
|
39
|
+
- Session Policies
|
|
40
|
+
- Validation of Global Condition Keys for each action
|
|
41
|
+
- Automatically populating context keys from the request such as `aws:PrincipalServiceName`
|
|
42
|
+
|
|
43
|
+
### Anonymous Requests
|
|
44
|
+
|
|
45
|
+
Use `anonymousPrincipal` to simulate unsigned requests, such as public S3 object access granted by a bucket policy. Anonymous requests do not have identity policies, session policies, permission boundaries, or SCPs; those principal-side policy inputs are rejected by `runSimulation`.
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { anonymousPrincipal, runSimulation, type Simulation } from '@cloud-copilot/iam-simulate'
|
|
49
|
+
|
|
50
|
+
const simulation: Simulation = {
|
|
51
|
+
request: {
|
|
52
|
+
principal: anonymousPrincipal,
|
|
53
|
+
action: 's3:GetObject',
|
|
54
|
+
resource: {
|
|
55
|
+
resource: 'arn:aws:s3:::public-bucket/file.txt',
|
|
56
|
+
accountId: '123456789012'
|
|
57
|
+
},
|
|
58
|
+
contextVariables: {}
|
|
59
|
+
},
|
|
60
|
+
identityPolicies: [],
|
|
61
|
+
serviceControlPolicies: [],
|
|
62
|
+
resourceControlPolicies: [],
|
|
63
|
+
resourcePolicy: {
|
|
64
|
+
Version: '2012-10-17',
|
|
65
|
+
Statement: [
|
|
66
|
+
{
|
|
67
|
+
Effect: 'Allow',
|
|
68
|
+
Principal: '*',
|
|
69
|
+
Action: 's3:GetObject',
|
|
70
|
+
Resource: 'arn:aws:s3:::public-bucket/*'
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const response = await runSimulation(simulation, {})
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### S3 Block Public Access
|
|
80
|
+
|
|
81
|
+
For S3 requests, callers can provide the effective `RestrictPublicBuckets` setting with `additionalSettings.s3.blockPublicAccess`. iam-simulate does not fetch or determine this setting; provide `true` only when S3 Block Public Access should apply for the bucket/account being simulated.
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
const simulation: Simulation = {
|
|
85
|
+
// request and policies...
|
|
86
|
+
additionalSettings: {
|
|
87
|
+
s3: {
|
|
88
|
+
blockPublicAccess: true
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
When enabled, public S3 bucket policies can block anonymous and cross-account access with `blockedBy: ['s3-bpa']`.
|
|
95
|
+
|
|
96
|
+
## Installation
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm install @cloud-copilot/iam-simulate
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Usage
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
import { runSimulation, type Simulation } from '@cloud-copilot/iam-simulate'
|
|
106
|
+
|
|
107
|
+
const simulation: Simulation = {
|
|
108
|
+
identityPolicies: [
|
|
109
|
+
{
|
|
110
|
+
name: 'userpolicy',
|
|
111
|
+
policy: {
|
|
112
|
+
Version: '2012-10-17',
|
|
113
|
+
Statement: [
|
|
114
|
+
{
|
|
115
|
+
Effect: 'Allow',
|
|
116
|
+
Action: ['s3:GetObject'],
|
|
117
|
+
Resource: ['arn:aws:s3:::mybucket/*']
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
],
|
|
123
|
+
serviceControlPolicies: [
|
|
124
|
+
{
|
|
125
|
+
orgIdentifier: 'ou-12345',
|
|
126
|
+
policies: [
|
|
127
|
+
{
|
|
128
|
+
name: 'AllowAll',
|
|
129
|
+
policy: {
|
|
130
|
+
Version: '2012-10-17',
|
|
131
|
+
Statement: [
|
|
132
|
+
{
|
|
133
|
+
Effect: 'Allow',
|
|
134
|
+
Action: '*',
|
|
135
|
+
Resource: '*'
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
],
|
|
143
|
+
/*
|
|
144
|
+
The default RCP `RCPFullAWSAccess` is always applied implicitly and you do not need to include it here. https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps_examples.html#example-rcp-full-aws-access
|
|
145
|
+
*/
|
|
146
|
+
resourceControlPolicies: [
|
|
147
|
+
{
|
|
148
|
+
orgIdentifier: 'o-123456789012',
|
|
149
|
+
policies: [
|
|
150
|
+
{
|
|
151
|
+
name: 'EnforceSecureTransport',
|
|
152
|
+
policy: {
|
|
153
|
+
Version: '2012-10-17',
|
|
154
|
+
Statement: [
|
|
155
|
+
{
|
|
156
|
+
Sid: 'EnforceSecureTransport',
|
|
157
|
+
Effect: 'Deny',
|
|
158
|
+
Principal: '*',
|
|
159
|
+
Action: ['sts:*', 's3:*', 'sqs:*', 'secretsmanager:*', 'kms:*'],
|
|
160
|
+
Resource: '*',
|
|
161
|
+
Condition: {
|
|
162
|
+
BoolIfExists: {
|
|
163
|
+
'aws:SecureTransport': 'false'
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
],
|
|
173
|
+
resourcePolicy: {
|
|
174
|
+
Version: '2012-10-17',
|
|
175
|
+
Statement: [
|
|
176
|
+
{
|
|
177
|
+
Effect: 'Allow',
|
|
178
|
+
Action: ['s3:GetObject'],
|
|
179
|
+
Resource: ['arn:aws:s3:::mybucket/*'],
|
|
180
|
+
Principal: 'aws:arn:iam::123456789012:root',
|
|
181
|
+
Condition: {
|
|
182
|
+
StringEquals: {
|
|
183
|
+
'aws:PrincipalOrgID': 'o-123456789012'
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
request: {
|
|
190
|
+
action: 's3:GetObject',
|
|
191
|
+
principal: 'arn:aws:iam::123456789012:user/username',
|
|
192
|
+
resource: {
|
|
193
|
+
accountId: '123456789012',
|
|
194
|
+
resource: 'arn:aws:s3:::mybucket/file.txt'
|
|
195
|
+
},
|
|
196
|
+
contextVariables: {
|
|
197
|
+
'aws:PrincipalOrgID': 'o-123456789012'
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
`runSimulation` returns a discriminated union with `resultType`:
|
|
203
|
+
|
|
204
|
+
- `resultType: 'error'` includes `errors` and no simulation results.
|
|
205
|
+
- `resultType: 'single'` includes `overallResult` and a single `result`.
|
|
206
|
+
- `resultType: 'wildcard'` includes `overallResult` and `results` for each matching pattern.
|
|
207
|
+
|
|
208
|
+
const response = await runSimulation(simulation, {})
|
|
209
|
+
//Check for validation errors (errors are returned at the response level):
|
|
210
|
+
if (response.resultType === 'error') {
|
|
211
|
+
console.log(response.errors.message)
|
|
212
|
+
console.log(JSON.stringify(response.errors, null, 2))
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
//The simulation ran successfully
|
|
216
|
+
if (response.resultType === 'single') {
|
|
217
|
+
const result = response.result
|
|
218
|
+
console.log(response.overallResult) // 'Allowed', 'ExplicitlyDenied', or 'ImplicitlyDenied'
|
|
219
|
+
console.log(result.analysis?.result)
|
|
220
|
+
|
|
221
|
+
//Output the identity statements that allowed the request
|
|
222
|
+
const identityAllowExplains =
|
|
223
|
+
result?.analysis?.identityAnalysis?.allowStatements.map((s) => s.explain) || []
|
|
224
|
+
//Show which statements applied and exactly how.
|
|
225
|
+
for (const explain of identityAllowExplains) {
|
|
226
|
+
console.log(explain)
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (response.resultType === 'wildcard') {
|
|
231
|
+
console.log(response.overallResult)
|
|
232
|
+
for (const result of response.results) {
|
|
233
|
+
console.log(result.resourcePattern, result.analysis?.result)
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
This would output an explain that shows how the identity statement was evaluated:
|
|
239
|
+
|
|
240
|
+
```javascript
|
|
241
|
+
{
|
|
242
|
+
effect: 'Allow',
|
|
243
|
+
identifier: '1',
|
|
244
|
+
matches: true,
|
|
245
|
+
actionMatch: true,
|
|
246
|
+
principalMatch: 'Match',
|
|
247
|
+
resourceMatch: true,
|
|
248
|
+
conditionMatch: true,
|
|
249
|
+
resources: [
|
|
250
|
+
{
|
|
251
|
+
resource: 'arn:aws:s3:::mybucket/*',
|
|
252
|
+
matches: true,
|
|
253
|
+
}
|
|
254
|
+
],
|
|
255
|
+
actions: [ { action: 's3:GetObject', matches: true } ],
|
|
256
|
+
}
|
|
257
|
+
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type Condition, type Statement } from '@actsecurity/iam-policy';
|
|
2
|
+
import { type ConditionMatchResult } from './condition/condition.js';
|
|
3
|
+
import { type StatementExplain } from './explain/statementExplain.js';
|
|
4
|
+
import { type PrincipalMatchResult } from './principal/principal.js';
|
|
5
|
+
/**
|
|
6
|
+
* The result of analyzing a statement against a request.
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export interface StatementAnalysis {
|
|
10
|
+
/**
|
|
11
|
+
* The identifier of the policy that contains the statement.
|
|
12
|
+
*/
|
|
13
|
+
policyId: string;
|
|
14
|
+
/**
|
|
15
|
+
* The statement being analyzed.
|
|
16
|
+
*/
|
|
17
|
+
statement: Statement;
|
|
18
|
+
/**
|
|
19
|
+
* Whether the Resource or NotResource – if any – matches the request.
|
|
20
|
+
*/
|
|
21
|
+
resourceMatch: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Whether the Action or NotAction matches the request.
|
|
24
|
+
*/
|
|
25
|
+
actionMatch: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Whether the Principal or NotPrincipal – if any – matches the request.
|
|
28
|
+
*/
|
|
29
|
+
principalMatch: PrincipalMatchResult;
|
|
30
|
+
/**
|
|
31
|
+
* Whether the Conditions matches the request.
|
|
32
|
+
*/
|
|
33
|
+
conditionMatch: ConditionMatchResult;
|
|
34
|
+
/**
|
|
35
|
+
* The explain of evaluating the statement.
|
|
36
|
+
*/
|
|
37
|
+
explain: StatementExplain;
|
|
38
|
+
/**
|
|
39
|
+
* Any conditions that were ignored during discovery mode.
|
|
40
|
+
*/
|
|
41
|
+
ignoredConditions?: Condition[];
|
|
42
|
+
/**
|
|
43
|
+
* Role Session Name ignored during discovery mode.
|
|
44
|
+
*/
|
|
45
|
+
ignoredRoleSessionName?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Checks if a statement is an identity statement that allows the request.
|
|
49
|
+
*
|
|
50
|
+
* @param statement The statement to check.
|
|
51
|
+
* @returns Whether the statement is an identity statement that allows the request.
|
|
52
|
+
*/
|
|
53
|
+
export declare function identityStatementAllows(statement: StatementAnalysis): boolean;
|
|
54
|
+
export declare function identityStatementExplicitDeny(statement: StatementAnalysis): boolean;
|
|
55
|
+
export declare function statementMatches(analysis: Pick<StatementAnalysis, 'actionMatch' | 'conditionMatch' | 'principalMatch' | 'resourceMatch'>): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Determines whether ignored conditions are decisive for a statement and should be reported.
|
|
58
|
+
*
|
|
59
|
+
* @param analysis the analysis of the statement
|
|
60
|
+
* @returns true if the ignored conditions are decisive, false otherwise
|
|
61
|
+
*/
|
|
62
|
+
export declare function reportIgnoredConditions(analysis: Pick<StatementAnalysis, 'actionMatch' | 'principalMatch' | 'resourceMatch'>): boolean;
|
|
63
|
+
//# sourceMappingURL=StatementAnalysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementAnalysis.d.ts","sourceRoot":"","sources":["../../src/StatementAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAEpE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,SAAS,EAAE,SAAS,CAAA;IAEpB;;OAEG;IACH,aAAa,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAA;IAEpB;;OAEG;IACH,cAAc,EAAE,oBAAoB,CAAA;IAEpC;;OAEG;IACH,cAAc,EAAE,oBAAoB,CAAA;IAEpC;;OAEG;IACH,OAAO,EAAE,gBAAgB,CAAA;IAEzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAA;IAE/B;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAU7E;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAUnF;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,IAAI,CACZ,iBAAiB,EACjB,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,eAAe,CACtE,GACA,OAAO,CAST;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,GAAG,gBAAgB,GAAG,eAAe,CAAC,GACpF,OAAO,CAQT"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.identityStatementAllows = identityStatementAllows;
|
|
4
|
+
exports.identityStatementExplicitDeny = identityStatementExplicitDeny;
|
|
5
|
+
exports.statementMatches = statementMatches;
|
|
6
|
+
exports.reportIgnoredConditions = reportIgnoredConditions;
|
|
7
|
+
/**
|
|
8
|
+
* Checks if a statement is an identity statement that allows the request.
|
|
9
|
+
*
|
|
10
|
+
* @param statement The statement to check.
|
|
11
|
+
* @returns Whether the statement is an identity statement that allows the request.
|
|
12
|
+
*/
|
|
13
|
+
function identityStatementAllows(statement) {
|
|
14
|
+
if (statement.resourceMatch &&
|
|
15
|
+
statement.actionMatch &&
|
|
16
|
+
statement.conditionMatch === 'Match' &&
|
|
17
|
+
statement.statement.effect() === 'Allow') {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
function identityStatementExplicitDeny(statement) {
|
|
23
|
+
if (statement.resourceMatch &&
|
|
24
|
+
statement.actionMatch &&
|
|
25
|
+
statement.conditionMatch === 'Match' &&
|
|
26
|
+
statement.statement.effect() === 'Deny') {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
function statementMatches(analysis) {
|
|
32
|
+
return (analysis.resourceMatch &&
|
|
33
|
+
analysis.actionMatch &&
|
|
34
|
+
analysis.conditionMatch === 'Match' &&
|
|
35
|
+
['Match', 'AccountLevelMatch', 'SessionRoleMatch', 'SessionUserMatch'].includes(analysis.principalMatch));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Determines whether ignored conditions are decisive for a statement and should be reported.
|
|
39
|
+
*
|
|
40
|
+
* @param analysis the analysis of the statement
|
|
41
|
+
* @returns true if the ignored conditions are decisive, false otherwise
|
|
42
|
+
*/
|
|
43
|
+
function reportIgnoredConditions(analysis) {
|
|
44
|
+
return (analysis.resourceMatch &&
|
|
45
|
+
analysis.actionMatch &&
|
|
46
|
+
['Match', 'AccountLevelMatch', 'SessionRoleMatch', 'SessionUserMatch'].includes(analysis.principalMatch));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=StatementAnalysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatementAnalysis.js","sourceRoot":"","sources":["../../src/StatementAnalysis.ts"],"names":[],"mappings":";;AA8DA,0DAUC;AAED,sEAUC;AAED,4CAcC;AAQD,0DAUC;AA9DD;;;;;GAKG;AACH,SAAgB,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,SAAgB,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,SAAgB,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,SAAgB,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,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requestMatchesStatementActions = requestMatchesStatementActions;
|
|
4
|
+
exports.requestMatchesActions = requestMatchesActions;
|
|
5
|
+
exports.requestMatchesNotActions = requestMatchesNotActions;
|
|
6
|
+
const whitespaceRegex = /\s/;
|
|
7
|
+
/**
|
|
8
|
+
* Check if a request matches the Action or NotAction elements of a statement.
|
|
9
|
+
*
|
|
10
|
+
* @param request the request to check
|
|
11
|
+
* @param statement the statement to check against
|
|
12
|
+
* @returns true if the request matches the Action or NotAction in the statement, false otherwise
|
|
13
|
+
*/
|
|
14
|
+
function requestMatchesStatementActions(request, statement) {
|
|
15
|
+
if (statement.isActionStatement()) {
|
|
16
|
+
const { matches, explains } = requestMatchesActions(request, statement.actions());
|
|
17
|
+
if (!statement.actionIsArray()) {
|
|
18
|
+
return { matches, details: { actions: explains[0] } };
|
|
19
|
+
}
|
|
20
|
+
return { matches, details: { actions: explains } };
|
|
21
|
+
}
|
|
22
|
+
else if (statement.isNotActionStatement()) {
|
|
23
|
+
const { matches, explains } = requestMatchesNotActions(request, statement.notActions());
|
|
24
|
+
if (!statement.notActionIsArray()) {
|
|
25
|
+
return { matches, details: { notActions: explains[0] } };
|
|
26
|
+
}
|
|
27
|
+
return { matches, details: { notActions: explains } };
|
|
28
|
+
}
|
|
29
|
+
throw new Error('Statement has neither Actions nor NotActions');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Convert an action action (the part after the colon) to a regular expression.
|
|
33
|
+
*
|
|
34
|
+
* @param action the action to convert to a regular expression
|
|
35
|
+
* @returns a regular that replaces any wildcards in the action with the appropriate regular expression.
|
|
36
|
+
*/
|
|
37
|
+
function convertActionToRegex(action) {
|
|
38
|
+
if (action.indexOf(':') != -1) {
|
|
39
|
+
throw new Error('Action should not contain a colon');
|
|
40
|
+
}
|
|
41
|
+
const pattern = '^' + action.replace(/\?/g, '.').replace(/\*/g, '.*?') + '$';
|
|
42
|
+
return new RegExp(pattern, 'i');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if a request matches a set of actions.
|
|
46
|
+
*
|
|
47
|
+
* @param request the request to check
|
|
48
|
+
* @param actions the actions to check against
|
|
49
|
+
* @returns true if the request matches any of the actions, false otherwise
|
|
50
|
+
*/
|
|
51
|
+
function requestMatchesActions(request, actions) {
|
|
52
|
+
const explains = actions.map((action) => requestMatchesSingleAction(request, action));
|
|
53
|
+
const matches = explains.some((explain) => explain.matches);
|
|
54
|
+
return { matches, explains };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if a request does not match a set of actions.
|
|
58
|
+
*
|
|
59
|
+
* @param request the request to check
|
|
60
|
+
* @param actions the actions to check against
|
|
61
|
+
* @returns true if the request does not match any of the actions, false if the request matches any of the actions
|
|
62
|
+
*/
|
|
63
|
+
function requestMatchesNotActions(request, actions) {
|
|
64
|
+
const explains = actions.map((action) => {
|
|
65
|
+
const explain = requestMatchesSingleAction(request, action);
|
|
66
|
+
explain.matches = !explain.matches;
|
|
67
|
+
return explain;
|
|
68
|
+
});
|
|
69
|
+
const matches = !explains.some((explain) => !explain.matches);
|
|
70
|
+
return { matches, explains };
|
|
71
|
+
}
|
|
72
|
+
function requestMatchesSingleAction(request, action) {
|
|
73
|
+
if (action.isWildcardAction()) {
|
|
74
|
+
return {
|
|
75
|
+
action: action.value(),
|
|
76
|
+
matches: true
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
else if (action.isServiceAction()) {
|
|
80
|
+
const actionPart = action.action();
|
|
81
|
+
if (actionPart.length === 0 || whitespaceRegex.test(actionPart)) {
|
|
82
|
+
return {
|
|
83
|
+
action: action.value(),
|
|
84
|
+
matches: false
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
if (request.action.service() != action.service()) {
|
|
88
|
+
return {
|
|
89
|
+
action: action.value(),
|
|
90
|
+
matches: false
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const actionRegex = convertActionToRegex(actionPart);
|
|
94
|
+
const matches = actionRegex.test(request.action.action());
|
|
95
|
+
return {
|
|
96
|
+
action: action.value(),
|
|
97
|
+
matches
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
throw new Error('Unknown action type');
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/action/action.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|