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
return str;
    }
    public static boolean isNullOrEmpty(@Nullable String s) {
        return s == null || s.isEmpty();
    }
    public static boolean isNullOrBlank(@Nullable String s) {
        return s == null || s.isBlank();
    }
    public static String padStart(String s, int minimumLength, char c) {
        Objects.requireNonNull(s, "s");
        if (s.length() >= minimumLength) {
            return s;
        } else {
            return Character.toString(c).repeat(minimumLength - s.length()) + s;
        }
    }
    public static String toLowercaseAscii(String in) {
        return in.codePoints()
            .map(cp -> cp <= 128 ? Character.toLowerCase(cp) : cp)
            .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
            .toString();
    }
    /**
     * Alias for {@link org.elasticsearch.core.Strings#format}
     */
    public static String format(String format, Object... args) {
        return org.elasticsearch.core.Strings.format(format, args);
    }
}