diff --git a/bazel/cc_grpc_library.bzl b/bazel/cc_grpc_library.bzl
index 3f4f5347fb..f6c3720b12 100644
--- a/bazel/cc_grpc_library.bzl
+++ b/bazel/cc_grpc_library.bzl
@@ -14,6 +14,7 @@
 """Generates and compiles C++ grpc stubs from proto_library rules."""

 load("@com_google_protobuf//bazel:cc_proto_library.bzl", "cc_proto_library")
+load("@rules_cc//cc:cc_library.bzl", "cc_library")
 load("@rules_proto//proto:defs.bzl", "proto_library")
 load("//bazel:generate_cc.bzl", "generate_cc")
 load("//bazel:protobuf.bzl", "well_known_proto_libs")
@@ -111,8 +112,7 @@ def cc_grpc_library(
             allow_deprecated = allow_deprecated,
             **kwargs
         )
-
-        native.cc_library(
+        cc_library(
             name = name,
             srcs = [":" + codegen_grpc_target],
             hdrs = [":" + codegen_grpc_target],
diff --git a/bazel/grpc_build_system.bzl b/bazel/grpc_build_system.bzl
index a3b8923b6e..aaba40dacc 100644
--- a/bazel/grpc_build_system.bzl
+++ b/bazel/grpc_build_system.bzl
@@ -32,8 +32,14 @@ load("@build_bazel_rules_apple//apple:ios.bzl", "ios_unit_test")
 load("@build_bazel_rules_apple//apple/testing/default_runner:ios_test_runner.bzl", "ios_test_runner")
 load("@com_google_protobuf//bazel:cc_proto_library.bzl", "cc_proto_library")
 load("@com_google_protobuf//bazel:upb_proto_library.bzl", "upb_proto_library", "upb_proto_reflection_library")
+load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
+load("@rules_cc//cc:cc_library.bzl", "cc_library")
+load("@rules_cc//cc:cc_test.bzl", "cc_test")
+load("@rules_cc//cc:objc_library.bzl", "objc_library")
 load("@rules_proto//proto:defs.bzl", "proto_library")
 load("@rules_python//python:defs.bzl", "py_binary")
+load("@rules_shell//shell:sh_binary.bzl", "sh_binary")
+load("@rules_shell//shell:sh_test.bzl", "sh_test")
 load("//bazel:cc_grpc_library.bzl", "cc_grpc_library")
 load("//bazel:copts.bzl", "GRPC_DEFAULT_COPTS")
 load("//bazel:experiments.bzl", "EXPERIMENTS", "EXPERIMENT_ENABLES", "EXPERIMENT_POLLERS")
@@ -155,7 +161,7 @@ def grpc_cc_library(
     # See b/391433873.
     if "fuzztest" in external_deps and "grpc-fuzztest" not in tags:
         tags = tags + ["grpc-fuzztest"]
-    native.cc_library(
+    cc_library(
         name = name,
         srcs = srcs,
         defines = defines +
@@ -190,7 +196,7 @@ def grpc_cc_library(
     )

 def grpc_proto_plugin(name, srcs = [], deps = []):
-    native.cc_binary(
+    cc_binary(
         name = name + "_native",
         srcs = srcs,
         deps = deps,
@@ -293,7 +299,7 @@ def ios_cc_test(
         device_type = "iPhone X",
     )
     if not any([t for t in tags if t.startswith("no_test_ios")]):
-        native.objc_library(
+        objc_library(
             name = test_lib_ios,
             srcs = kwargs.get("srcs"),
             deps = kwargs.get("deps"),
@@ -585,8 +591,7 @@ def grpc_cc_test(name, srcs = [], deps = [], external_deps = [], args = [], data
             flaky = True,
             **test_args
         )
-
-    native.cc_library(
+    cc_library(
         name = "%s_TEST_LIBRARY" % name,
         testonly = 1,
         srcs = srcs,
@@ -600,7 +605,7 @@ def grpc_cc_test(name, srcs = [], deps = [], external_deps = [], args = [], data
             fail("srcs changed")
         if poller_config["deps"] != core_deps:
             fail("deps changed: %r --> %r" % (deps, poller_config["deps"]))
-        native.cc_test(
+        cc_test(
             name = poller_config["name"],
             deps = ["%s_TEST_LIBRARY" % name],
             tags = poller_config["tags"],
@@ -629,7 +634,7 @@ def grpc_cc_binary(name, srcs = [], deps = [], external_deps = [], args = [], da
     """
     visibility = _update_visibility(visibility)
     copts = []
-    native.cc_binary(
+    cc_binary(
         name = name,
         srcs = srcs,
         args = args,
@@ -695,7 +700,7 @@ def grpc_sh_test(name, srcs = [], args = [], data = [], uses_polling = True, siz
     }

     for poller_config in expand_tests(name, srcs, [], tags, args, exclude_pollers, uses_polling, uses_event_engine, flaky):
-        native.sh_test(
+        sh_test(
             name = poller_config["name"],
             srcs = poller_config["srcs"],
             deps = poller_config["deps"],
@@ -707,7 +712,7 @@ def grpc_sh_test(name, srcs = [], args = [], data = [], uses_polling = True, siz
         )

 def grpc_sh_binary(name, srcs, data = []):
-    native.sh_binary(
+    sh_binary(
         name = name,
         srcs = srcs,
         data = data,
@@ -794,8 +799,7 @@ def grpc_objc_library(
         deps: dependencies
         visibility: visibility, default to public
     """
-
-    native.objc_library(
+    objc_library(
         name = name,
         hdrs = hdrs,
         srcs = srcs,
diff --git a/third_party/address_sorting/address_sorting.bzl b/third_party/address_sorting/address_sorting.bzl
index 05b4c6d847..323f2353b7 100644
--- a/third_party/address_sorting/address_sorting.bzl
+++ b/third_party/address_sorting/address_sorting.bzl
@@ -28,8 +28,10 @@
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.

-def address_sorting_cc_library(name, srcs, hdrs, copts, includes, linkopts=[]):
-    native.cc_library(
+load("@rules_cc//cc:cc_library.bzl", "cc_library")
+
+def address_sorting_cc_library(name, srcs, hdrs, copts, includes, linkopts = []):
+    cc_library(
         name = name,
         srcs = srcs,
         hdrs = hdrs,
diff --git a/third_party/typing_extensions.BUILD b/third_party/typing_extensions.BUILD
index 9d8c77f0cb..f2e1524752 100644
--- a/third_party/typing_extensions.BUILD
+++ b/third_party/typing_extensions.BUILD
@@ -1,3 +1,5 @@
+load("@rules_python//python:defs.bzl", "py_library")
+
 genrule(
     name = "copy_typing_extensions",
     srcs = ["src/typing_extensions.py"],
diff --git a/third_party/xxhash/BUILD b/third_party/xxhash/BUILD
index 91d7bd0566..8c32e0bfc2 100644
--- a/third_party/xxhash/BUILD
+++ b/third_party/xxhash/BUILD
@@ -1,3 +1,5 @@
+load("@rules_cc//cc:cc_library.bzl", "cc_library")
+
 # TODO(donnadionne): describe this package.
 cc_library(
     name = "xxhash",
