Najlepsze Praktyki Zarzadzania Sekretami
Trzymaj sekrety poza repozytorium dotfiles. Ten przewodnik omawia trzy przetestowane metody bezpiecznego zarzadzania poswiadczeniami z Chezmoi.
Dlaczego to wazne
Repozytoria dotfiles sa czesto publiczne. Jeden zatwierdzony klucz API, token lub haslo moze prowadzic do:
- Przejecia konta w ciagu minut od wyslania.
- Naduzycia rozliczen chmurowych z wycieku poswiadczen chmurowych.
- Atakow na lancuch dostaw gdy tokeny CI sa ujawnione.
Zlote zasady
- Nigdy nie przechowuj sekretow w postaci jawnej w kontroli wersji.
- Szyfruj w spoczynku -- uzyj age, SOPS lub menedzera sekretow.
- Weryfikuj przed kazdym commitem -- zautomatyzuj za pomoca hookow pre-commit.
Metoda 1: Chezmoi + age (Zalecana)
age to proste, nowoczesne narzedzie do szyfrowania plikow. Chezmoi ma natywna integracje.
Konfiguracja
bash
# Zainstaluj age
brew install age # macOS
sudo apt install age # Ubuntu
# Wygeneruj pare kluczy
age-keygen -o ~/.config/chezmoi/key.txt
# Skonfiguruj Chezmoi
chezmoi edit-configDodaj do ~/.config/chezmoi/chezmoi.toml:
toml
encryption = "age"
[age]
identity = "~/.config/chezmoi/key.txt"
recipient = "age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Zaszyfruj plik
bash
# Dodaj tajny plik jako zaszyfrowany
chezmoi add --encrypt ~/.config/gh/hosts.yml
# Plik jest przechowywany zaszyfrowany w katalogu zrodlowym
cat "$(chezmoi source-path)/encrypted_dot_config/gh/hosts.yml.age"Sekrety w szablonach
bash
# Uzyj szablonow Chezmoi dla sekretow inline
chezmoi edit ~/.bashrctext
export GITHUB_TOKEN="{{ (bitwarden "github-token").notes }}"
export AWS_ACCESS_KEY_ID="{{ pass "aws/access-key-id" }}"Metoda 2: Chezmoi + SOPS
SOPS (Secrets OPerationS) szyfruje okreslone klucze w plikach YAML/JSON, zachowujac widoczna strukture.
Konfiguracja
bash
# Zainstaluj SOPS
brew install sops # macOS
sudo apt install sops # Ubuntu
# Utworz konfiguracje SOPS
cat > .sops.yaml << 'EOF'
creation_rules:
- age: >-
age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
EOFSzyfrowanie
bash
# Utworz plik sekretow
cat > chezmoi-data.yaml << 'EOF'
github_token: ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
aws_key: AKIAIOSFODNN7EXAMPLE
EOF
# Zaszyfruj za pomoca SOPS
sops --encrypt --in-place chezmoi-data.yamlUzycie w szablonach
Dodaj do chezmoi.toml:
toml
[data]
[data.secrets]
source = "sops"
path = "chezmoi-data.yaml"Metoda 3: 1Password CLI
1Password CLI (op) pobiera sekrety w czasie aplikowania bez przechowywania ich lokalnie.
Konfiguracja
bash
# Zainstaluj 1Password CLI
brew install --cask 1password-cli # macOS
# Zaloguj sie
op signinUzycie w szablonach Chezmoi
text
export GITHUB_TOKEN="{{ onepasswordRead "op://Private/GitHub Token/credential" }}"
export NPM_TOKEN="{{ onepasswordRead "op://Development/npm/token" }}"Zalety
- Sekrety nigdy nie trafiaja na dysk niezaszyfrowane.
- Udostepnianie zespolowe przez sejfy 1Password.
- Wsparcie automatycznej rotacji.
Siatka bezpieczenstwa pre-commit
git-secrets
bash
# Zainstaluj
brew install git-secrets # macOS
sudo apt install git-secrets # Ubuntu
# Skonfiguruj dla repozytorium
git secrets --install
git secrets --register-aws
# Dodaj wlasne wzorce
git secrets --add 'ghp_[A-Za-z0-9_]{36}'
git secrets --add 'sk-[A-Za-z0-9]{48}'.gitignore
Zawsze wykluczaj wrazliwe sciezki:
text
# Sekrety - nigdy nie zatwierdzaj
*.age
*.enc
*.key
.sops.yaml
chezmoi-data.yaml
key.txt.chezmoiignore
Zapobiegaj zarzadzaniu wrazliwymi plikami przez Chezmoi:
text
.ssh/id_*
.gnupg/
.config/chezmoi/key.txtLista kontrolna audytu
- [ ] Brak sekretow w postaci jawnej w stanie zrodlowym:
chezmoi archive | tar -tf - | grep -v '.age' - [ ] Klucz age nie jest zatwierdzony:
git ls-files | grep key.txtzwraca pusty wynik - [ ] Hook git-secrets jest aktywny:
git secrets --scan - [ ]
.gitignoreobejmuje*.age,*.key,.sops.yaml - [ ]
dot doctorprzechodzi bez ostrzezen - [ ] Pliki zaszyfrowane SOPS deszyfruja sie poprawnie:
sops --decrypt chezmoi-data.yaml
Przetestowane na
| Platforma | age | SOPS | 1Password CLI |
|---|---|---|---|
| macOS Sonoma+ | ✅ | ✅ | ✅ |
| Ubuntu 24.04 | ✅ | ✅ | ✅ |
| WSL2 (Ubuntu) | ✅ | ✅ | ⚠️ |