diff --git a/ansible/kayobe-ansible-user.yml b/ansible/kayobe-ansible-user.yml
index 5ca11cf0292c7e1ee6a5101a707b74aabaa68c67..cfb6bdcf01a1c0d121e05b8a2582be4a5e691c05 100644
--- a/ansible/kayobe-ansible-user.yml
+++ b/ansible/kayobe-ansible-user.yml
@@ -40,6 +40,9 @@
   gather_facts: no
   vars:
     ansible_user: "{{ bootstrap_user }}"
+    dnf_options:
+      - "-y"
+      - "{% if 'proxy' in dnf_config %}--setopt=proxy={{ dnf_config['proxy'] }}{% endif %}"
   tags:
     - ensure-python
   tasks:
@@ -49,8 +52,9 @@
       failed_when: false
       register: check_python
 
+    # TODO(priteau): Support apt proxy
     - name: Ensure python is installed
-      raw: test -e /usr/bin/apt && (sudo apt -y update && sudo apt install -y python3-minimal) || (sudo dnf -y install python3)
+      raw: "test -e /usr/bin/apt && (sudo apt -y update && sudo apt install -y python3-minimal) || (sudo dnf {{ dnf_options | select | join(' ') }} install python3)"
       when: check_python.rc != 0
 
 - name: Ensure the Kayobe Ansible user account exists
diff --git a/releasenotes/notes/dnf-proxy-22a6eb457c06a223.yaml b/releasenotes/notes/dnf-proxy-22a6eb457c06a223.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fca378ee5246833e369657bd5412e369f2a0b624
--- /dev/null
+++ b/releasenotes/notes/dnf-proxy-22a6eb457c06a223.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    Sets proxy option when using ``dnf`` during user bootstrapping, before
+    ``dnf.conf`` is updated. This allows Kayobe to install Python 3 during host
+    configuration when ``dnf`` requires a proxy to operate.