diff --git a/core/modules/migrate/config/schema/migrate.data_types.schema.yml b/core/modules/migrate/config/schema/migrate.data_types.schema.yml
index d887785..5b95871 100644
--- a/core/modules/migrate/config/schema/migrate.data_types.schema.yml
+++ b/core/modules/migrate/config/schema/migrate.data_types.schema.yml
@@ -24,6 +24,9 @@ migrate_source:
 migrate_source_sql:
   type: migrate_source
   mapping:
+    idlist:
+      type: sequence
+      label: 'Source IDs to be migrated'
     target:
       type: string
       label: 'The migration database target'
diff --git a/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php b/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
index 7a448f0..f63c2e9 100644
--- a/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
+++ b/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
@@ -116,16 +116,12 @@ protected function initializeIterator() {
     $this->prepareQuery();
     $high_water_property = $this->migration->get('highWaterProperty');
 
-    // Get the key values, for potential use in joining to the map table, or
-    // enforcing idlist.
-    $keys = array();
-
     // The rules for determining what conditions to add to the query are as
     // follows (applying first applicable rule)
     // 1. If idlist is provided, then only process items in that list (AND key
     //    IN (idlist)). Only applicable with single-value keys.
-    if ($id_list = $this->migration->get('idlist')) {
-      $this->query->condition($keys[0], $id_list, 'IN');
+    if (isset($this->configuration['idlist'])) {
+      $this->query->condition(array_keys($this->getIds())[0], $this->configuration['idlist'], 'IN');
     }
     else {
       // 2. If the map is joinable, join it. We will want to accept all rows
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/ActionTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/ActionTest.php
index cc88aef..0250b35 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/ActionTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/ActionTest.php
@@ -24,8 +24,6 @@ class ActionTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_action',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/AggregatorFeedTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/AggregatorFeedTest.php
index ecb57ba..e0a2aa1 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/AggregatorFeedTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/AggregatorFeedTest.php
@@ -20,7 +20,6 @@ class AggregatorFeedTest extends MigrateSqlSourceTestCase {
 
   protected $migrationConfiguration = array(
     'id' => 'test',
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_aggregator_feed',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/AggregatorItemTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/AggregatorItemTest.php
index 29c0c0d..ae39e05 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/AggregatorItemTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/AggregatorItemTest.php
@@ -22,8 +22,6 @@ class AggregatorItemTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_aggregator_item',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/BlockTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/BlockTest.php
index 79e3344..dd3e87e 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/BlockTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/BlockTest.php
@@ -24,7 +24,6 @@ class BlockTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'test',
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_block',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/BoxTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/BoxTest.php
index fdd33ed..6b2bc8a 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/BoxTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/BoxTest.php
@@ -24,8 +24,6 @@ class BoxTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_boxes',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/CommentTestBase.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/CommentTestBase.php
index 0b8f403..9baa67d 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/CommentTestBase.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/CommentTestBase.php
@@ -22,8 +22,6 @@
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => array(),
     // This needs to be the identifier of the actual key: cid for comment, nid
     // for node and so on.
     'source' => array(
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/ContactCategoryTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/ContactCategoryTest.php
index a3c4055..6973223 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/ContactCategoryTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/ContactCategoryTest.php
@@ -20,7 +20,6 @@ class ContactCategoryTest extends MigrateSqlSourceTestCase {
 
   protected $migrationConfiguration = array(
     'id' => 'test',
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_contact_category',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldInstancePerViewModeTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldInstancePerViewModeTest.php
index 0bf81f9..bf0ea58 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldInstancePerViewModeTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldInstancePerViewModeTest.php
@@ -24,8 +24,6 @@ class FieldInstancePerViewModeTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'view_mode_test',
-    // Leave it empty for now.
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_field_instance_per_view_mode',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldInstanceTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldInstanceTest.php
index 22300bf..64480ad 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldInstanceTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldInstanceTest.php
@@ -24,8 +24,6 @@ class FieldInstanceTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = [
     // The id of the entity, can be any string.
     'id' => 'test_fieldinstance',
-    // Leave it empty for now.
-    'idlist' => [],
     'source' => [
       'plugin' => 'd6_field_instance',
     ],
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldTest.php
index e95ac4a..2d0a5d9 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/FieldTest.php
@@ -24,8 +24,6 @@ class FieldTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The id of the entity, can be any string.
     'id' => 'test_field',
-    // Leave it empty for now.
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_field',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/FileTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/FileTest.php
index 52614c9..570a553 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/FileTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/FileTest.php
@@ -22,8 +22,6 @@ class FileTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_file',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/FilterFormatTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/FilterFormatTest.php
index 49ec31a..384fd9d 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/FilterFormatTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/FilterFormatTest.php
@@ -24,7 +24,6 @@ class FilterFormatTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     'id' => 'test',
     'highWaterProperty' => array('field' => 'test'),
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_filter_formats',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/MenuLinkSourceTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/MenuLinkSourceTest.php
index fb9e0e7..69b6651 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/MenuLinkSourceTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/MenuLinkSourceTest.php
@@ -24,8 +24,6 @@ class MenuLinkSourceTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'mlid',
-    // Leave it empty for now.
-    'idlist' => array(),
     // This needs to be the identifier of the actual key: cid for comment, nid
     // for node and so on.
     'source' => array(
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/MenuTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/MenuTest.php
index 4ec45b4..b448ed2 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/MenuTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/MenuTest.php
@@ -24,8 +24,6 @@ class MenuTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => array(),
     // This needs to be the identifier of the actual key: cid for comment, nid
     // for node and so on.
     'source' => array(
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeByNodeTypeTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeByNodeTypeTest.php
index 2370bd8..c283bc6 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeByNodeTypeTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeByNodeTypeTest.php
@@ -21,8 +21,6 @@ class NodeByNodeTypeTest extends MigrateSqlSourceTestCase {
   // The fake Migration configuration entity.
   protected $migrationConfiguration = array(
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => array(),
     // The fake configuration for the source.
     'source' => array(
       'plugin' => 'd6_node',
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionByNodeTypeTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionByNodeTypeTest.php
index e4e7acb..54db37e 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionByNodeTypeTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionByNodeTypeTest.php
@@ -21,8 +21,6 @@ class NodeRevisionByNodeTypeTest extends MigrateSqlSourceTestCase {
   // The fake Migration configuration entity.
   protected $migrationConfiguration = [
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => [],
     // The fake configuration for the source.
     'source' => [
       'plugin' => 'd6_node_revision',
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php
index 4dde4b1..1bd0520 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeRevisionTest.php
@@ -21,8 +21,6 @@ class NodeRevisionTest extends MigrateSqlSourceTestCase {
   // The fake Migration configuration entity.
   protected $migrationConfiguration = [
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => [],
     // The fake configuration for the source.
     'source' => [
       'plugin' => 'd6_node_revision',
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php
index a108f61..24c9049 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTest.php
@@ -21,8 +21,6 @@ class NodeTest extends MigrateSqlSourceTestCase {
   // The fake Migration configuration entity.
   protected $migrationConfiguration = array(
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => array(),
     // The fake configuration for the source.
     'source' => array(
       'plugin' => 'd6_node',
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTypeTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTypeTest.php
index 5d80aca..530414e 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTypeTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/NodeTypeTest.php
@@ -24,8 +24,6 @@ class NodeTypeTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'test_nodetypes',
-    // Leave it empty for now.
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_nodetype',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/ProfileFieldTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/ProfileFieldTest.php
index 4a8609e..51cabb0 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/ProfileFieldTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/ProfileFieldTest.php
@@ -24,8 +24,6 @@ class ProfileFieldTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = [
     // The id of the entity, can be any string.
     'id' => 'test_profile_fields',
-    // Leave it empty for now.
-    'idlist' => [],
     'source' => [
       'plugin' => 'd6_profile_field',
     ],
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/RoleTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/RoleTest.php
index e9311d7..8f3c08c 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/RoleTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/RoleTest.php
@@ -24,8 +24,6 @@ class RoleTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => array(),
     // This needs to be the identifier of the actual key: cid for comment, nid
     // for node and so on.
     'source' => array(
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/TermTestBase.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/TermTestBase.php
index ba8129c..7f2de9f 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/TermTestBase.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/TermTestBase.php
@@ -19,7 +19,6 @@
   protected $migrationConfiguration = array(
     'id' => 'test',
     'highWaterProperty' => array('field' => 'test'),
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_taxonomy_term',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/UrlAliasTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/UrlAliasTest.php
index 780ed0b..6177894 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/UrlAliasTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/UrlAliasTest.php
@@ -21,7 +21,6 @@ class UrlAliasTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     'id' => 'test',
     'highWaterProperty' => array('field' => 'test'),
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_url_alias',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/UserPictureTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/UserPictureTest.php
index de70385..5f7b6fe 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/UserPictureTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/UserPictureTest.php
@@ -20,7 +20,6 @@ class UserPictureTest extends MigrateSqlSourceTestCase {
 
   protected $migrationConfiguration = array(
     'id' => 'test_user_picture',
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_user_picture',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/UserTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/UserTest.php
index 36d4b67..29a4c10 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/UserTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/UserTest.php
@@ -20,7 +20,6 @@ class UserTest extends MigrateSqlSourceTestCase {
 
   protected $migrationConfiguration = array(
     'id' => 'test',
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_user',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/ViewModeTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/ViewModeTest.php
index 250549f..d285dcd 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/ViewModeTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/ViewModeTest.php
@@ -24,8 +24,6 @@ class ViewModeTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = array(
     // The ID of the entity, can be any string.
     'id' => 'view_mode_test',
-    // Leave it empty for now.
-    'idlist' => array(),
     'source' => array(
       'plugin' => 'd6_field_instance_view_mode',
     ),
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/VocabularyTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/VocabularyTest.php
index 2c0d5e6..f5e273a 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/VocabularyTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/VocabularyTest.php
@@ -22,8 +22,6 @@ class VocabularyTest extends MigrateSqlSourceTestCase {
   protected $migrationConfiguration = [
     // The ID of the entity, can be any string.
     'id' => 'test',
-    // Leave it empty for now.
-    'idlist' => [],
     'source' => [
       'plugin' => 'd6_vocabulary',
     ],
