はじめに
GOの勉強で、JWTの生成を実装していました。
JWTの生成で使う秘密鍵と公開鍵は、go:embedを利用して埋め込む方法を取りました。
そして、秘密鍵と公開鍵は、セキュリティの問題があるのでGitHubにはコミットしないようにしました。
この場合、GithubActionsで、LintやTestが失敗するので、どうすればいいか調べました。
結論から言うと、GithubActionsには、シークレットという変数を登録して、GithubActionsを実行中に使える機能があるので、それを使います。
具体的には、秘密鍵と公開鍵の中身を変数として登録し、GithubActionsを実行するときに変数の中身を秘密鍵と公開鍵のファイルとして、出力するという方法となります。
GOのコード
GOのコード側では以下のように秘密鍵と公開鍵を利用しています。
//go:embed cert/secret.pem
var rawPrivKey []byte
//go:embed cert/public.pem
var rawPubKey []byte
シークレット変数を登録
- GitHubリポジトリの「Settings」に移動
- リポジトリページの右上にある「Settings」をクリック
- 「Secrets and variables」→「Actions」を選択
- 「Secrets and variables」の中から「Actions」を選択し、「New repository secret」をクリック
- PRIVATE_KEYなど任意の名前を設定し、秘密鍵の値を入力して保存
- 同様に公開鍵も、PUBLIC_KEYなどの任意の名前を設定し、保存
GithubActionsで利用する
Workflowで、以下のように秘密鍵と公開鍵を作成する
steps:
- uses: actions/setup-go@v3
with:
go-version: ">=1.18"
- uses: actions/checkout@v3
- name: Create dir
run: mkdir -p auth/cert
- name: Create secret key
run: |
echo "${{ secrets.SECRET_KEY }}" > auth/cert/secret.pem
- name: Create public key
run: |
echo "${{ secrets.PUBLIC_KEY }}" > auth/cert/public.pem