LoginSignup
33
31

More than 3 years have passed since last update.

GitHubのSecretsを活用して、GitHub Actionsで安全に機密情報を扱う

Posted at

はじめに

GitHub repositoryにyamlファイルを書くことで、Commit時やPR反映時等色々な場面で利用できるGitHub Actions。
そんなGitHub Actionsに処理を書いていると、外部サービスと連携するためにアクセストークンのような機密情報を保持したくなります。
この記事では、その機密情報の扱うためのSecretsの使い方について記載します。

GitHub repositoryのSecrets

使い方は簡単で、GitHub内のsecretを設定したいリポジトリのページを開き、下記Settingsから設定を行います。

例えばSecretSettingという設定を追加した場合は、以下のように secrets.SecretSetting を変数に代入することで、run内に書いたスクリプトでsecretが扱えるようになります。

    - name: Access to secret
      env:
        SECRET_SETTING: ${{ secrets.SecretSetting }}
      run: |
     ##access to $SECRET_SETTING if this script is bash

詳細は公式ページを参照ください。

注意
上記Settingsを扱えるのは、リポジトリのオーナーのみです。

GitHub APIを利用してより汎用的に

上記の方法でも事足りるのですが、Secretsの設定はリポジトリごとにしかできず、さらにその権限はリポジトリのオーナーごととなっています。
大量にリポジトリがある場合は骨の折れるので、APIを利用して設定を行います。

APIを利用する方法の一つとして、tokenを発行する方法があります。Private repositoryを使う場合はrepo Full control of private repositoriesが必要です。

tokenが取得できたらあとはAPIを叩くだけ。
APIの仕様はこちら。Updateする際はpublic keyを取得した上でLibSodiumを利用してkeyを暗号化するのが特徴です。

ざっくりシーケンスはこんな感じ

sequence

また、GitHub APIを利用するためのgolangライブラリが公開されていますので、プログラムで利用することも楽ちん。
上記を紹介した記事Github Actions Secrets API を使って Go で Secrets を更新するを参考に、golangでのサンプルコマンドを作成しています。

github-secret

参考

公式ページ
GitHub ヘルプ: 暗号化されたシークレットの作成と保存
GitHub Developer: REST API v3 Secrets
Libsodium documentation

その他参考
Github Actions Secrets API を使って Go で Secrets を更新する
GitHub APIの仕組みを知り、APIでrepositoryを作成しよう

33
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
31