diff --color -Naur a4/src/Access/ContextBlockAccessAllowed.php b4/src/Access/ContextBlockAccessAllowed.php
--- a/src/Access/ContextBlockAccessAllowed.php
+++ b/src/Access/ContextBlockAccessAllowed.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Drupal\context\Access;
+
+use Drupal\Core\Access\AccessibleInterface;
+use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Session\AccountInterface;
+
+/**
+ * Allows view access to blocks placed by a context.
+ *
+ * Core forbids a non-reusable content block that does not declare an access
+ * dependency:
+ *
+ * @code
+ *   Non-reusable blocks must set an access dependency for access control.
+ * @endcode
+ *
+ * @see \Drupal\block_content\BlockContentAccessControlHandler::checkAccess()
+ *
+ * Layout Builder points that dependency at the host entity the layout belongs
+ * to. A context has no host entity: an inline block lives inside the context
+ * configuration itself, and the context's own conditions have already decided
+ * that it belongs on the page being rendered. Making the block depend on
+ * anything narrower would hide it from the visitors the conditions just let
+ * through.
+ *
+ * Only 'view' is allowed, mirroring
+ * \Drupal\layout_builder\Access\LayoutPreviewAccessAllowed: editing the block
+ * still goes through the context edit form, which has its own permission.
+ */
+class ContextBlockAccessAllowed implements AccessibleInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access($operation, ?AccountInterface $account = NULL, $return_as_object = FALSE) {
+    if ($operation === 'view') {
+      return $return_as_object ? AccessResult::allowed() : TRUE;
+    }
+
+    return $return_as_object ? AccessResult::forbidden() : FALSE;
+  }
+
+}
diff --color -Naur a4/src/Plugin/ContextReaction/Blocks.php b4/src/Plugin/ContextReaction/Blocks.php
--- a/src/Plugin/ContextReaction/Blocks.php
+++ b/src/Plugin/ContextReaction/Blocks.php
@@ -12,6 +12,8 @@
 use Drupal\Core\Form\FormState;
 use Drupal\Core\Render\Element;
 use Drupal\Core\Block\BlockManager;
+use Drupal\Core\Access\RefinableDependentAccessInterface;
+use Drupal\context\Access\ContextBlockAccessAllowed;
 use Drupal\context\ContextInterface;
 use Drupal\context\Form\AjaxFormTrait;
 use Drupal\Core\Form\FormStateInterface;
@@ -218,6 +220,21 @@
             $contexts = $this->contextRepository->getRuntimeContexts($block->getContextMapping());
             $this->contextHandler->applyContextMapping($block, $contexts);
           }
+
+          // Blocks that carry their own non-reusable content entity — every
+          // "Inline blocks" entry — have to declare an access dependency, or
+          // BlockContentAccessControlHandler refuses them outright with
+          // "Non-reusable blocks must set an access dependency for access
+          // control", and the block silently never renders.
+          //
+          // Layout Builder points that dependency at the entity whose layout
+          // holds the block. A context has no such host: the block lives in the
+          // context configuration, and the context conditions have already
+          // decided that it belongs on this page.
+          if ($block instanceof RefinableDependentAccessInterface && !$block->getAccessDependency()) {
+            $block->setAccessDependency(new ContextBlockAccessAllowed());
+          }
+
           // Make sure the user is allowed to view the block.
           $access = $block->access($this->account, TRUE);
         }
