Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions auth/src/main/java/feast/auth/config/SecurityConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,13 @@ GrpcAuthenticationReader authenticationReader() {
}

/**
* Creates an AccessDecisionManager if authentication is enabled. This object determines the
* policy used to make authentication decisions.
* Creates an AccessDecisionManager if authorization is enabled. This object determines the policy
* used to make authorization decisions.
*
* @return AccessDecisionManager
*/
@Bean
@ConditionalOnProperty(prefix = "feast.security.authentication", name = "enabled")
@ConditionalOnProperty(prefix = "feast.security.authorization", name = "enabled")
AccessDecisionManager accessDecisionManager() {
final List<AccessDecisionVoter<?>> voters = new ArrayList<>();
voters.add(new AccessPredicateVoter());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package feast.core.config;

import feast.proto.core.CoreServiceGrpc;
import io.grpc.health.v1.HealthGrpc;
import lombok.extern.slf4j.Slf4j;
import net.devh.boot.grpc.server.security.check.AccessPredicate;
import net.devh.boot.grpc.server.security.check.GrpcSecurityMetadataSource;
Expand Down Expand Up @@ -48,6 +49,7 @@ GrpcSecurityMetadataSource grpcSecurityMetadataSource() {
// The following endpoints allow unauthenticated access
source.set(CoreServiceGrpc.getGetFeastCoreVersionMethod(), AccessPredicate.permitAll());
source.set(CoreServiceGrpc.getUpdateStoreMethod(), AccessPredicate.permitAll());
source.set(HealthGrpc.getCheckMethod(), AccessPredicate.permitAll());
return source;
}
}
2 changes: 1 addition & 1 deletion datatypes/java/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Dependency Coordinates
<dependency>
<groupId>dev.feast</groupId>
<artifactId>datatypes-java</artifactId>
<version>0.6.3-SNAPSHOT</version>
<version>0.6.2</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion docs/contributing/development-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ grpc_cli call localhost:6566 GetFeastServingInfo ''

