def get_storage_object_ids_ebs(self, match_all=True, **kwargs):
    """Retrieves ObjectIds for EBS Snappables from Polaris

    Args:
        match_all (bool): Set to False to match ANY defined criteria
        tags (dict): Optional allows simple qualification of tags
        kwargs (dict): Optional any top level object from the get_storage_ebs call

    Returns:
        list: A list of EBS object IDs matching results of query

    Raises:
        RequestException: If the query to Polaris returned an error

    Examples:
        >>> snappables = client.get_object_ids_ebs(tags={"Environment": "staging"})
        >>> for snappable in snappables:
        ...    snapshot = client.get_snapshots(snappable, recovery_point='latest')
        ...    if snapshot:
        ...        print(snapshot[0])
    """

    try:
        object_ids = []

        for volume in self.get_storage_ebs():
            num_criteria = len(kwargs)
            if 'tags' in kwargs:
                num_criteria = num_criteria + len(kwargs['tags']) - 1
            num_unmatched_criteria = num_criteria

            for key in kwargs:
                if key == 'tags' and 'tags' in volume:
                    for volume_tag in volume['tags']:
                        if volume_tag['key'] in kwargs['tags'] and \
                           volume_tag['value'] == kwargs['tags'][volume_tag['key']]:
                            num_unmatched_criteria -= 1
                elif key in volume and volume[key] == kwargs[key]:
                    num_unmatched_criteria -= 1
            if match_all and num_unmatched_criteria == 0:
                object_ids.append(volume['id'])
            elif not match_all and num_criteria > num_unmatched_criteria >= 1:
                object_ids.append(volume['id'])
        return object_ids
    except Exception:
        raise