|
42 | 42 | import org.elasticsearch.cluster.metadata.Metadata; |
43 | 43 | import org.elasticsearch.cluster.service.ClusterService; |
44 | 44 | import org.elasticsearch.common.Strings; |
| 45 | +import org.elasticsearch.common.UUIDs; |
45 | 46 | import org.elasticsearch.common.regex.Regex; |
46 | 47 | import org.elasticsearch.common.settings.ClusterSettings; |
47 | 48 | import org.elasticsearch.common.settings.Settings; |
@@ -341,7 +342,7 @@ public void setup() { |
341 | 342 | new RoleDescriptor( |
342 | 343 | "data_stream_test3", |
343 | 344 | null, |
344 | | - new IndicesPrivileges[] { IndicesPrivileges.builder().indices("logs*").privileges("all").build() }, |
| 345 | + new IndicesPrivileges[] { IndicesPrivileges.builder().indices("logs*").privileges("all", "read_failures").build() }, |
345 | 346 | null |
346 | 347 | ) |
347 | 348 | ); |
@@ -1929,40 +1930,45 @@ public void testAliasDateMathExpressionNotSupported() { |
1929 | 1930 | assertThat(request.aliases(), arrayContainingInAnyOrder("<datetime-{now/M}>")); |
1930 | 1931 | } |
1931 | 1932 |
|
1932 | | - // public void testDynamicPutMappingRequestFromAlias() { |
1933 | | - // PutMappingRequest request = new PutMappingRequest(Strings.EMPTY_ARRAY).setConcreteIndex(new Index("foofoo", UUIDs.base64UUID())); |
1934 | | - // User user = new User("alias-writer", "alias_read_write"); |
1935 | | - // AuthorizedIndices authorizedIndices = buildAuthorizedIndices(user, TransportPutMappingAction.TYPE.name()); |
1936 | | - // |
1937 | | - // String putMappingIndexOrAlias = IndicesAndAliasesResolver.getPutMappingIndexOrAlias(request, authorizedIndices::check, metadata); |
1938 | | - // assertEquals("barbaz", putMappingIndexOrAlias); |
1939 | | - // |
1940 | | - // // multiple indices map to an alias so we can only return the concrete index |
1941 | | - // final String index = randomFrom("foo", "foobar"); |
1942 | | - // request = new PutMappingRequest(Strings.EMPTY_ARRAY).setConcreteIndex(new Index(index, UUIDs.base64UUID())); |
1943 | | - // putMappingIndexOrAlias = IndicesAndAliasesResolver.getPutMappingIndexOrAlias(request, authorizedIndices::check, metadata); |
1944 | | - // assertEquals(index, putMappingIndexOrAlias); |
1945 | | - // } |
1946 | | - // |
1947 | | - // public void testWhenAliasToMultipleIndicesAndUserIsAuthorizedUsingAliasReturnsAliasNameForDynamicPutMappingRequestOnWriteIndex() { |
1948 | | - // String index = "logs-00003"; // write index |
1949 | | - // PutMappingRequest request = new PutMappingRequest(Strings.EMPTY_ARRAY).setConcreteIndex(new Index(index, UUIDs.base64UUID())); |
1950 | | - // assert metadata.getIndicesLookup().get("logs-alias").getIndices().size() == 3; |
1951 | | - // String putMappingIndexOrAlias = IndicesAndAliasesResolver.getPutMappingIndexOrAlias(request, "logs-alias"::equals, metadata); |
1952 | | - // String message = "user is authorized to access `logs-alias` and the put mapping request is for a write index" |
1953 | | - // + "so this should have returned the alias name"; |
1954 | | - // assertEquals(message, "logs-alias", putMappingIndexOrAlias); |
1955 | | - // } |
1956 | | - |
1957 | | - // public void testWhenAliasToMultipleIndicesAndUserIsAuthorizedUsingAliasReturnsIndexNameForDynamicPutMappingRequestOnReadIndex() { |
1958 | | - // String index = "logs-00002"; // read index |
1959 | | - // PutMappingRequest request = new PutMappingRequest(Strings.EMPTY_ARRAY).setConcreteIndex(new Index(index, UUIDs.base64UUID())); |
1960 | | - // assert metadata.getIndicesLookup().get("logs-alias").getIndices().size() == 3; |
1961 | | - // String putMappingIndexOrAlias = IndicesAndAliasesResolver.getPutMappingIndexOrAlias(request, "logs-alias"::equals, metadata); |
1962 | | - // String message = "user is authorized to access `logs-alias` and the put mapping request is for a read index" |
1963 | | - // + "so this should have returned the concrete index as fallback"; |
1964 | | - // assertEquals(message, index, putMappingIndexOrAlias); |
1965 | | - // } |
| 1933 | + public void testDynamicPutMappingRequestFromAlias() { |
| 1934 | + PutMappingRequest request = new PutMappingRequest(Strings.EMPTY_ARRAY).setConcreteIndex(new Index("foofoo", UUIDs.base64UUID())); |
| 1935 | + User user = new User("alias-writer", "alias_read_write"); |
| 1936 | + AuthorizedIndices authorizedIndices = buildAuthorizedIndices(user, TransportPutMappingAction.TYPE.name()); |
| 1937 | + |
| 1938 | + String putMappingIndexOrAlias = IndicesAndAliasesResolver.getPutMappingIndexOrAlias(request, authorizedIndices::check, metadata); |
| 1939 | + assertEquals("barbaz", putMappingIndexOrAlias); |
| 1940 | + |
| 1941 | + // multiple indices map to an alias so we can only return the concrete index |
| 1942 | + final String index = randomFrom("foo", "foobar"); |
| 1943 | + request = new PutMappingRequest(Strings.EMPTY_ARRAY).setConcreteIndex(new Index(index, UUIDs.base64UUID())); |
| 1944 | + putMappingIndexOrAlias = IndicesAndAliasesResolver.getPutMappingIndexOrAlias(request, authorizedIndices::check, metadata); |
| 1945 | + assertEquals(index, putMappingIndexOrAlias); |
| 1946 | + assertWarnings( |
| 1947 | + "the index privilege [write] allowed the update mapping action [indices:admin/mapping/put] on " |
| 1948 | + + "index [barbaz], this privilege will not permit mapping updates in the next major release - users who require access to " |
| 1949 | + + "update mappings must be granted explicit privileges" |
| 1950 | + ); |
| 1951 | + } |
| 1952 | + |
| 1953 | + public void testWhenAliasToMultipleIndicesAndUserIsAuthorizedUsingAliasReturnsAliasNameForDynamicPutMappingRequestOnWriteIndex() { |
| 1954 | + String index = "logs-00003"; // write index |
| 1955 | + PutMappingRequest request = new PutMappingRequest(Strings.EMPTY_ARRAY).setConcreteIndex(new Index(index, UUIDs.base64UUID())); |
| 1956 | + assert metadata.getIndicesLookup().get("logs-alias").getIndices().size() == 3; |
| 1957 | + String putMappingIndexOrAlias = IndicesAndAliasesResolver.getPutMappingIndexOrAlias(request, "logs-alias"::equals, metadata); |
| 1958 | + String message = "user is authorized to access `logs-alias` and the put mapping request is for a write index" |
| 1959 | + + "so this should have returned the alias name"; |
| 1960 | + assertEquals(message, "logs-alias", putMappingIndexOrAlias); |
| 1961 | + } |
| 1962 | + |
| 1963 | + public void testWhenAliasToMultipleIndicesAndUserIsAuthorizedUsingAliasReturnsIndexNameForDynamicPutMappingRequestOnReadIndex() { |
| 1964 | + String index = "logs-00002"; // read index |
| 1965 | + PutMappingRequest request = new PutMappingRequest(Strings.EMPTY_ARRAY).setConcreteIndex(new Index(index, UUIDs.base64UUID())); |
| 1966 | + assert metadata.getIndicesLookup().get("logs-alias").getIndices().size() == 3; |
| 1967 | + String putMappingIndexOrAlias = IndicesAndAliasesResolver.getPutMappingIndexOrAlias(request, "logs-alias"::equals, metadata); |
| 1968 | + String message = "user is authorized to access `logs-alias` and the put mapping request is for a read index" |
| 1969 | + + "so this should have returned the concrete index as fallback"; |
| 1970 | + assertEquals(message, index, putMappingIndexOrAlias); |
| 1971 | + } |
1966 | 1972 |
|
1967 | 1973 | public void testHiddenIndicesResolution() { |
1968 | 1974 | SearchRequest searchRequest = new SearchRequest(); |
|
0 commit comments