```text
connecting to localhost:6566
version: "0.6.3-SNAPSHOT"
version: "0.6.2"
type: FEAST_SERVING_TYPE_ONLINE

Rpc succeeded with OK status
Expand Down
2 changes: 1 addition & 1 deletion infra/charts/feast/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apiVersion: v1
description: Feature store for machine learning.
name: feast
version: 0.6.3-SNAPSHOT
version: 0.6.2
10 changes: 5 additions & 5 deletions infra/charts/feast/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
feast
=====

Feature store for machine learning. Current chart version is `0.6.3-SNAPSHOT`
Feature store for machine learning. Current chart version is `0.6.2`

## TL;DR;

Expand Down Expand Up @@ -32,10 +32,10 @@ This chart install Feast deployment on a Kubernetes cluster using the [Helm](htt

| Repository | Name | Version |
|------------|------|---------|
| | feast-core | 0.6.3-SNAPSHOT |
| | feast-jupyter | 0.6.3-SNAPSHOT |
| | feast-serving | 0.6.3-SNAPSHOT |
| | feast-serving | 0.6.3-SNAPSHOT |
| | feast-core | 0.6.2 |
| | feast-jupyter | 0.6.2 |
| | feast-serving | 0.6.2 |
| | feast-serving | 0.6.2 |
| | prometheus-statsd-exporter | 0.1.2 |
| https://kubernetes-charts-incubator.storage.googleapis.com/ | kafka | 0.20.8 |
| https://kubernetes-charts.storage.googleapis.com/ | grafana | 5.0.5 |
Expand Down
2 changes: 1 addition & 1 deletion infra/charts/feast/charts/feast-core/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apiVersion: v1
description: Feast Core registers feature specifications and manage ingestion jobs.
name: feast-core
version: 0.6.3-SNAPSHOT
version: 0.6.2
2 changes: 1 addition & 1 deletion infra/charts/feast/charts/feast-core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ feast-core
==========
Feast Core registers feature specifications and manage ingestion jobs.

Current chart version is `0.6.3-SNAPSHOT`
Current chart version is `0.6.2`



Expand Down
2 changes: 1 addition & 1 deletion infra/charts/feast/charts/feast-jupyter/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apiVersion: v1
description: Feast Jupyter provides a Jupyter server with pre-installed Feast SDK
name: feast-jupyter
version: 0.6.3-SNAPSHOT
version: 0.6.2
2 changes: 1 addition & 1 deletion infra/charts/feast/charts/feast-jupyter/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ feast-jupyter
=============
Feast Jupyter provides a Jupyter server with pre-installed Feast SDK

Current chart version is `0.6.3-SNAPSHOT`
Current chart version is `0.6.2`



Expand Down
2 changes: 1 addition & 1 deletion infra/charts/feast/charts/feast-serving/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
apiVersion: v1
description: Feast Serving serves low-latency latest features and historical batch features.
name: feast-serving
version: 0.6.3-SNAPSHOT
version: 0.6.2
2 changes: 1 addition & 1 deletion infra/charts/feast/charts/feast-serving/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ feast-serving
=============
Feast Serving serves low-latency latest features and historical batch features.

Current chart version is `0.6.3-SNAPSHOT`
Current chart version is `0.6.2`



Expand Down
8 changes: 4 additions & 4 deletions infra/charts/feast/requirements.yaml
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
dependencies:
- name: feast-core
version: 0.6.3-SNAPSHOT
version: 0.6.2
condition: feast-core.enabled
- name: feast-serving
alias: feast-online-serving
version: 0.6.3-SNAPSHOT
version: 0.6.2
condition: feast-online-serving.enabled
- name: feast-serving
alias: feast-batch-serving
version: 0.6.3-SNAPSHOT
version: 0.6.2
condition: feast-batch-serving.enabled
- name: feast-jupyter
version: 0.6.3-SNAPSHOT
version: 0.6.2
condition: feast-jupyter.enabled
- name: postgresql
version: 8.6.1
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
</modules>

<properties>
<revision>0.6.3-SNAPSHOT</revision>
<revision>0.6.2 </revision>
<github.url>https://github.com/feast-dev/feast</github.url>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@

import feast.auth.credentials.GoogleAuthCredentials;
import feast.auth.credentials.OAuthCredentials;
import feast.proto.serving.ServingServiceGrpc;
import io.grpc.CallCredentials;
import io.grpc.health.v1.HealthGrpc;
import java.io.IOException;
import net.devh.boot.grpc.server.security.check.AccessPredicate;
import net.devh.boot.grpc.server.security.check.GrpcSecurityMetadataSource;
Expand Down Expand Up @@ -67,6 +69,10 @@ GrpcSecurityMetadataSource grpcSecurityMetadataSource() {

// Authentication is enabled for all gRPC endpoints
source.setDefault(AccessPredicate.authenticated());

// The following endpoints allow unauthenticated access
source.set(ServingServiceGrpc.getGetFeastServingInfoMethod(), AccessPredicate.permitAll());
source.set(HealthGrpc.getCheckMethod(), AccessPredicate.permitAll());
return source;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package feast.serving.it;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.testcontainers.containers.wait.strategy.Wait.forHttp;

Expand All @@ -26,7 +25,6 @@
import feast.proto.serving.ServingServiceGrpc.ServingServiceBlockingStub;
import feast.proto.types.ValueProto.Value;
import io.grpc.ManagedChannel;
import io.grpc.StatusRuntimeException;
import java.io.File;
import java.io.IOException;
import java.time.Duration;
Expand Down Expand Up @@ -87,21 +85,21 @@ static void globalSetup() throws IOException, InitializationError, InterruptedEx
}

@Test
public void shouldNotAllowUnauthenticatedGetOnlineFeatures() {
public void shouldAllowUnauthenticatedGetOnlineFeatures() {
// apply feature set
CoreSimpleAPIClient coreClient =
AuthTestUtils.getSecureApiClientForCore(FEAST_CORE_PORT, options);
AuthTestUtils.applyFeatureSet(coreClient, PROJECT_NAME, ENTITY_ID, FEATURE_NAME);
ServingServiceBlockingStub servingStub =
AuthTestUtils.getServingServiceStub(false, FEAST_SERVING_PORT, null);
GetOnlineFeaturesRequest onlineFeatureRequest =
AuthTestUtils.createOnlineFeatureRequest(PROJECT_NAME, FEATURE_NAME, ENTITY_ID, 1);
Exception exception =
assertThrows(
StatusRuntimeException.class,
() -> {
servingStub.getOnlineFeatures(onlineFeatureRequest);
});

String expectedMessage = "UNAUTHENTICATED: Authentication failed";
String actualMessage = exception.getMessage();
assertEquals(actualMessage, expectedMessage);
GetOnlineFeaturesResponse featureResponse = servingStub.getOnlineFeatures(onlineFeatureRequest);
assertEquals(1, featureResponse.getFieldValuesCount());
Map<String, Value> fieldsMap = featureResponse.getFieldValues(0).getFieldsMap();
assertTrue(fieldsMap.containsKey(ENTITY_ID));
assertTrue(fieldsMap.containsKey(FEATURE_NAME));
((ManagedChannel) servingStub.getChannel()).shutdown();
}

@Test
Expand Down