diff --git a/app/services/issues/build_service.rb b/app/services/issues/build_service.rb
index a63982f60c805d0889bea6548e02560c990c1ca0..7cd927d8005ca1636e50f2bbe36e2dfdaf1fb998 100644
--- a/app/services/issues/build_service.rb
+++ b/app/services/issues/build_service.rb
@@ -44,7 +44,15 @@ def item_for_discussion(discussion)
     end
 
     def issue_params
-      @issue_params ||= issue_params_with_info_from_merge_request.merge(params.slice(:title, :description))
+      @issue_params ||= issue_params_with_info_from_merge_request.merge(whitelisted_issue_params)
+    end
+
+    def whitelisted_issue_params
+      if can?(current_user, :admin_issue, project)
+        params.slice(:title, :description, :milestone_id)
+      else
+        params.slice(:title, :description)
+      end
     end
   end
 end
diff --git a/changelogs/unreleased/fix_issue_from_milestone.yml b/changelogs/unreleased/fix_issue_from_milestone.yml
new file mode 100644
index 0000000000000000000000000000000000000000..02581e3ea09a77d17015c8b218b6a1b403eed194
--- /dev/null
+++ b/changelogs/unreleased/fix_issue_from_milestone.yml
@@ -0,0 +1,4 @@
+---
+title: fix milestone does not automatically assign when create issue from milestone
+merge_request:
+author:
diff --git a/spec/services/issues/build_service_spec.rb b/spec/services/issues/build_service_spec.rb
index 4cfba35c8306ec7e1670af99f759f8abb5a65767..09807e5d35ba3f268d1c21780682c78f090c2721 100644
--- a/spec/services/issues/build_service_spec.rb
+++ b/spec/services/issues/build_service_spec.rb
@@ -120,11 +120,20 @@ def position_on_line(line_number)
   end
 
   describe '#execute' do
+    let(:milestone) { create(:milestone, project: project) }
+
     it 'builds a new issues with given params' do
-      issue = described_class.new(project, user, title: 'Issue #1', description: 'Issue description').execute
+      issue = described_class.new(
+        project,
+        user,
+        title: 'Issue #1',
+        description: 'Issue description',
+        milestone_id: milestone.id,
+      ).execute
 
       expect(issue.title).to eq('Issue #1')
       expect(issue.description).to eq('Issue description')
+      expect(issue.milestone).to eq(milestone)
     end
   end
 end
diff --git a/spec/services/issues/create_service_spec.rb b/spec/services/issues/create_service_spec.rb
index 30578ee4c7d95b88f39f15dd74b9a4d5ea3a425d..e1feeed8a67e48f722ca6939c4cf034836292cdd 100644
--- a/spec/services/issues/create_service_spec.rb
+++ b/spec/services/issues/create_service_spec.rb
@@ -46,6 +46,7 @@
 
           expect(issue).to be_persisted
           expect(issue.title).to eq('Awesome issue')
+          expect(issue.description).to eq('please fix')
           expect(issue.assignee).to be_nil
           expect(issue.labels).to be_empty
           expect(issue.milestone).to be_nil
diff --git a/spec/support/services/issuable_create_service_slash_commands_shared_examples.rb b/spec/support/services/issuable_create_service_slash_commands_shared_examples.rb
index dd54b0addda68d4facefaa9291a2d87d08e31b3f..c64574679b6debd94f0ccab013bf5ae8b191a409 100644
--- a/spec/support/services/issuable_create_service_slash_commands_shared_examples.rb
+++ b/spec/support/services/issuable_create_service_slash_commands_shared_examples.rb
@@ -58,7 +58,7 @@
     let(:example_params) do
       {
         assignee: create(:user),
-        milestone_id: double(:milestone),
+        milestone_id: 1,
         description: %(/assign @#{assignee.username}\n/milestone %"#{milestone.name}")
       }
     end