ISUCON練習で雑デプロイのためにGitHub ActionsでSecretsをファイルに書き出した

TL; DR;

  • GitHub ActionsにおいてSecretsの値は echo しようとしても安全のための機能としてマスクされてしまう
  • echo $YOURSECRET > secret_file とリダイレクトしようとしても、**** **** **** となる
  • runnerにpythonがあれば python -c 'import os; print(os.environ["YOURSECRET"])' > secret_file でいける
  • 良い子のみんなは真似しないでね

背景

ISUCONの練習の一貫として、アプリケーション渡されてローカル開発環境とGitHub Actionsによるデプロイ構築をどこまで短時間で出来るか、行き当たりばったりでやろうとしました。

単発のファイル配置やコマンド実行はMarketplaceにいろいろ使えそうなActionsがあるのですが、できれば融通の効くshellscriptを普通に書きたいと思いました。

sshでコマンドなりシェルスクリプトなり実行して、その中で systemdで管理しているnginx/go/mysqlの再起動とかを行いたい。

やったこと

ダメだった方法

`echo $YOURSECRET > secret_file`

SSH秘密鍵を入れて使おうとしても、invalid formatと怒られるので、ためしに当たり障りのない値でcatで試してみたところ、値が *** とマスクされていたようでした。

うまく行った方法

python -c 'import os; print(os.environ["YOURSECRET"])' > secret_file

GitHubが内部でどうSecretの出力を検知しているのかは分かりませんが、上記のやり方でリダイレクトすることで鍵をとりあえずファイルへ書き出すことはできた。

まとめ

チームでやった予行演習ではちゃんとローカル開発環境 + CI/CD作った方がよさそうだったので、明後日も最初の1-2時間程度は問題把握しつつ開発環境整える作戦でいきます。あと鍵の書き出しは御行儀良くなさそうなのと、踏み台越しにしかサーバも触れなそうなので当日の構成みて実際にはやらないかも。