diff --git a/changelogs/unreleased/rf-remove-group-overview-security-dashboard-feature-flag.yml b/changelogs/unreleased/rf-remove-group-overview-security-dashboard-feature-flag.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f412ba11b91de942b7192192538cb3793ec2b65e
--- /dev/null
+++ b/changelogs/unreleased/rf-remove-group-overview-security-dashboard-feature-flag.yml
@@ -0,0 +1,5 @@
+---
+title: Remove Security Dashboard feature flag
+merge_request: 31820
+author:
+type: other
diff --git a/ee/app/controllers/ee/groups_controller.rb b/ee/app/controllers/ee/groups_controller.rb
index 5f741f4509733026626a2ee5ce934d3ed351d421..46b52346fed6f2c9cbffc8cc2223cf3706d68329 100644
--- a/ee/app/controllers/ee/groups_controller.rb
+++ b/ee/app/controllers/ee/groups_controller.rb
@@ -44,7 +44,7 @@ def redirect_show_path
       strong_memoize(:redirect_show_path) do
         case group_view
         when 'security_dashboard'
-          helpers.group_security_dashboard_path(group) if ::Feature.enabled?(:group_overview_security_dashboard)
+          helpers.group_security_dashboard_path(group)
         else
           nil
         end
diff --git a/ee/app/helpers/ee/preferences_helper.rb b/ee/app/helpers/ee/preferences_helper.rb
index 75c2ad1d9580b1102506aac7ea51cd113731bd3c..97e86e21efb650351a16fde9471570589bcb2b0a 100644
--- a/ee/app/helpers/ee/preferences_helper.rb
+++ b/ee/app/helpers/ee/preferences_helper.rb
@@ -27,7 +27,7 @@ def group_overview_content_preference?
     private
 
     def group_view_security_dashboard_enabled?
-      License.feature_available?(:security_dashboard) && ::Feature.enabled?(:group_overview_security_dashboard)
+      License.feature_available?(:security_dashboard)
     end
   end
 end
diff --git a/ee/lib/ee/gitlab/usage_data.rb b/ee/lib/ee/gitlab/usage_data.rb
index 0cb1e6b4ff860c232e4d84626685a38412598e45..e6ad74d3c03905de9df44a2fb31e5abd565ff2aa 100644
--- a/ee/lib/ee/gitlab/usage_data.rb
+++ b/ee/lib/ee/gitlab/usage_data.rb
@@ -101,12 +101,10 @@ def security_products_usage
         override :user_preferences_usage
         def user_preferences_usage
           super.tap do |user_prefs_usage|
-            if ::Feature.enabled?(:group_overview_security_dashboard)
-              user_prefs_usage.merge!(
-                group_overview_details: count(::User.active.group_view_details),
-                group_overview_security_dashboard: count(::User.active.group_view_security_dashboard)
-              )
-            end
+            user_prefs_usage.merge!(
+              group_overview_details: count(::User.active.group_view_details),
+              group_overview_security_dashboard: count(::User.active.group_view_security_dashboard)
+            )
           end
         end
 
diff --git a/ee/spec/controllers/groups/groups_controller_spec.rb b/ee/spec/controllers/groups/groups_controller_spec.rb
index cea66a766e6e74f40da792ec6a7e7884bc71dcc5..62ecba4932c28efc3c739f3ff88bc33dcfa50639 100644
--- a/ee/spec/controllers/groups/groups_controller_spec.rb
+++ b/ee/spec/controllers/groups/groups_controller_spec.rb
@@ -140,42 +140,6 @@
               expect(subject).to render_template('groups/show')
             end
           end
-
-          context 'and the feature flag is disabled' do
-            before do
-              stub_feature_flags(group_overview_security_dashboard: false)
-            end
-
-            it 'renders the expected template' do
-              expect(subject).to render_template('groups/show')
-            end
-          end
-        end
-      end
-
-      context 'when feature flag is disabled' do
-        before do
-          stub_feature_flags(group_overview_security_dashboard: false)
-        end
-
-        let(:user) { create(:user, group_view: :security_dashboard) } # not a member of a group
-
-        context 'when security dashboard feature is enabled' do
-          before do
-            stub_licensed_features(security_dashboard: true)
-          end
-
-          context 'when user is not allowed to access group security dashboard' do
-            it 'works because security dashboard is not rendered' do
-              expect(subject).to have_gitlab_http_status(200)
-            end
-          end
-        end
-
-        context 'when security dashboard feature is disabled' do
-          it 'works because security dashboard is not rendered' do
-            expect(subject).to have_gitlab_http_status(200)
-          end
         end
       end
     end
