diff --git a/cms/envs/aws.py b/cms/envs/aws.py
index 16d0d262c93f61e22ebfd5c5ab213849f15f2fa1..4e4caaad6eeec610307a3d4e6ebc4c13c0447cb7 100644
--- a/cms/envs/aws.py
+++ b/cms/envs/aws.py
@@ -437,6 +437,9 @@ CELERY_QUEUES.update(
 # Queue to use for updating grades due to grading policy change
 POLICY_CHANGE_GRADES_ROUTING_KEY = ENV_TOKENS.get('POLICY_CHANGE_GRADES_ROUTING_KEY', LOW_PRIORITY_QUEUE)
 
+# Rate limit for regrading tasks that a grading policy change can kick off
+POLICY_CHANGE_TASK_RATE_LIMIT = ENV_TOKENS.get('POLICY_CHANGE_TASK_RATE_LIMIT', POLICY_CHANGE_TASK_RATE_LIMIT)
+
 # Event tracking
 TRACKING_BACKENDS.update(AUTH_TOKENS.get("TRACKING_BACKENDS", {}))
 EVENT_TRACKING_BACKENDS['tracking_logs']['OPTIONS']['backends'].update(AUTH_TOKENS.get("EVENT_TRACKING_BACKENDS", {}))
diff --git a/cms/envs/common.py b/cms/envs/common.py
index cea9c6aad9cd35d2ab2e987c2ef7b0e92e464163..6cecd0441111cefffc88dcfaa7dfd8d719bedc60 100644
--- a/cms/envs/common.py
+++ b/cms/envs/common.py
@@ -1469,6 +1469,9 @@ RECALCULATE_GRADES_ROUTING_KEY = LOW_PRIORITY_QUEUE
 # Queue to use for updating grades due to grading policy change
 POLICY_CHANGE_GRADES_ROUTING_KEY = LOW_PRIORITY_QUEUE
 
+# Rate limit for regrading tasks that a grading policy change can kick off
+POLICY_CHANGE_TASK_RATE_LIMIT = '300/h'
+
 ############## Settings for CourseGraph ############################
 COURSEGRAPH_JOB_QUEUE = LOW_PRIORITY_QUEUE
 
diff --git a/lms/djangoapps/grades/tasks.py b/lms/djangoapps/grades/tasks.py
index 2839834bbaca6227b8d37e7283fddcecd68c07d4..80ca5586c33a0e411e279b4a5d4e7d198e3f7261 100644
--- a/lms/djangoapps/grades/tasks.py
+++ b/lms/djangoapps/grades/tasks.py
@@ -72,7 +72,8 @@ def compute_all_grades_for_course(**kwargs):
     base=LoggedPersistOnFailureTask,
     default_retry_delay=RETRY_DELAY_SECONDS,
     max_retries=1,
-    time_limit=COURSE_GRADE_TIMEOUT_SECONDS
+    time_limit=COURSE_GRADE_TIMEOUT_SECONDS,
+    rate_limit=settings.POLICY_CHANGE_TASK_RATE_LIMIT,
 )
 def compute_grades_for_course_v2(self, **kwargs):
     """
diff --git a/lms/envs/aws.py b/lms/envs/aws.py
index 2d15044e070ae670d847b5c4957a4efa50ded43f..f3f8a688aa7bbb66079000ae24c9fcafd7bb2716 100644
--- a/lms/envs/aws.py
+++ b/lms/envs/aws.py
@@ -634,6 +634,9 @@ GRADES_DOWNLOAD_ROUTING_KEY = ENV_TOKENS.get('GRADES_DOWNLOAD_ROUTING_KEY', HIGH
 
 GRADES_DOWNLOAD = ENV_TOKENS.get("GRADES_DOWNLOAD", GRADES_DOWNLOAD)
 
+# Rate limit for regrading tasks that a grading policy change can kick off
+POLICY_CHANGE_TASK_RATE_LIMIT = ENV_TOKENS.get('POLICY_CHANGE_TASK_RATE_LIMIT', POLICY_CHANGE_TASK_RATE_LIMIT)
+
 # financial reports
 FINANCIAL_REPORTS = ENV_TOKENS.get("FINANCIAL_REPORTS", FINANCIAL_REPORTS)
 
diff --git a/lms/envs/common.py b/lms/envs/common.py
index c241714b1a89f500091587e30f741d13d77df3fe..84da8d616646647a5514d52bb528b073f572e189 100644
--- a/lms/envs/common.py
+++ b/lms/envs/common.py
@@ -2620,6 +2620,10 @@ FINANCIAL_REPORTS = {
     'ROOT_PATH': '/tmp/edx-s3/financial_reports',
 }
 
+#### Grading policy change-related settings #####
+# Rate limit for regrading tasks that a grading policy change can kick off
+POLICY_CHANGE_TASK_RATE_LIMIT = '300/h'
+
 #### PASSWORD POLICY SETTINGS #####
 PASSWORD_MIN_LENGTH = 8
 PASSWORD_MAX_LENGTH = None