update-github-actions-permissions v2をリリース: 500種類のGitHub Actionsのpermissionsに対応
GitHub Actionsのworkflowsファイルに自動的にpermissions
を追加する@pkgdeps/update-github-actions-permissions v2をリリースしました。
update-github-actions-permissionsは .github/workflow/*.yml
のWorkflowファイルに対して、利用してるActionから最小限のpermissions
を自動的に設定するツールです。
GitHub Actionsのデフォルトパーミッションはwrite-all
です。 つまり、GitHub Actionsから対象のリポジトリの読み書き、IssueやPRの読み書きなど全部の権限がデフォルトでついています。そのため、uses: actions/checkout@v3
のようにread onlyでよいGitHub Actionsも、実際にはリポジトリやIssueへの書き込みできる権限も持ってしまっています。
この問題に最小権限の原則を使って修正するには、次の2つのステップが必要です。
- Workflow(yamlファイル)ごとに必要な
permissions
を設定する - リポジトリ or Organizationのデフォルトパーミッションを “Read repository contents permission” にする
追記(2023-02-03): GitHub側で“Read repository contents permission”がデフォルトとなるようです
詳しくは次の記事で解説しています。
使い方
update-github-actions-permissionsの使い方は単純です。
次のコマンドで、.github/workflows/*.yml
のWorkflowファイルに対して、利用してるActionから最小限のpermissions
を自動的に設定します。
npx @pkgdeps/update-github-actions-permissions ".github/workflows/*.{yaml,yml}"
未知のワークフローがある場合は、--defaultPermissions
で指定したデフォルト値が設定されます。
@pkgdeps/update-github-actions-permissions v2では500種類のActionのpermissions
をサポート
actions/checkout
のようなActionsには明示的に必要なpermissions
が設定されていないことが多いです。
そのため、update-github-actions-permissionsはActionごとに必要なpermissionsの定義リストを持っています。
update-github-actions-permissions v1では、50種類ほどのGitHub Actionsのpermissions
をサポートしていました。
update-github-actions-permissions v2では、500種類以上のGitHub Actionsのpermissions
をサポートしています。
どうやって増やしたかというと、step-security/secure-workflowsという類似するオープンソースの定義ファイルを利用しています。
Secure Workflowsは、継続的なCI/CDのセキュリティを向上させるためのサービスです。
permissions
の自動設定や、GitHub Actionsのバージョン固定など色々な機能を持っています。
一方で、update-github-actions-permissionsはシンプルにpermissions
を自動で設定するだけのツールです。
そのため、Secure Workflowsのように色々な機能は持っていません。
どちらかというと、“Read repository contents permission”をデフォルトにするために、移行するツールという位置付けです。
また、Secure WorkflowsはAGPLなので、update-github-actions-permissionsもライセンスはAGPLに変更しています。
おわりに
update-github-actions-permissions v2ではSecure Workflowsの定義ファイルを取り込むことで、500種類以上のActionのpermissions
をサポートできるようになりました。
GitHub Actionsを狙ったサプライチェーン攻撃はまだ知らないですが、Codecovのような問題は今後も起こりうると思います。
そういった問題が起きた時に影響範囲が小さくなるようにpermissions
を設定することは重要だと思います。
まずは、RepositoryやOrganizationレベルで”Read repository contents permission”をデフォルトにすることから始めてみてください。
Codecovのような無差別のサプライチェーン攻撃ならpermissions
を設定するだけで、影響範囲が小さくなります。
GitHub Actionsの継続的なチェックは、OSSFのScoorecardなど色々なツールが出てきています。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。