Closed21

GitHubSecurityLab/actions-permissions 触ってみる

Futa HirakobaFuta Hirakoba

ブログ内容読み読み

  • actions-permissions はワークフローを監視して実行に必要な最小限の権限を教えてくれるアクション
  • パブリックベータ
  • GITHUB_TOKENは元々リポジトリへの完全な読み取り書き込み権限を持ってた
    • フォークからのプルリク除く
  • 2021 年に .permissions の概念が生まれ、現在、新規リポジトリ・Organizationのデフォルトは読み取り専用となっている
  • 既存のリポジトリ、org は以前として強い権限がデフォ
  • デフォを読み取り専用にしてほしいが、既存のワークフローがぶっ壊れる可能性が高い
  • 必要な権限を明らかにするのはむずい
  • 移行をスムーズにするために今回のアクションを公開
Futa HirakobaFuta Hirakoba

Monitor アクション

  • ローカルプロキシをランナーにインスコし、使われた GitHub API の情報を収集
    • サードパーティには送信されない
  • サマリーに推奨の最小権限を表示

Advisor アクション

  • ワークフローの複数の実行からの推奨事項を要約できる
    • (おそらくこれまでのワークフローランのログから推測すると思う)
  • ローカルツールとしても利用可能
Futa HirakobaFuta Hirakoba

Advisor アクション触ってみる

  • 既存のワークフローに組み込まなくても使える&ローカル実行できるため、ハードルが低い
  • なんか上手く動いてる感じがしない
Futa HirakobaFuta Hirakoba

ローカル実行

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 variable GITHUB_TOKEN must be set to your PAT with repo scope granted for the repository you want to analyze.

個別のダウンロードだるいのでクローンする。

Futa HirakobaFuta Hirakoba

PAT 作る。
fine-grained だと必要なスコープがわからない。


一旦 contents の read を与えた

Futa HirakobaFuta Hirakoba

検証には自分のホームページのを使う。
https://github.com/korosuke613/homepage-2nd/tree/f7d45496d5fd885a2d7bb33eeb3a26c6a153454f/.github/workflows

まずは 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 分かかった。

Futa HirakobaFuta Hirakoba

一番必要そうな 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.

??
使い方間違ってんのかな。
怪しいのでワークフローの方も使ってみよう。

Futa HirakobaFuta Hirakoba

おっと、勘違いしていた。
Advisor アクションは Monitor アクションを複数回実行した結果を集約して総合的に分析するためのツールか。(アクション内で if 分を使ってたりするため)

どちらにせよ Monitor アクションが使えないと厳しいな。
https://zenn.dev/link/comments/eaf5b0b55f87bf

Futa HirakobaFuta Hirakoba

Monitor アクションを触ってみる

  • 各ジョブの先頭に記述しないといけない
  • ジョブを動かさないといけない
  • 通信を監視させるのは少し抵抗があるかもしれない
  • reusable workflows との相性が悪い
  • アクションのセットアップが長い!(1分近くかかる)
  • playwright のインストールに失敗する
Futa HirakobaFuta Hirakoba

action のセットアップに時間がかかった(1分くらい)
npm ci に 2 分くらいかかり、終わったと思ったら落ちた。

playwright のインストールがうまくいかなかったようだ。
うーん....

playwright を使わない別ディレクトリではうまくいった。

Futa HirakobaFuta Hirakoba

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.

https://github.com/korosuke613/zenn-articles/actions/runs/5529513014/jobs/10087682537#step:6:9

Futa HirakobaFuta Hirakoba

ちょっとまだまだ荒い感じあるので探求は一旦中断。
正式リリースされたらまた触ることにします。

このスクラップは2023/07/31にクローズされました