@@ -194,16 +158,6 @@
           it 'does not redirect to the security dashboard' do
             expect(subject).not_to redirect_to(group_security_dashboard_url(group))
           end
-
-          context 'and the feature flag is disabled' do
-            before do
-              stub_feature_flags(group_overview_security_dashboard: false)
-            end
-
-            it 'renders the expected template' do
-              expect(subject).to render_template('groups/show')
-            end
-          end
         end
       end
     end
diff --git a/ee/spec/helpers/preferences_helper_spec.rb b/ee/spec/helpers/preferences_helper_spec.rb
index e04276b4c0e88a66cec95ada61b96cd467291eec..864d6f2804eae61129639cb340fbed55edc4c772 100644
--- a/ee/spec/helpers/preferences_helper_spec.rb
+++ b/ee/spec/helpers/preferences_helper_spec.rb
@@ -40,14 +40,6 @@
       end
 
       it { is_expected.to include(['Security dashboard', :security_dashboard]) }
-
-      context 'but feature flag is disabled' do
-        before do
-          stub_feature_flags(group_overview_security_dashboard: false)
-        end
-
-        it { is_expected.not_to include(['Security dashboard', :security_dashboard]) }
-      end
     end
 
     context 'when security dashboard feature is disabled' do
@@ -64,14 +56,6 @@
       end
 
       it { is_expected.to eq(true) }
-
-      context 'but feature flag is disabled' do
-        before do
-          stub_feature_flags(group_overview_security_dashboard: false)
-        end
-
-        it { is_expected.to eq(false) }
-      end
     end
 
     context 'when security dashboard feature is disabled' do
diff --git a/ee/spec/lib/gitlab/usage_data_spec.rb b/ee/spec/lib/gitlab/usage_data_spec.rb
index 203cb6db34584f3bf8ad9a0d8b5ab202b679d33c..dff61f4d7d2637b5b6c5c779803e58516f686510 100644
--- a/ee/spec/lib/gitlab/usage_data_spec.rb
+++ b/ee/spec/lib/gitlab/usage_data_spec.rb
@@ -112,11 +112,6 @@
         group_overview_security_dashboard: 2
       )
     end
-
-    it 'does not gather group overview preferences usage data when the feature is disabled' do
-      stub_feature_flags(group_overview_security_dashboard: false)
-      expect(subject[:counts].keys).not_to include(:user_preferences)
-    end
   end
 
   describe '#features_usage_data_ee' do
diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb
index b905b313706082a52f0c5f2dbaaab02bfae5284d..983eebdeacd8f7b01ccd5605d1398e8b1ae9f8e7 100644
--- a/lib/gitlab/usage_data.rb
+++ b/lib/gitlab/usage_data.rb
@@ -100,9 +100,7 @@ def system_usage_data
           .merge(services_usage)
           .merge(approximate_counts)
         }.tap do |data|
-          if Feature.enabled?(:group_overview_security_dashboard)
-            data[:counts][:user_preferences] = user_preferences_usage
-          end
+          data[:counts][:user_preferences] = user_preferences_usage
         end
       end
       # rubocop: enable CodeReuse/ActiveRecord
diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb
index 588c68d1fb0fac2914dccbd963072f7a7fb61103..9bbd9394d572e5be5a478dff2a6ffabbb67dfe6b 100644
--- a/spec/lib/gitlab/usage_data_spec.rb
+++ b/spec/lib/gitlab/usage_data_spec.rb
@@ -154,11 +154,6 @@
       expect(expected_keys - count_data.keys).to be_empty
     end
 
-    it 'does not gather user preferences usage data when the feature is disabled' do
-      stub_feature_flags(group_overview_security_dashboard: false)
-      expect(subject[:counts].keys).not_to include(:user_preferences)
-    end
-
     it 'gathers projects data correctly' do
       count_data = subject[:counts]