🔓

安全にGitHub Actions Secretを扱う

に公開

安全にGitHub Actions Secretを扱う

シークレットとは

GitHubでのシークレットとは、GitHub のリポジトリに保存される機密情報のこと。
APIキーやパスワードなどの情報を保存することができ、GitHub Actions などで利用することができる。

https://docs.github.com/ja/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository

シークレットきけん

シークレットは暗号化され保存されるため、一度設定を行うとリポジトリから見ることができない。
また、GitHub Actionsの実行ログにはマスキングされた形で表示される。

アクション実行時にsecretが表示されるとマスキングされる

そのため、基本的にシークレットが表示されることはないが、以下のような手法でシークレットを出力することができてしまう。
https://zenn.dev/arkwknsk/articles/deaee3f0d7958b

また、上記のように特殊な手法を使わなくても、構造化データを登録し標準出力に出力すると、シークレットがほぼそのまま表示されてしまう。
https://kangetsu121.work/2023/do-not-register-structured-secret/

シークレット

  • シークレットを使わない方法を検討する
    危ない情報はシークレットでも使わない。
    究極の対策。

  • 構造化データを利用する際には、base64エンコードを行う
    先ほどのURL参照。
    https://zenn.dev/arkwknsk/articles/deaee3f0d7958b

  • シークレットを出力しないようにする
    echoやprintなどでシークレットを出力しないようにする。
    ただし、GitHub Actions自体を改ざんされてしまうと、シークレットを出力されてしまう可能性があるため、ブランチ保護ルールの設定などが必要。

  • シークレットを登録するリポジトリを分離する
    コードコミットを行うリポジトリとGitHub Actionsで利用するリポジトリを分離し、GitHub Actionsを実行するブランチにのみシークレットを登録することで安全性を高めることができる。
    もちろん、GitHub Actionsで利用するリポジトリはプライベートリポジトリにしてアクセス制限をかける必要がある。
    https://zenn.dev/kitoketa/articles/1a3ef4426dfe31
    ↑の記事を見れば大体できる

Discussion