diff --git a/core/core.services.yml b/core/core.services.yml
index a4327bda9b..0ff2a0d7a9 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -1164,6 +1164,10 @@ services:
     class: Drupal\Core\Entity\EntityAccessCheck
     tags:
       - { name: access_check, applies_to: _entity_access }
+  access_check.entity_bundle:
+    class: Drupal\Core\Entity\EntityBundleAccessCheck
+    tags:
+      - { name: access_check, applies_to: _entity_bundle }
   access_check.entity_create:
     class: Drupal\Core\Entity\EntityCreateAccessCheck
     arguments: ['@entity_type.manager']
diff --git a/core/lib/Drupal/Core/Entity/EntityBundleAccessCheck.php b/core/lib/Drupal/Core/Entity/EntityBundleAccessCheck.php
new file mode 100644
index 0000000000..021af6662d
--- /dev/null
+++ b/core/lib/Drupal/Core/Entity/EntityBundleAccessCheck.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace Drupal\Core\Entity;
+
+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 an access checker for the _bundles rout requirement.
+ */
+class EntityBundleAccessCheck implements AccessInterface {
+
+  /**
+   * Checks access based on the _entity_type and _entity_bundles requirement.
+   *
+   * @code
+   * example.route:
+   *   path: foo/{entity_type}/{example}
+   *   requirements:
+   *     _entity_bundle:
+   *       - example_entity_type:example_bundle
+   * @endcode
+   *
+   * @param \Symfony\Component\Routing\Route $route
+   *   The route to check against.
+   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
+   *   The parametrized route
+   * @param \Drupal\Core\Session\AccountInterface $account
+   *   The currently logged in account.
+   *
+   * @return \Drupal\Core\Access\AccessResultInterface
+   *   The access result.
+   */
+  public function access(Route $route, RouteMatchInterface $route_match, AccountInterface $account) {
+
+    if ($route->hasRequirement('_entity_bundle')) {
+      list($entity_type, $bundle) = explode(':', $route->hasRequirement('_entity_bundle'));
+      if ($parameters->has($entity_type)) {
+        $entity = $parameter->get($entity_type);
+        if ($entity instanceof EntityInterface) {
+          if ($entity->bundle() !== $bundle) {
+            return AccessResult::forbidden();
+          }
+        }
+      }
+    }
+    return AccessResult::neutral();
+  }
+
+}
