We allow characters in the ID of an ILM policy that will result in an invalid snapshot name.

For example, an ILM policy with the name `mypolicy-*` can be created, however, the generation of the snapshot name in this line:

https://github.com/elastic/elasticsearch/blob/befb6faafc9fca327fd3cea2d0ab328a521c4e65/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ilm/GenerateSnapshotNameStep.java#L81

Results in the `mypolicy-*` being part of the snapshot name, which the snapshot service then disallows. We should strip these invalid characters from the snapshot name.
server/src/main/java/org/elasticsearch/common/Strings.java
if (str == null || str.length() == 0) {
            return str;
        }
        char newChar = capitalize ? Character.toUpperCase(str.charAt(0)) : Character.toLowerCase(str.charAt(0));
        if (newChar == str.charAt(0)) {
            return str; 
        }
        return newChar + str.substring(1);
    }
    public static final String INVALID_FILENAME_CHARS = Stream.of('\\', '/', '*', '?', '"', '<', '>', '|', ' ', ',')
        .map(c -> "'" + c + "'")
        .collect(Collectors.joining(",", "[", "]"));
    public static boolean validFileName(String fileName) {
        for (int i = 0; i < fileName.length(); i++) {
            if (isInvalidFileNameCharacter(fileName.charAt(i))) {
                return false;
            }
        }
        return true;
    }
    public static boolean validFileNameExcludingAstrix(String fileName) {
        for (int i = 0; i < fileName.length(); i++) {
            char c = fileName.charAt(i);
            if (c != '*' && isInvalidFileNameCharacter(c)) {
                return false;
            }
        }
        return true;
    }
    private static boolean isInvalidFileNameCharacter(char c) {