diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityIdLengthException.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityIdLengthException.php
new file mode 100644
index 0000000..49cc736
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityIdLengthException.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Config\Entity\ConfigEntityIdLengthException.
+ */
+
+namespace Drupal\Core\Config\Entity;
+
+use Drupal\Core\Config\ConfigException;
+
+/**
+ * Defines an exception thrown when a configuration entity ID is too long.
+ */
+class ConfigEntityIdLengthException extends ConfigException {}
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
index 0ab9a60..1197bef 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
@@ -14,6 +14,7 @@
 use Drupal\Core\Entity\EntityStorageBase;
 use Drupal\Core\Config\Config;
 use Drupal\Core\Config\StorageInterface;
+use Drupal\Core\Config\Entity\ConfigEntityIdLengthException;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\EntityStorageException;
 use Drupal\Core\Entity\Query\QueryFactory;
@@ -38,6 +39,13 @@
 class ConfigEntityStorage extends EntityStorageBase implements ConfigEntityStorageInterface, ImportableEntityStorageInterface {
 
   /**
+   * The maximum length of a configuration entity ID.
+   *
+   * @see \Drupal\Core\ConfigBase::MAX_NAME_LENGTH
+   */
+  const MAX_ID_LENGTH = 166;
+
+  /**
    * The UUID service.
    *
    * @var \Drupal\Component\Uuid\UuidInterface
@@ -310,6 +318,15 @@ public function save(EntityInterface $entity) {
       $entity->original = $this->loadUnchanged($id);
     }
 
+    // Check the configuration entity ID length.
+    // @see \Drupal\Core\Config\Entity\ConfigEntityStorage::MAX_ID_LENGTH
+    if (strlen($entity->{$this->idKey}) > self::MAX_ID_LENGTH) {
+      throw new ConfigEntityIdLengthException(String::format('Configuration entity ID @id exceeds maximum allowed length of @len characters.', array(
+        '@id' => $entity->{$this->idKey},
+        '@len' => self::MAX_ID_LENGTH,
+      )));
+    }
+
     $entity->preSave($this);
     $this->invokeHook('presave', $entity);
 
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityTest.php
index 19ebaff..7af051a 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityTest.php
@@ -7,8 +7,11 @@
 
 namespace Drupal\config\Tests;
 
+use Drupal\Component\Utility\String;
 use Drupal\Core\Entity\EntityMalformedException;
 use Drupal\Core\Entity\EntityStorageException;
+use Drupal\Core\Config\Entity\ConfigEntityStorage;
+use Drupal\Core\Config\Entity\ConfigEntityIdLengthException;
 use Drupal\Core\Language\Language;
 use Drupal\simpletest\WebTestBase;
 
@@ -142,6 +145,56 @@ function testCRUD() {
     $this->assertIdentical($config_test->isNew(), FALSE);
     $this->assertIdentical($config_test->getOriginalId(), $expected['id']);
 
+    // Verify that a configuration entity can be saved with an ID of the
+    // maximum allowed length, but not longer.
+
+    // Test with a short ID. By default randomName() generates an 8 character
+    // name.
+    $id_length_config_test = entity_create('config_test', array(
+      'id' => $this->randomName(),
+    ));
+    try {
+      $id_length_config_test->save();
+      $this->pass(String::format("config_test entity with ID length @len was saved.", array(
+        '@len' => strlen($id_length_config_test->id))
+      ));
+    }
+    catch (ConfigEntityIdLengthException $e) {
+      $this->fail($e->getMessage());
+    }
+
+    // Test with an ID of the maximum allowed length.
+    $id_length_config_test = entity_create('config_test', array(
+      'id' => $this->randomName(ConfigEntityStorage::MAX_ID_LENGTH),
+    ));
+    try {
+      $id_length_config_test->save();
+      $this->pass(String::format("config_test entity with ID length @len was saved.", array(
+        '@len' => strlen($id_length_config_test->id),
+      )));
+    }
+    catch (ConfigEntityIdLengthException $e) {
+      $this->fail($e->getMessage());
+    }
+
+    // Test with an ID exeeding the maximum allowed length.
+    $id_length_config_test = entity_create('config_test', array(
+      'id' => $this->randomName(ConfigEntityStorage::MAX_ID_LENGTH + 1),
+    ));
+    try {
+      $status = $id_length_config_test->save();
+      $this->fail(String::format("config_test entity with ID length @len exceeding the maximum allowed length of @max saved successfully", array(
+        '@len' => strlen($id_length_config_test->id),
+        '@max' => ConfigEntityStorage::MAX_ID_LENGTH,
+      )));
+    }
+    catch (ConfigEntityIdLengthException $e) {
+      $this->pass(String::format("config_test entity with ID length @len exceeding the maximum allowed length of @max failed to save", array(
+        '@len' => strlen($id_length_config_test->id),
+        '@max' => ConfigEntityStorage::MAX_ID_LENGTH,
+      )));
+    }
+
     // Ensure that creating an entity with the same id as an existing one is not
     // possible.
     $same_id = entity_create('config_test', array(
