以下の内容はhttps://nikkie-ftnext.hatenablog.com/entry/recognize-github-actions-yaml-permissions-granularityより取得しました。


GitHub ActionsでGITHUB_TOKENの権限が足りないエラーが送出されたとき、私は長いこと設定から権限をread/writeに変えて対応してきました。このたびpermissionsを知りました

はじめに

PyCon mini 東海 2024、1日ありがとうございました! nikkieです。

カンファレンスのまとめは別にして、発表準備の中で理解が深まったGitHub Actionsについてです。
GITHUB_TOKENのpermissionsを設定できることをようやく認識しました。

目次

GitHub Actionsでリポジトリにコミットを作ろうとするとエラー

静的ファイルをGitHub Pagesとして公開するためのGitHub Action、ftnext/action-push-ghpagesを公開しています1

これを使っている中で、自分自身の伸びしろを認識していました。
sphinx-revealjs製のスライドをGitHub Pagesで公開するためのリポジトリの初期設定 - nikkie-ftnextの日記

現在はこの記事の方法ではpermissionまわりでpushできないエラーが出るので、設定から権限を与えています。
伸びしろはGitHub Actionsの定義ファイルで解決することです。

remote: Permission to ftnext/first-python-test-2024.git denied to github-actions[bot].
fatal: unable to access 'https://github.com/ftnext/first-python-test-2024/': The requested URL returned error: 403

この伸びしろにこのたび取り組みました。

これまでの解決法:GITHUB_TOKENのデフォルトの権限をread/writeにする

github.comでリポジトリの設定から権限を与えています。

リポジトリの Settings から Actions の General(左側のメニューを操作)

「Workflow permissions」で「Read and write permissions」を選びます

Choose the default permissions granted to the GITHUB_TOKEN when running workflows in this repository.

こちらがソースです。
GitHub Actionsで自分のリポジトリ操作時に権限不足に起因するエラーが発生する

なお「Workflow permissions」にも「YAMLを使ってワークフローのよりきめ細かい権限を指定できる (You can specify more granular permissions in the workflow using YAML.)」と記載があります。
これが次の方法です。

今回知った方法:GitHub Actionsの定義のYAMLファイルでpermissionsを指定する

こちらのほうがよりセキュアと認識しています。
これまでの解決法はそのリポジトリすべてのActionのデフォルトの権限をread/writeに変更するものですが、こちらの方法では該当のActionだけにread/write権限を付与できるからです。

# 完全版は https://github.com/ftnext/first-python-test-2024/blob/34b635c2d805fce67d1059459e9c430db231f57c/.github/workflows/publish-pages.yaml
jobs:
  publish:
    permissions:
      contents: write

    steps:
      # 省略
      - name: Publish on GitHub Pages
        uses: ftnext/action-push-ghpages@v1.0.0
        with:
          build_dir: docs/build/html
          github_token: ${{ secrets.GITHUB_TOKEN }}

https://docs.github.com/ja/actions/security-for-github-actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token

ワークフロー ファイル内の permissions キーを使用して、ワークフロー全体または個々のジョブの GITHUB_TOKEN のアクセス許可を変更することができます。

https://docs.github.com/ja/actions/writing-workflows/workflow-syntax-for-github-actions#permissions

permissions を使用して GITHUB_TOKEN に付与された既定のアクセス許可を変更し、必要に応じてアクセスを追加または削除することで、必要最小限のアクセスのみを許可することができます。

後者のドキュメントには「使用可能なアクセス許可と、それぞれがアクションに実行を許可する内容の詳細」という表があります

contentsとは

リポジトリの内容を操作します。
contents: write はアクションによるリリースの作成を許可します。

リポジトリに対してコミットをpushするのもcontents: writeでした。

GitHub ActionsのYAMLで設定したので、リポジトリのSettingsの「Workflow permissions」はreadのみです(「Read repository contents and packages permissions」。こちらがデフォルト値です)

終わりに

GitHub ActionsのYAMLファイルに書けるpermissionsを知りました。
Action単位でGITHUB_TOKENに必要な権限を追加できるわけですね。

これまではなかなか掘り下げる余裕がなかったのですが、今回理解できたのはとてもよかったです。
例を言う おれはまだまだ強くなれる




以上の内容はhttps://nikkie-ftnext.hatenablog.com/entry/recognize-github-actions-yaml-permissions-granularityより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14