diff --git a/core/lib/Drupal/Core/Entity/EntityAccessCheck.php b/core/lib/Drupal/Core/Entity/EntityAccessCheck.php
index bc8bd59..0a68513 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessCheck.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessCheck.php
@@ -2,12 +2,14 @@
 
 namespace Drupal\Core\Entity;
 
+use Drupal\Core\Access\AccessibleInterface;
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Routing\Access\AccessInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Session\AccountInterface;
 use Symfony\Component\Routing\Route;
 
+
 /**
  * Provides a generic access checker for entities.
  */
@@ -57,7 +59,7 @@ public function access(Route $route, RouteMatchInterface $route_match, AccountIn
     $parameters = $route_match->getParameters();
     if ($parameters->has($entity_type)) {
       $entity = $parameters->get($entity_type);
-      if ($entity instanceof EntityInterface) {
+      if ($entity instanceof AccessibleInterface) {
         return $entity->access($operation, $account, TRUE);
       }
     }
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php
index f99160b..6932322 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php
@@ -9,8 +9,10 @@
 use Drupal\node\NodeInterface;
 use Symfony\Component\HttpFoundation\ParameterBag;
 use Symfony\Component\Routing\Route;
+use Drupal\Core\Access\AccessibleInterface;
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Entity\EntityAccessCheck;
+use Drupal\Core\Entity\EntityInterface;
 use Drupal\Tests\UnitTestCase;
 
 /**
@@ -70,13 +72,53 @@ public function testAccessWithTypePlaceholder() {
     $node = $node->reveal();
 
     /** @var \Drupal\Core\Routing\RouteMatchInterface|\Prophecy\Prophecy\ObjectProphecy $route_match */
-    $route_match = $this->prophesize(RouteMatchInterface::class);
-    $route_match->getRawParameters()->willReturn(new ParameterBag(['entity_type' => 'node', 'var_name' => 1]));
-    $route_match->getParameters()->willReturn(new ParameterBag(['entity_type' => 'node', 'var_name' => $node]));
-    $route_match = $route_match->reveal();
+    $route_match = $this->createRouteMatchForObject($node);
 
     $access_check = new EntityAccessCheck();
     $this->assertEquals(AccessResult::allowed(), $access_check->access($route, $route_match, $account));
   }
 
+  /**
+   * @covers ::access
+   */
+  public function testAccessWithAccessibleInterfaces() {
+    $route = new Route('/foo/{entity_type}/{var_name}', [], ['_entity_access' => 'var_name.update'], ['parameters' => ['var_name' => ['type' => 'entity:{entity_type}']]]);
+    /** @var \Drupal\Core\Session\AccountInterface $account */
+    $account = $this->prophesize(AccountInterface::class)->reveal();
+
+    $access_check = new EntityAccessCheck();
+
+    // Check EntityInterface has its ::access() method called.
+    /** @var \Drupal\Core\Entity\EntityInterface|\Prophecy\Prophecy\ObjectProphecy $node */
+    $node = $this->prophesize(EntityInterface::class);
+    $node->access('update', $account, TRUE)->willReturn(AccessResult::allowed());
+    $route_match = $this->createRouteMatchForObject($node->reveal());
+    $this->assertEquals(AccessResult::allowed(), $access_check->access($route, $route_match, $account));
+
+    // Check AccessibleInterface has its ::access() method called.
+    /** @var \Drupal\Core\Access\AccessibleInterface|\Prophecy\Prophecy\ObjectProphecy $node */
+    $node = $this->prophesize(AccessibleInterface::class);
+    $node->access('update', $account, TRUE)->willReturn(AccessResult::allowed());
+    $route_match = $this->createRouteMatchForObject($node->reveal());
+    $this->assertEquals(AccessResult::allowed(), $access_check->access($route, $route_match, $account));
+
+    // Check stdClass has no call to ::access() method.
+    $route_match = $this->createRouteMatchForObject(new \stdClass);
+    $this->assertEquals(AccessResult::neutral(), $access_check->access($route, $route_match, $account));
+  }
+
+  /**
+   * Wrap any object with a route match, and return that.
+   *
+   * @param \stdClass $object
+   *   Any object, including prophesized mocks based on interfaces.
+   * @return RouteMatchInterface
+   *   A prophesized RouteMatchInterface.
+   */
+  private function createRouteMatchForObject(\stdClass $object) {
+    $route_match = $this->prophesize(RouteMatchInterface::class);
+    $route_match->getRawParameters()->willReturn(new ParameterBag(['entity_type' => 'node', 'var_name' => 1]));
+    $route_match->getParameters()->willReturn(new ParameterBag(['entity_type' => 'node', 'var_name' => $object]));
+    return $route_match->reveal();
+  }
 }
