### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

config.py's VALID_REGIONS only uses the default boto3 argument to find available regions. This means that regions from other partitions besides `aws` are not validated. 

When trying to list SNS Topics I get the error:

`An error occurred (InvalidParameter) when calling the ListTopics operation: Invalid region specified in "Authorization" header: "us-gov-west-1"`

I believe this is because VALID_REGIONS is set to use the default boto3 `get_available_regions()` parameter for `partition_name`, which is only 'aws'

https://github.com/localstack/localstack/blob/5784742b6f202133de11ef19544dd53c11c126e1/localstack/config.py#L454

https://github.com/boto/boto3/blob/master/boto3/session.py#L159-L162



### Expected Behavior

Non-default partition regions are also acknowledged as valid regions, and an error is not thrown.

VALID_REGIONS is set to aggregate regions from all available partitions.

### 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`)

    Running through a kubernetes deployment, using the image localstack: 0.12.17

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

```
# using boto3 locally
sns_client: boto3.client = boto3.client("sns", endpoint_url=AWS_URL)
topics = sns_client.list_topics()
```

`An error occurred (InvalidParameter) when calling the ListTopics operation: Invalid region specified in "Authorization" header: "us-gov-west-1"`

### Environment

```markdown
- LocalStack Docker image: 0.12.17
- Kubernetes
- Running on govcloud
```


### Anything else?

Current workaround:

setting `USE_SINGLE_REGION=true` and `AWS_DEFAULT_REGION=us-east-1` successfully mitigates this problem, and causes no error to the thrown when listing topics.
"""get the log type from environment variable"""
    ls_log = os.environ.get(env_var_name, "").lower().strip()
    return ls_log if ls_log in LOG_LEVELS else False
def is_env_true(env_var_name):
    """Whether the given environment variable has a truthy value."""
    return os.environ.get(env_var_name, "").lower().strip() in TRUE_STRINGS
def is_env_not_false(env_var_name):
    """Whether the given environment variable is empty or has a truthy value."""
    return os.environ.get(env_var_name, "").lower().strip() not in FALSE_STRINGS
LAMBDA_JAVA_OPTS = os.environ.get("LAMBDA_JAVA_OPTS", "").strip()
KINESIS_SHARD_LIMIT = os.environ.get("KINESIS_SHARD_LIMIT", "").strip() or "100"
KINESIS_LATENCY = os.environ.get("KINESIS_LATENCY", "").strip() or "500"
KINESIS_PROVIDER = os.environ.get("KINESIS_PROVIDER") or "kinesis-mock"
if "DEFAULT_REGION" not in os.environ:
    os.environ["DEFAULT_REGION"] = os.environ.get("AWS_DEFAULT_REGION") or AWS_REGION_US_EAST_1
DEFAULT_REGION = os.environ["DEFAULT_REGION"]
SYNCHRONOUS_SNS_EVENTS = is_env_true("SYNCHRONOUS_SNS_EVENTS")
SYNCHRONOUS_SQS_EVENTS = is_env_true("SYNCHRONOUS_SQS_EVENTS")
SYNCHRONOUS_API_GATEWAY_EVENTS = is_env_not_false("SYNCHRONOUS_API_GATEWAY_EVENTS")
SYNCHRONOUS_KINESIS_EVENTS = is_env_not_false("SYNCHRONOUS_KINESIS_EVENTS")
SYNCHRONOUS_DYNAMODB_EVENTS = is_env_not_false("SYNCHRONOUS_DYNAMODB_EVENTS")
KINESIS_ERROR_PROBABILITY = float(os.environ.get("KINESIS_ERROR_PROBABILITY", "").strip() or 0.0)
DYNAMODB_ERROR_PROBABILITY = float(os.environ.get("DYNAMODB_ERROR_PROBABILITY", "").strip() or 0.0)
DYNAMODB_READ_ERROR_PROBABILITY = float(
    os.environ.get("DYNAMODB_READ_ERROR_PROBABILITY", "").strip() or 0.0
)
DYNAMODB_WRITE_ERROR_PROBABILITY = float(