Actions permissions に GitHub Actions ワークフローに必要な最小限のパーミッションを教えてもらう

| 4 min read
Author: masahiro-kondo masahiro-kondoの画像

Actions Permissions

#

GitHub Actions のセキュリティのためのツール actions-permissions が public beta として公開されました。

New tool to secure your GitHub Actions | The GitHub Blog

2023年2月以前に作成された GitHub リポジトリにおいて、GitHub Actions ワークフロー実行時に発行されるアクセストークン(GITHUB_TOKEN)はデフォルトでリポジトリの読み取りと書き込みのフルパーミッションが与えられています[1]

Workflow permissions default

セキュリティ向上のためにリポジトリの設定を変更すると既存のワークフローが動かなくなる可能性があります。そこで移行用の支援ツールとして公開されたのが、actions-permissions というわけです。

GitHub - GitHubSecurityLab/actions-permissions: GitHub token permissions Monitor and Advisor actions

このリポジトリでは 2つの GitHub Actions 用 Action が公開されています。

  • GitHub token permissions Monitor action
  • GitHub token permissions Advisor action

Permissions Monitor action をワークフローの step として追加することで、ワークフロー実行に必要な必要最小限のパーミッションをレポートしてくれます。これには利用している Action が要求するパーミッションも含まれます。必要最小限のパーミッションを把握しワークフローに明示的に指定することで、不要なパーミッションが付与されることなく、リポジトリのデフォルト設定もセキュアな状態にすることができます。

Permissions Monitor の利用

#

わざとらしい例ですが、ファイルを作成してリポジトリに commit / push する以下のようなワークフローがあるとします。リポジトリへの push 操作を含むので、当然読み取り以上のパーミッションが必要となります。

name: Commit and push

on: [workflow_dispatch]

jobs:
Build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
echo "Hello! now is $(date)" >> _artifacts/hello.txt
git add _artifacts/hello.txt
git commit -m "Add hello.txt"
git push

以下のように、Permissions Monitor を実行するステップを追加します。

jobs:
Build:
runs-on: ubuntu-latest

steps:
+ - uses: GitHubSecurityLab/actions-permissions/monitor@v1
+ with:
+ config: ${{ vars.PERMISSIONS_CONFIG }}
- uses: actions/checkout@v3
- run: |
git config --global user.name "github-actions[bot]"
Information

config の指定はなくてもデフォルト値が使用され動作するのですが、明示的に指定することが推奨されています。

actions-permissions/monitor at main · GitHubSecurityLab/actions-permissions

実行すると、必要なパーミッション情報を収集して Summary ページに反映してくれます。

Run actions-permissions step

必要最小限のパーミッションが表示され、成果物としてもアップロードされます。このワークフローでは contents: write が必要でした。

Summary

成果物の中身は JSON ファイルです。

{"contents":"write"}

それでは、この情報に基づいてワークフローを修正します。
permissions フィールドに contents: write を追記して permissions/monitor の step を削除すれば完了です。

jobs:
Build:
+ permissions:
+ contents: write

runs-on: ubuntu-latest

steps:
- - uses: GitHubSecurityLab/actions-permissions/monitor@v1
- with:
- config: ${{ vars.PERMISSIONS_CONFIG }}
- uses: actions/checkout@v3
- run: |
git config --global user.name "github-actions[bot]"

同じリポジトリのワークフロー全てに必要な修正を施せば、リポジトリのデフォルト設定を変更しても大丈夫です。

Set default read only

Permissions Advisor の利用

#

以下のワークフローをリポジトリに追加することで、リポジトリ内のワークフローファイルを指定して Advisor を手動で実行することができます。

https://github.com/GitHubSecurityLab/actions-permissions/blob/main/advisor/workflow.yml

過去に成功したワークフローのログを解析しているようで、何回分の実行結果を使用するか回数も指定します。

含まれる Node.js のスクリプトを使用するとローカルでも実行が可能です。

詳しくは README.md を参照してください。

actions-permissions/advisor/README.md at main · GitHubSecurityLab/actions-permissions

筆者が管理しているいくつかのリポジトリで試してみましたが、特にアドバイス内容が得られなかったので実行結果の掲載は割愛します。

最後に

#

GitHub Actions でもセキュリティに気を遣う時代になりました。既存ワークフローの改修はコストがかかりますが、このようなツールを有効に利用して、推奨される設定で運用していきたいですね。


  1. 2023年2月以降に作成されたリポジトリではデフォルトのパーミッションが読み取りのみに設定されています。GitHub Actions - Updating the default GITHUB_TOKEN permissions to read-only | GitHub Changelog ↩︎

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  3. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  4. Backstageで開発者ポータルサイトを構築する - 導入編 (2022-04-29)
  5. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  6. Viteベースの高速テスティングフレームワークVitestを使ってみる (2022-12-28)
  7. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  8. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  9. GitHub Actions - 構成変数(環境変数)が外部設定できるようになったので用途を整理する (2023-01-16)
  10. Jest再入門 - 関数・モジュールモック編 (2022-07-03)