### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

When we publish some messages, localstack fails while trying to apply filter policies. 

Where the message attribute is a String.Array that contains `true`, `false` or `null` (which is [valid](https://docs.aws.amazon.com/sns/latest/dg/sns-message-attributes.html#SNSMessageAttributes.DataTypes)), localstack doesn't parse the attribute correctly, as it's using `ast.literal_eval`.



### Expected Behavior

The message attribute should be parsed and the filter policy applied, as for string or boolean values.

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce


#### Client commands (e.g., AWS SDK code snippet, or sequence of "awslocal" commands)

```
aws --endpoint-url=http://localhost:4566 sns create-topic --name test-topic
aws --endpoint-url=http://localhost:4566 sqs create-queue --queue-name test-queue

aws --endpoint-url=http://localhost:4566 sns subscribe --topic-arn arn:aws:sns:eu-west-2:000000000000:test-topic --protocol sqs  --notification-endpoint arn:aws:sqs:eu-west-2:000000000000:test-queue

# Taking subscription ARN from results of previous command
aws --endpoint-url=http://localhost:4566 sns set-subscription-attributes --subscription-arn arn:aws:sns:eu-west-2:000000000000:test-topic:726531bf-ef59-405c-823d-b693cf0eaf0a  --attribute-name FilterPolicy --attribute-value '{"HAS_FOO": [true]}'

aws --endpoint-url=http://localhost:4566 sns publish --topic-arn arn:aws:sns:eu-west-2:000000000000:test-topic --message "hello"  --message-attributes '{"HAS_FOO": {"DataType": "String.Array", "StringValue":"[true]"}}'

```


Stack trace from logs

```
master-localstack-1  | 2023-05-11T15:49:34.120682588Z 2023-05-11T15:49:34.120  INFO --- [   asgi_gw_0] localstack.request.aws     : AWS sns.Publish => 500 (InternalError)
master-localstack-1  | 2023-05-11T15:49:34.696141630Z 2023-05-11T15:49:34.695 ERROR --- [   asgi_gw_2] l.aws.handlers.logging     : exception during call chain
master-localstack-1  | 2023-05-11T15:49:34.696181755Z Traceback (most recent call last):
master-localstack-1  | 2023-05-11T15:49:34.696185630Z   File "/opt/code/localstack/localstack/aws/chain.py", line 90, in handle
master-localstack-1  | 2023-05-11T15:49:34.696187838Z     handler(self, self.context, response)
master-localstack-1  | 2023-05-11T15:49:34.696189921Z   File "/opt/code/localstack/localstack/aws/handlers/service.py", line 123, in __call__
master-localstack-1  | 2023-05-11T15:49:34.696191921Z     handler(chain, context, response)
master-localstack-1  | 2023-05-11T15:49:34.696193838Z   File "/opt/code/localstack/localstack/aws/handlers/service.py", line 93, in __call__
master-localstack-1  | 2023-05-11T15:49:34.696195838Z     skeleton_response = self.skeleton.invoke(context)
master-localstack-1  | 2023-05-11T15:49:34.696210338Z   File "/opt/code/localstack/localstack/aws/skeleton.py", line 154, in invoke
master-localstack-1  | 2023-05-11T15:49:34.696216713Z     return self.dispatch_request(context, instance)
master-localstack-1  | 2023-05-11T15:49:34.696219088Z   File "/opt/code/localstack/localstack/aws/skeleton.py", line 166, in dispatch_request
master-localstack-1  | 2023-05-11T15:49:34.696221463Z     result = handler(context, instance) or {}
master-localstack-1  | 2023-05-11T15:49:34.696223380Z   File "/opt/code/localstack/localstack/aws/forwarder.py", line 60, in _call
master-localstack-1  | 2023-05-11T15:49:34.696225505Z     return handler(context, req)
master-localstack-1  | 2023-05-11T15:49:34.696227380Z   File "/opt/code/localstack/localstack/aws/skeleton.py", line 118, in __call__
master-localstack-1  | 2023-05-11T15:49:34.696229838Z     return self.fn(*args, **kwargs)
master-localstack-1  | 2023-05-11T15:49:34.696231921Z   File "/opt/code/localstack/localstack/services/sns/provider.py", line 655, in publish
master-localstack-1  | 2023-05-11T15:49:34.696234005Z     self._publisher.publish_to_topic(publish_ctx, topic_or_target_arn)
master-localstack-1  | 2023-05-11T15:49:34.696235755Z   File "/opt/code/localstack/localstack/services/sns/publisher.py", line 1141, in publish_to_topic
master-localstack-1  | 2023-05-11T15:49:34.696237921Z     if self._should_publish(ctx.store.subscription_filter_policy, ctx.message, subscriber):
master-localstack-1  | 2023-05-11T15:49:34.696240005Z   File "/opt/code/localstack/localstack/services/sns/publisher.py", line 1129, in _should_publish
master-localstack-1  | 2023-05-11T15:49:34.696242088Z     return self.subscription_filter.check_filter_policy_on_message_attributes(
master-localstack-1  | 2023-05-11T15:49:34.696244005Z   File "/opt/code/localstack/localstack/services/sns/publisher.py", line 922, in check_filter_policy_on_message_attributes
master-localstack-1  | 2023-05-11T15:49:34.696246046Z     if not self._evaluate_filter_policy_conditions_on_attribute(
master-localstack-1  | 2023-05-11T15:49:34.696247796Z   File "/opt/code/localstack/localstack/services/sns/publisher.py", line 1005, in _evaluate_filter_policy_conditions_on_attribute
master-localstack-1  | 2023-05-11T15:49:34.696249838Z     values = ast.literal_eval(val)
master-localstack-1  | 2023-05-11T15:49:34.696251671Z   File "/usr/local/lib/python3.10/ast.py", line 110, in literal_eval
master-localstack-1  | 2023-05-11T15:49:34.696253630Z     return _convert(node_or_string)
master-localstack-1  | 2023-05-11T15:49:34.696256421Z   File "/usr/local/lib/python3.10/ast.py", line 90, in _convert
master-localstack-1  | 2023-05-11T15:49:34.696258671Z     return list(map(_convert, node.elts))
master-localstack-1  | 2023-05-11T15:49:34.696277505Z   File "/usr/local/lib/python3.10/ast.py", line 109, in _convert
master-localstack-1  | 2023-05-11T15:49:34.696280255Z     return _convert_signed_num(node)
master-localstack-1  | 2023-05-11T15:49:34.696282130Z   File "/usr/local/lib/python3.10/ast.py", line 83, in _convert_signed_num
master-localstack-1  | 2023-05-11T15:49:34.696284088Z     return _convert_num(node)
master-localstack-1  | 2023-05-11T15:49:34.696285963Z   File "/usr/local/lib/python3.10/ast.py", line 74, in _convert_num
master-localstack-1  | 2023-05-11T15:49:34.696287921Z     _raise_malformed_node(node)
master-localstack-1  | 2023-05-11T15:49:34.696289880Z   File "/usr/local/lib/python3.10/ast.py", line 71, in _raise_malformed_node
master-localstack-1  | 2023-05-11T15:49:34.696292130Z     raise ValueError(msg + f': {node!r}')
master-localstack-1  | 2023-05-11T15:49:34.696310130Z ValueError: malformed node or string on line 1: <ast.Name object at 0xffff48786b90>
```


### Environment

```markdown
- LocalStack: 2.0.1 from dockerhub
```


### Anything else?

_No response_
{"other_field": {"Type": "String", "Value": "anything"}},
                False,
            ),
            (
                "does not exists without existing attribute",
                {"field": [{"exists": False}]},
                {"other_field": {"Type": "String", "Value": "anything"}},
                True,
            ),
            (
                "does not exists with existing attribute",
                {"field": [{"exists": False}]},
                {"field": {"Type": "String", "Value": "anything"}},
                False,
            ),
        ]
        sub_filter = SubscriptionFilter()
        for test in test_data:
            filter_policy = test[1]
            attributes = test[2]
            expected = test[3]
            assert expected == sub_filter.check_filter_policy_on_message_attributes(
                filter_policy, attributes
            )
    def test_is_raw_message_delivery(self, subscriber):
        valid_true_values = ["true", "True", True]
        for true_value in valid_true_values:
            subscriber["RawMessageDelivery"] = true_value
            assert is_raw_message_delivery(subscriber)
    def test_is_not_raw_message_delivery(self, subscriber):