🔧

GitHub Secrets の管理をサポートするツール ghsecrets を開発したよん

に公開

GitHub Actions を使用している開発者の皆さん、GitHub Secrets の管理に困ったことはありませんか?

  • シークレットの値を確認できないので、更新時に不安
  • 誤って更新・削除してしまった時のバックアップがない

自分も誰が設定したのかわからない Secret の確認やらで消耗しており、開発部全体で GitHub Secrets を管理する難しさを経験してきました。退職した人が設定して、何が設定されているのかわからないとか。。。

GitHub Secrets をクラウドサービスで管理できるとバックアップにもなるし、いざという時のリカバリにもなるぞと考え、これらの課題を解決するために、ghsecrets という CLI ツールを開発しました。

ghsecrets とは

ghsecrets は、GitHub Secrets を CLI から作成し、クラウドサービスのシークレット管理サービスでバックアップ・リストアできるツールです。現在は、AWS Secrets Manager のみサポートしています。

https://github.com/tom-023/ghsecrets

主な特徴

  • 🚀 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認証チェーンをサポートしています。

  1. 環境変数
  2. AWS認証ファイル(~/.aws/credentials)
  3. AWS SSO
  4. 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