Tu je rýchla Github Action, ktorú mi navrhol prompt, na pravidelné zálohovanie nastavení Cloudflare DNS pre všetky moje domény a ich commitovanie do repozitára. Po nastavení nevyžaduje žiadnu údržbu:
name: Cloudflare DNS Backup
on:
workflow_dispatch:
schedule:
- cron: "40 0 * * 0"
jobs:
backup:
runs-on: ubuntu-22.04
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
- run: |
# Create backup directory
mkdir -p dns-backups
# Get list of zones (domains)
zones=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" | jq -r '.result[].id')
# Loop through zones and backup DNS records
for zone in $zones; do
# Get zone name
zone_name=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" | jq -r '.result.name')
echo "Backing up DNS records for $zone_name"
# Get DNS records and save to file
curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone/dns_records" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" | jq > "dns-backups/$zone_name.json"
done
- uses: stefanzweifel/git-auto-commit-action@v5
Po nastavení budú zálohy Cloudflare DNS vytvorené v priečinku
dns-backups/domain.tld.json. Samotné nastavenie je však trochu magické,
takže som pripravil podrobné kroky, aby bolo možné to v budúcnosti
zopakovať.
Inštrukcie #
- Získaj Cloudflare API token
- Pridaj tento token do svojho Github repozitára ako secret s názvom
CLOUDFLARE_API_TOKEN - Povol Github Actions oprávnenia na zápis, keďže táto akcia vytvára automatické commity
- Záloha sa bude spúšťať manuálne alebo každú nedeľu skoro ráno, podľa
potreby uprav
schedulev.github/workflow/main.yml
Cloudflare API token #
Tu je postup, ako vytvoriť Cloudflare API token s minimálnymi oprávneniami pre prístup DNS len na čítanie:
- Prihlás sa do svojho Cloudflare dashboardu na https://dash.cloudflare.com/
- Klikni na ikonu profilu v pravom hornom rohu a vyber “My Profile”
- V ľavom postrannom paneli klikni na “API Tokens”
- Klikni na tlačidlo “Create Token”
- Vyber “Create Custom Token”
- Zadaj opisný názov, napríklad “DNS Backup Read-Only”
- V sekcii “Permissions”:
- Z prvého rozbaľovacieho zoznamu vyber “Zone”
- Z druhého rozbaľovacieho zoznamu vyber “DNS”
- Z tretieho rozbaľovacieho zoznamu vyber “Read”
- V sekcii “Zone Resources”:
- Z prvého rozbaľovacieho zoznamu vyber “Include”
- Z druhého rozbaľovacieho zoznamu vyber “All zones”
- (Alternatívne môžeš vybrať “Specific zone”, ak chceš obmedziť na určité domény)
- Ak chceš, nastav dátum vypršania platnosti (voliteľné, pre väčšiu bezpečnosť)
- Klikni na “Continue to summary”
- Skontroluj oprávnenia a klikni na “Create Token”
- Okamžite skopíruj vygenerovaný token (zobrazí sa len raz)
Tento token má absolútne minimálne potrebné oprávnenia — môže len čítať DNS záznamy a nemôže robiť žiadne zmeny v tvojej konfigurácii. Dodržiava princíp najmenších oprávnení, čo je osvedčená bezpečnostná prax.
Pridávanie Github Secrets #
Github Secrets ti umožňujú bezpečne ukladať citlivé informácie ako sú API tokeny. Postupuj podľa týchto krokov na pridanie Cloudflare API tokenu ako secret.
- Prejdi do svojho Github repozitára v prehliadači. Klikni na záložku “Settings” v hornej navigačnej lište (blízko pravej strany)
- V ľavom postrannom paneli prejdi dolu do sekcie “Security”. Klikni na “Secrets and variables” a vyber “Actions” z rozbaľovacieho menu
- Klikni na tlačidlo “New repository secret”. Zadaj presný názov secretu tak, ako je uvedený vo workflow:
- Do poľa “Name” zadaj CLOUDFLARE_API_TOKEN
- Do poľa “Secret” vlož svoj Cloudflare API token. Klikni na “Add secret” pre uloženie
- Teraz by si mal vidieť CLOUDFLARE_API_TOKEN v zozname secretov repozitára. Hodnota bude skrytá a zobrazená ako ”●●●●●●●●”. Secret je teraz dostupný pre tvoje Github Actions workflow
- Secret v tvojom workflow je už nakonfigurovaný na jeho použitie
Povolenie oprávnení na zápis pre Github Actions #
Aby mohol tvoj DNS zálohovací workflow úspešne commitovať a pushovat zmeny do repozitára, musíš mu udeliť príslušné oprávnenia na zápis. Postupuj podľa týchto krokov:
- Prejdi do svojho Github repozitára. Klikni na záložku “Settings” (blízko pravého horného rohu stránky repozitára)
- V ľavom postrannom paneli klikni na “Actions” pod “Code and automation”. Prejdi dolu do sekcie “Workflow permissions”
- Vyber možnosť “Read and write permissions”
- Klikni na “Save” pre uloženie nastavení
Toto je postačujúce pre spúšťanie priamo na Github.
Lokálny vývoj #
Postupuj podľa všetkých vyššie uvedených krokov. Potom navyše nainštaluj
nektos/act na svojom počítači, pre mňa na Mac M3 Pro fungovala verzia z
Homebrew:
brew install act
Získaj fine-grained Personal Access Token.
cp .secrets.example .secrets
V súbore .secrets aktualizuj CLOUDFLARE_API_TOKEN aj GITHUB_TOKEN. Do
tejto premennej vlož svoj práve získaný fine-grained token. Uprav čokoľvek
ďalšie potrebné vo svojom main.yml. Potom spusti lokálne:
act workflow_dispatch --no-skip-checkout
Ak spúšťaš act prvýkrát, preferovane vyber Medium Docker image (500
MB). Malo by fungovať s Large (~75 GB) a s Micro nebolo testované.
Vytvorenie fine-grained Personal Access Token #
Tento návod ťa prevedie vytvorením Github fine-grained personal access tokenu (PAT) s oprávneniami na zápis pre konkrétny repozitár.
- Prihlás sa do svojho Github účtu. Klikni na svoju profilovú fotku v pravom hornom rohu. Vyber “Settings” z rozbaľovacieho menu. Prejdi dolu na spodok ľavého postranného panela a klikni na “Developer settings”
- V ľavom postrannom paneli klikni na “Personal access tokens”. Vyber “Fine-grained tokens”. Klikni na tlačidlo “Generate new token”
- Názov tokenu: Zadaj opisný názov (napr. “DNS Backup Workflow”). Popis: Pridaj voliteľný popis, na čo bude token použitý. Platnosť: Vyber, kedy má token vypršať (odporúčané: zvoľ rozumnú dobu, napríklad 90 dní). Vlastník zdroja: Vyber svoje Github používateľské meno (alebo organizáciu, ak sa to týka)
- Vyber “Only select repositories”. Klikni na rozbaľovací zoznam repozitárov. Vyber konkrétny repozitár, ku ktorému chceš udeliť prístup
- Prejdi dolu do sekcie “Repository permissions”. Nájdi “Contents” v zozname. Zmeň úroveň prístupu z “No access” na “Read and write”. Všetky ostatné oprávnenia nechaj na “No access”, aby si dodržal princíp najmenších oprávnení
- Prejdi na spodok stránky. Klikni na “Generate token”. DÔLEŽITÉ: Okamžite skopíruj vygenerovaný token a bezpečne ho ulož (toto je tvoja jediná príležitosť vidieť celý token)
Treba poznamenať, že GITHUB_TOKEN je automaticky injektovaný pre Actions
bežiace cez Github. Vyplnenie secretu GITHUB_TOKEN je potrebné len vtedy,
keď sa akcia spúšťa cez act. Nech sa darí!
Odkazy #
- https://developers.cloudflare.com/fundamentals/api/how-to/make-api-calls/
- https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#fine-grained-personal-access-tokens
- https://github.com/stefanzweifel/git-auto-commit-action#usage
- https://nektosact.com/usage/runners.html#runners