### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

copyObject and putObject (and perhaps other requests) requests are accepted and do not return an error when an SSE KMS key is specified. 

### Expected Behavior

The error which should be returned is KMS.NotFoundException.

### How are you starting LocalStack?

Custom (please describe below)

### Steps To Reproduce

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

    Localstack testcontainers 

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

   Call copyObject/putObject via latest version using AWS SDK V2 and specific a ssekmsKeyId.

```java
final var copyObjectRequestBuilder =
        CopyObjectRequest.builder()
            .serverSideEncryption(ServerSideEncryption.AWS_KMS)
            .ssekmsKeyId("NON-EXISTENT KMS KEY")
            .sourceBucket(sourceBucketName)
            .sourceKey(sourceKey)
            .destinationBucket(destinationBucket)
            .destinationKey(destinationKey);
final var copyObjectResponse = sourceRegionS3Client.copyObject(copyObjectRequest); // Error should be thrown here but localstack does not return an error
```

### Environment

```markdown
- OS: MacOS 13.0
- LocalStack: Latest (v1.2.0)
```


### Anything else?

_No response_
cfn_client.delete_stack(StackName=stack_id)
            def _await_stack_delete():
                return (
                    cfn_client.describe_stacks(StackName=stack_id)["Stacks"][0]["StackStatus"]
                    == "DELETE_COMPLETE"
                )
            assert wait_until(_await_stack_delete, _max_wait=max_wait or 60)
            
            time.sleep(2)
        return DeployResult(
            change_set_id, stack_id, stack_name, change_set_name, mapped_outputs, _destroy_stack
        )
    yield _deploy
    for entry in state:
        entry_stack_id = entry.get("stack_id")
        entry_change_set_id = entry.get("change_set_id")
        try:
            entry_change_set_id and cleanup_changesets([entry_change_set_id])
            entry_stack_id and cleanup_stacks([entry_stack_id])
        except Exception as e:
            LOG.debug(
                f"Failed cleaning up change set {entry_change_set_id=} and stack {entry_stack_id=}: {e}"
            )
@pytest.fixture
def is_change_set_created_and_available(cfn_client):