diff --git a/core/api/src/main/java/org/onosproject/cfg/ComponentConfigService.java b/core/api/src/main/java/org/onosproject/cfg/ComponentConfigService.java
index d93cd91..b167297 100644
--- a/core/api/src/main/java/org/onosproject/cfg/ComponentConfigService.java
+++ b/core/api/src/main/java/org/onosproject/cfg/ComponentConfigService.java
@@ -81,5 +81,14 @@
      */
     void unsetProperty(String componentName, String name);
 
+    /**
+     * Returns configuration property of the named components.
+     *
+     * @param componentName component name
+     * @param attribute component attribute
+     * @return configuration property
+     */
+    ConfigProperty getProperty(String componentName, String attribute);
+
 }
 
diff --git a/core/api/src/test/java/org/onosproject/cfg/ComponentConfigAdapter.java b/core/api/src/test/java/org/onosproject/cfg/ComponentConfigAdapter.java
index e0e2acc..97fa037 100644
--- a/core/api/src/test/java/org/onosproject/cfg/ComponentConfigAdapter.java
+++ b/core/api/src/test/java/org/onosproject/cfg/ComponentConfigAdapter.java
@@ -57,4 +57,9 @@
     public void unsetProperty(String componentName, String name) {
 
     }
+
+    @Override
+    public ConfigProperty getProperty(String componentName, String attribute) {
+        return null;
+    }
 }
diff --git a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java
index 011733c..0a78bcd 100644
--- a/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java
+++ b/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java
@@ -195,6 +195,19 @@
         store.unsetProperty(componentName, name);
     }
 
+    @Override
+    public ConfigProperty getProperty(String componentName, String attribute) {
+        checkPermission(CONFIG_READ);
+
+        Map<String, ConfigProperty> map = properties.get(componentName);
+        if (map != null) {
+            return map.get(attribute);
+        } else {
+            log.error("Attribute {} not present in component {}", attribute, componentName);
+            return null;
+        }
+    }
+
     private class InternalStoreDelegate implements ComponentConfigStoreDelegate {
 
         @Override
diff --git a/core/store/dist/src/test/java/org/onosproject/store/intent/impl/GossipIntentStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/intent/impl/GossipIntentStoreTest.java
index 54f361e..149e64b 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/intent/impl/GossipIntentStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/intent/impl/GossipIntentStoreTest.java
@@ -276,5 +276,10 @@
         public void unsetProperty(String componentName, String name) {
 
         }
+
+        @Override
+        public ConfigProperty getProperty(String componentName, String attribute) {
+            return null;
+        }
     }
 }
diff --git a/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbComponentConfigServiceTest.java b/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbComponentConfigServiceTest.java
index 011de5a..2b6021c 100644
--- a/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbComponentConfigServiceTest.java
+++ b/incubator/protobuf/services/nb/src/test/java/org/onosproject/incubator/protobuf/services/nb/GrpcNbComponentConfigServiceTest.java
@@ -273,5 +273,10 @@
         public void unsetProperty(String componentName, String name) {
             STRING_MAP2.remove(componentName + "#" + name);
         }
+
+        @Override
+        public ConfigProperty getProperty(String componentName, String attribute) {
+            return null;
+        }
     }
 }
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
index 9d3bcca..bf0449c 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
@@ -156,4 +156,34 @@
         props.fieldNames().forEachRemaining(k -> service.unsetProperty(component, k));
         return Response.noContent().build();
     }
+
+    /**
+     * Gets specified value of a specified component and variable.
+     *
+     * @param component component name
+     * @param attribute  attribute name
+     * @return 200 OK with a collection of component configurations
+     */
+    @GET
+    @Path("{component}/{attribute}")
+    @Produces(MediaType.APPLICATION_JSON)
+    public Response getComponentConfig(@PathParam("component") String component,
+                                            @PathParam("attribute") String attribute) {
+        ComponentConfigService service = get(ComponentConfigService.class);
+        ObjectNode root = mapper().createObjectNode();
+        encodeConfigs(component, attribute,
+                nullIsNotFound(service.getProperty(component, attribute),
+                        (service.getProperties(component) == null) ?
+                        "No such component" : (service.getProperty(component, attribute) == null) ?
+                        ("No such attribute in " + component) : "No such attribute and component"), root);
+        return ok(root).build();
+    }
+
+    // Encodes the specified property with attribute as an object in the given node.
+    private void encodeConfigs(String component, String attribute, ConfigProperty props,
+                               ObjectNode node) {
+        ObjectNode compNode = mapper().createObjectNode();
+        node.set(component, compNode);
+        compNode.put(attribute, props.value());
+    }
 }
