
managing-secrets
by khaneliman
managing-secretsは、ソフトウェア開発を効率化するスキルです。開発ワークフロー全体をサポートし、チームの生産性向上とコード品質の改善を実現します。
SKILL.md
name: managing-secrets description: Manages encrypted secrets using sops-nix and age. Use when adding new secrets, rotating keys, debugging secret access, or setting up secret management for new hosts/users.
Managing Secrets
Overview
This project uses sops-nix with age keys for secret management. Secrets
are stored in secrets/ and decrypted at runtime.
Directory Structure
secrets/
├── <hostname>/ # Host-specific secrets
│ └── default.yaml # Host secrets file
├── <username>/ # User-specific secrets
│ └── default.yaml # User secrets file
└── shared/ # Shared/Global secrets
Configuration (.sops.yaml)
Access rules are defined in .sops.yaml at the project root. Keys are defined
groups (e.g., hosts, users) and creation rules map files to key groups.
Adding a New Secret Workflow
Copy this checklist and track your progress:
Secret Addition Progress:
- [ ] Step 1: Identify which file needs the secret (host/user/shared)
- [ ] Step 2: Edit the appropriate secrets file with sops
- [ ] Step 3: Add key-value pair to YAML
- [ ] Step 4: Reference in Nix module with sops.secrets
- [ ] Step 5: Verify secret path in target service
- [ ] Step 6: Test secret access after rebuild
Step 1: Identify Secret Location
Decide based on scope:
- Host-specific (hostname, SSH keys) →
secrets/<hostname>/default.yaml - User-specific (tokens, passwords) →
secrets/<username>/default.yaml - Shared (API keys used everywhere) →
secrets/shared/
Step 2-3: Edit and Add Secret
sops secrets/<path>/default.yaml
Add your secret:
my_secret_key: "super_secret_value"
Step 4: Reference in Nix
sops.secrets."my_secret_key" = {
sopsFile = lib.getFile "secrets/<path>/default.yaml";
# Optional: specify owner, mode, etc.
};
Step 5: Verify Path
System secrets: /run/secrets/my_secret_key Home-manager secrets:
$XDG_RUNTIME_DIR/secrets/my_secret_key
Step 6: Test
After rebuild, verify the secret is accessible:
# System
sudo cat /run/secrets/my_secret_key
# Home
cat $XDG_RUNTIME_DIR/secrets/my_secret_key
Additional Workflows
Editing Secrets
To edit or view an encrypted file:
sops secrets/<path>/default.yaml
Editor will open with decrypted content. Saves re-encrypt automatically.
Rekeying (Rotating Keys)
If .sops.yaml rules change (e.g., adding a new host key):
# Update all secrets based on .sops.yaml rules
sops updatekeys secrets/**/*.yaml
Common Issues
| Symptom | Likely Cause | Solution |
|---|---|---|
| "File not found" | Incorrect sopsFile path | Use lib.getFile or verify relative path |
| "Permission denied" | Key not in .sops.yaml | Add host/user key to appropriate group |
| "Failed to decrypt" | Wrong age key | Check sops.age.keyFile path is correct |
| "Secret not appearing" | Service started before secret | Add systemd.services.<name>.after = [ "sops-nix.service" ] |
Debugging Tips
"File not found":
- Ensure
sopsFilepath useslib.getFileor relative path correctly.
"Permission denied":
- Check that the host/user SSH key is in
.sops.yaml. - Verify the runtime key path matches
sops.age.keyFileorsops.age.sshKeyPaths.
Service can't read secret:
- Verify the service runs after sops-nix:
systemd.services.<name>.after = [ "sops-nix.service" ] - Check file permissions on the secret path
See Also
- Configuration layers: See configuring-layers for understanding where to place secret references
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です
