GitHubSecurityLab/actions-permissions 触ってみる
これ
New tool to secure your GitHub Actions | The GitHub Blog
自分の持ってるリポジトリで使ってみる。
ブログ内容読み読み
- actions-permissions はワークフローを監視して実行に必要な最小限の権限を教えてくれるアクション
- パブリックベータ
-
GITHUB_TOKEN
は元々リポジトリへの完全な読み取り書き込み権限を持ってた- フォークからのプルリク除く
- 2021 年に
.permissions
の概念が生まれ、現在、新規リポジトリ・Organizationのデフォルトは読み取り専用となっている - 既存のリポジトリ、org は以前として強い権限がデフォ
- デフォを読み取り専用にしてほしいが、既存のワークフローがぶっ壊れる可能性が高い
- 必要な権限を明らかにするのはむずい
- 移行をスムーズにするために今回のアクションを公開
Monitor アクション
- ローカルプロキシをランナーにインスコし、使われた GitHub API の情報を収集
- サードパーティには送信されない
- サマリーに推奨の最小権限を表示
Advisor アクション
- ワークフローの複数の実行からの推奨事項を要約できる
- (おそらくこれまでのワークフローランのログから推測すると思う)
- ローカルツールとしても利用可能
Advisor アクション触ってみる
- 既存のワークフローに組み込まなくても使える&ローカル実行できるため、ハードルが低い
- なんか上手く動いてる感じがしない
ローカル実行
Download the index.js script and run it as:
node index.js <workflow_name.yml> <number_of_the_last_runs> <github_owner> <repo_name> <branch_name>
An environment variableGITHUB_TOKEN
must be set to your PAT with repo scope granted for the repository you want to analyze.
個別のダウンロードだるいのでクローンする。
PAT 作る。
fine-grained だと必要なスコープがわからない。
一旦 contents の read を与えた
検証には自分のホームページのを使う。
まずは ci.yaml。
❯ cd advisor/
❯ npm i
added 27 packages, and audited 28 packages in 2s
❯ node ./index.js ci.yaml 10 korosuke613 homepage-2nd main
Analyzing ci.yaml for the last 10 successful runs.
Minimal required permissions for ci.yaml:
No permissions logs were found.
No permissions logs were found.
必要な権限はなかった...ってこと!? 2 分かかった。
一番必要そうな pages.yml も確認。(すでに permissions 設定してるけど)
❯ node ./index.js pages.yml 10 korosuke613 homepage-2nd main
Analyzing pages.yml for the last 10 successful runs.
Minimal required permissions for pages.yml:
No permissions logs were found.
??
使い方間違ってんのかな。
怪しいのでワークフローの方も使ってみよう。
ワークフローの方試す
うーん、pages.yml は権限のログが見つからず。
他の yml も試したけど同じ。謎い
おっと、勘違いしていた。
Advisor アクションは Monitor アクションを複数回実行した結果を集約して総合的に分析するためのツールか。(アクション内で if 分を使ってたりするため)
どちらにせよ Monitor アクションが使えないと厳しいな。
Monitor アクションを触ってみる
- 各ジョブの先頭に記述しないといけない
- ジョブを動かさないといけない
- 通信を監視させるのは少し抵抗があるかもしれない
- reusable workflows との相性が悪い
- アクションのセットアップが長い!(1分近くかかる)
- playwright のインストールに失敗する
とりあえず全てのジョブに追加。
reusable workflow の呼び出し元には追加できなくてむずい。
action のセットアップに時間がかかった(1分くらい)
npm ci
に 2 分くらいかかり、終わったと思ったら落ちた。
playwright のインストールがうまくいかなかったようだ。
うーん....
playwright を使わない別ディレクトリではうまくいった。
proxy してるせいか、ネットワーク通信全般が遅い
Deno 使うジョブでも落ちた。Sending fatal alert UnknownCA
ってエラー。
プロキシしてる故の弊害出てるなー厳し〜
Run deno run --allow-read --allow-run=git,grep ./tools/checkDuplicateEmoji.ts
Download https://registry.npmjs.org/gray-matter
Sending fatal alert UnknownCA
error: Error getting response at https://registry.npmjs.org/gray-matter for package "gray-matter": error sending request for url (https://registry.npmjs.org/gray-matter): error trying to connect: invalid peer certificate: UnknownIssuer: error trying to connect: invalid peer certificate: UnknownIssuer: invalid peer certificate: UnknownIssuer
at file:///home/runner/work/zenn-articles/zenn-articles/tools/checkDuplicateEmoji.ts:3:26
Error: Process completed with exit code 1.
monitor を使うと本来 2 分くらいで終わる Dry-run Renovate が 20 分弱かかる...
unknows: unknown
でワロタ
ちょっとまだまだ荒い感じあるので探求は一旦中断。
正式リリースされたらまた触ることにします。
通信遅すぎてタイムアウトする件、Issue 作って 3 週間近く経つけど何一つレスポンスない。
やる気ないのかも