GitHub Secrets の管理をサポートするツール ghsecrets を開発したよん
GitHub Actions を使用している開発者の皆さん、GitHub Secrets の管理に困ったことはありませんか?
- シークレットの値を確認できないので、更新時に不安
- 誤って更新・削除してしまった時のバックアップがない
自分も誰が設定したのかわからない Secret の確認やらで消耗しており、開発部全体で GitHub Secrets を管理する難しさを経験してきました。退職した人が設定して、何が設定されているのかわからないとか。。。
GitHub Secrets をクラウドサービスで管理できるとバックアップにもなるし、いざという時のリカバリにもなるぞと考え、これらの課題を解決するために、ghsecrets という CLI ツールを開発しました。
ghsecrets とは
ghsecrets は、GitHub Secrets を CLI から作成し、クラウドサービスのシークレット管理サービスでバックアップ・リストアできるツールです。現在は、AWS Secrets Manager のみサポートしています。
主な特徴
- 🚀 CLI から簡単操作: GitHub Secrets の作成・更新をコマンド一つで実行
- 🔐 安全な入力: インタラクティブモードでパスワードを隠して入力
- ☁️ バックアップ: GitHub Secrets 作成時に AWS Secrets Manager にバックアップ
- 🔄 リストア機能: バックアップから GitHub Secrets を復元
インストール
Go install を使う場合
go install github.com/tom-023/ghsecrets@latest
ソースからビルドする場合
git clone https://github.com/tom-023/ghsecrets.git
cd ghsecrets
make install
初期設定
設定ファイル ghsecrets.yaml を作成します。
github:
owner: your-github-owner
repo: your-repo-name
aws:
region: ap-northeast-1
secret_name: github-secrets-backup
使い方
GitHub Secret を作成・更新する(バックアップ不要の場合)。
# キーと値を指定
ghsecrets push -k KEY -v "value"
# インタラクティブモード(値を隠して入力)
ghsecrets push
AWS Secrets Managerへのバックアップ
# AWS Secrets Manager にバックアップしながら GitHub Secret を作成
ghsecrets push -k KEY -v "value" -b aws
# インタラクティブモード(値を隠して入力)
ghsecrets push -b aws
バックアップからの復元
誤って GitHub Secrets を削除してしまった場合や、別のリポジトリに同じシークレットを設定したい場合に便利です。
# AWS Secrets Manager から全てのシークレットを復元
ghsecrets restore -b aws
認証方法
ghsecrets 利用時には、GitHub と AWS の認証が必要です。
GitHub認証
GitHub CLI: gh auth login 済みの場合は自動連携します。
AWS認証
標準的なAWS認証チェーンをサポートしています。
- 環境変数
- AWS認証ファイル(~/.aws/credentials)
- AWS SSO
- IAMロール
# AWS SSOの場合
aws sso login --profile my-profile
ghsecrets push -k KEY -v "value" -b aws --aws-profile my-profile
--aws-profile オプションは、ghsecrets.yaml に profile を設定することで不要になります。
aws:
region: ap-northeast-1
secret_name: github-secrets-backup
profile: my-profile
# AWS SSOの場合
aws sso login --profile my-profile
ghsecrets push -k KEY -v "value" -b aws
まとめ
ghsecrets を使用することで、GitHub Secrets の管理が格段に楽になります。特に以下のような場面で威力を発揮します。
- 複数のシークレットを一括で設定したい
- シークレットのバックアップを取っておきたい
- チーム開発でシークレットを共有したい
- 複数環境で同じシークレットを使いたい
もちろん、セキュリティとして Secrets Manager のアクセス権限は一部の管理者にしか付与しないなどルールを設定する必要がありますが、アプリケーションの運営に役立つ機能なのでぜひ一度お試しください!
今後は GCP でも使えるよう開発を進めていきます。
Discussion