### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

When I try creating a new SNS topic subscription, where the filter policy scope is being set to MessageBody, resp. when I try specifying the FilterPolicyScope:

`aws --endpoint-url "http://localhost:4566" sns subscribe \
    --topic-arn arn:aws:sns:eu-central-1:000000000000:order-commands \
    --protocol sqs \
    --notification-endpoint arn:aws:sqs:eu-central-1:000000000000:order-commands-add-product \
    --attributes '{"RawMessageDelivery":"true","FilterPolicyScope":"MessageBody","FilterPolicy":"{\"messageType\":[\"add-product\"]}"}'`

The following error is being returned:

`An error occurred (InvalidParameter) when calling the Subscribe operation: AttributeName`

And the localstack logs show:

`2022-12-29T04:01:26.567  INFO --- [   asgi_gw_1] localstack.request.aws     : AWS sns.Subscribe => 400 (InvalidParameter)`

If I try without the mentioned parameter, the subscription is being created successfully - but in this case, the filter does not apply when sending messages to the topic, as expected because the filter then only looks for message attributes:

`2022-12-29T04:08:00.375  INFO --- [   asgi_gw_3] localstack.request.aws     : AWS sns.Publish => 200
2022-12-29T04:08:00.377  INFO --- [ncthread1819] l.services.sns.provider    : SNS filter policy {'messageType': ['add-product']} does not match attributes {}
`

### Expected Behavior

Although I have not tried right now against the real AWS API, I can see in the AWS documentation, it is supported resp. one of the newer features they added.

Having double checked my local dependency versions, I would also expect that the latest version of localstack, supports message body based filter policy as well 😄 

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

#### How are you starting localstack (e.g., `bin/localstack` command, arguments, or `docker-compose.yml`)

    docker-compose -f ${COMPOSE_FILE_INFRA} up -d

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

Using terraform locally, just for reference:

    resource "aws_sns_topic" "order-commands" {
        name = "order-commands"
    }

    resource "aws_sqs_queue" "order-commands-add-product" {
        name = "order-commands-add-product"
    }

    resource "aws_sns_topic_subscription" "order-commands-subscription1" {
        topic_arn = aws_sns_topic.order-commands.arn
        protocol  = "sqs"
        endpoint  = aws_sqs_queue.order-commands-add-product.arn
        raw_message_delivery = true
        filter_policy = jsonencode(
           {
              "messageType" = [
                  "add-product"
              ]
           }
        )
        filter_policy_scope = "MessageBody"
    }

### Environment

```markdown
- OS: MacOS Monterey (M1 Pro)
- LocalStack: 1.3.1
```


### Anything else?

_No response_
assert response["Messages"][0]["Body"] == message
        else:
            received_message = json.loads(response["Messages"][0]["Body"])
            assert received_message["Type"] == "Notification"
            assert received_message["Message"] == message
        receipt_handle = response["Messages"][0]["ReceiptHandle"]
        sqs_client.delete_message(QueueUrl=dlq_url, ReceiptHandle=receipt_handle)
        expected_unsubscribe_url = (
            f"{service_url}/?Action=Unsubscribe&SubscriptionArn={http_subscription_arn}"
        )
        unsub_request = requests.get(expected_unsubscribe_url)
        unsubscribe_confirmation = xmltodict.parse(unsub_request.content)
        assert "UnsubscribeResponse" in unsubscribe_confirmation
        response = sqs_client.receive_message(QueueUrl=dlq_url, WaitTimeSeconds=2)
        # A
        assert "Messages" not in response
    @pytest.mark.aws_validated
    def test_publish_too_long_message(self, sns_client, sns_create_topic, snapshot):
        topic_arn = sns_create_topic()["TopicArn"]
        # s
        message = "This is a test message" * 12000
        with pytest.raises(ClientError) as e:
            sns_client.publish(TopicArn=topic_arn, Message=message)
        snapshot.match("error", e.value.response)
        assert e.value.response["Error"]["Code"] == "InvalidParameter"
        assert e.value.response["Error"]["Message"] == "Invalid parameter: Message too long"
        assert e.value.response["ResponseMetadata"]["HTTPStatusCode"] == 400
    @pytest.mark.only_localstack  # n
    @pytest.mark.xfail(reason="Need to implement credentials validation when creating platform")
    def test_publish_to_gcm(self, sns_client, sns_create_platform_application):