  def ListVolumes(
      self,
      region: Optional[str] = None,
      filters: Optional[List[Dict[str, Any]]] = None) -> Dict[str, AWSVolume]:
    """List volumes of an AWS account.

    Example usage:
      # List volumes attached to the instance 'some-instance-id'
      ListVolumes(filters=[
          {'Name':'attachment.instance-id', 'Values':['some-instance-id']}])

    Args:
      region (str): Optional. The region from which to list the volumes.
          If none provided, the default_region associated to the AWSAccount
          object will be used.
      filters (List[Dict]): Optional. Filters for the query. Filters are
          given as a list of dictionaries, e.g.: {'Name': 'someFilter',
          'Values': ['value1', 'value2']}.

    Returns:
      Dict[str, AWSVolume]: Dictionary mapping volume IDs (str) to their
          respective AWSVolume object.

    Raises:
      RuntimeError: If volumes can't be listed.
    """

    if not filters:
      filters = []

    volumes = {}
    client = self.aws_account.ClientApi(common.EC2_SERVICE, region=region)
    responses = common.ExecuteRequest(
        client, 'describe_volumes', {'Filters': filters})
    for response in responses:
      for volume in response['Volumes']:
        volume_id = volume['VolumeId']
        aws_volume = AWSVolume(volume_id,
                               self.aws_account,
                               self.aws_account.default_region,
                               volume['AvailabilityZone'],
                               volume['Encrypted'])

        for tag in volume.get('Tags', []):
          if tag.get('Key') == 'Name':
            aws_volume.name = tag.get('Value')
            break

        for attachment in volume.get('Attachments', []):
          if attachment.get('State') == 'attached':
            aws_volume.device_name = attachment.get('Device')
            break

        volumes[volume_id] = aws_volume
    return volumes
List volumes of an AWS account.

Example usage:
# List volumes attached to the instance 'some-instance-id'
ListVolumes(filters=[
{'Name':'attachment.instance-id', 'Values':['some-instance-id']}])

Args:
region (str): Optional. The region from which to list the volumes.
If none provided, the default_region associated to the AWSAccount
object will be used.
filters (List[Dict]): Optional. Filters for the query. Filters are
given as a list of dictionaries, e.g.: {'Name': 'someFilter',
'Values': ['value1', 'value2']}.

Returns:
Dict[str, AWSVolume]: Dictionary mapping volume IDs (str) to their
respective AWSVolume object.

Raises:
RuntimeError: If volumes can't be listed.
libcloudforensics/providers/aws/internal/ebs.py