diff --git a/samtranslator/model/api/api_generator.py b/samtranslator/model/api/api_generator.py index b79885023e..f6587e9d85 100644 --- a/samtranslator/model/api/api_generator.py +++ b/samtranslator/model/api/api_generator.py @@ -702,6 +702,9 @@ def _add_auth(self): self._set_default_apikey_required(swagger_editor) if auth_properties.ResourcePolicy: + SwaggerEditor.validate_is_dict( + auth_properties.ResourcePolicy, "ResourcePolicy must be a map (ResourcePolicyStatement)." + ) for path in swagger_editor.iter_on_path(): swagger_editor.add_resource_policy(auth_properties.ResourcePolicy, path, self.stage_name) if auth_properties.ResourcePolicy.get("CustomStatements"): diff --git a/tests/translator/input/error_resource_policy_not_dict_empty_api.yaml b/tests/translator/input/error_resource_policy_not_dict_empty_api.yaml new file mode 100644 index 0000000000..d81711c202 --- /dev/null +++ b/tests/translator/input/error_resource_policy_not_dict_empty_api.yaml @@ -0,0 +1,25 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: Bad, bad resource policy +Resources: + APIGatewayVpcEndpoint: + Type: AWS::EC2::VPCEndpoint + Properties: + SubnetIds: + - subnet-01234567 + - subnet-12345678 + SecurityGroupIds: + - sg-0a0a0a0a0a0a0a0a0 + ServiceName: com.amazonaws.eu-west-1.execute-api + VpcId: vpc-0a0a0a0a + VpcEndpointType: Interface + PrivateDnsEnabled: false + ServerlessApi: + Type: AWS::Serverless::Api + Properties: + StageName: prod + EndpointConfiguration: + Type: PRIVATE + VPCEndpointIds: + - Ref: APIGatewayVpcEndpoint + Auth: + ResourcePolicy: IntrinsicVpceWhitelist:! Ref APIGatewayVpcEndpoint diff --git a/tests/translator/output/error_resource_policy_not_dict.json b/tests/translator/output/error_resource_policy_not_dict.json index 7595d16c4f..5ed2d9c8ad 100644 --- a/tests/translator/output/error_resource_policy_not_dict.json +++ b/tests/translator/output/error_resource_policy_not_dict.json @@ -1,3 +1,3 @@ { - "errorMessage": "Invalid Serverless Application Specification document. Number of errors found: 1. Structure of the SAM template is invalid. Resource Policy is not a valid dictionary." + "errorMessage": "Invalid Serverless Application Specification document. Number of errors found: 1. Structure of the SAM template is invalid. ResourcePolicy must be a map (ResourcePolicyStatement)." } \ No newline at end of file diff --git a/tests/translator/output/error_resource_policy_not_dict_empty_api.json b/tests/translator/output/error_resource_policy_not_dict_empty_api.json new file mode 100644 index 0000000000..5ed2d9c8ad --- /dev/null +++ b/tests/translator/output/error_resource_policy_not_dict_empty_api.json @@ -0,0 +1,3 @@ +{ + "errorMessage": "Invalid Serverless Application Specification document. Number of errors found: 1. Structure of the SAM template is invalid. ResourcePolicy must be a map (ResourcePolicyStatement)." +} \ No newline at end of file