Open8

fork されたリポジトリからのプルリクで Actions のシークレットを参照できるようにしたい

odanodan

sandbox で試してみた

https://github.com/odan-sandbox/access-secret-from-forked-repository-sandbox/pull/2

name: CI

on:
  pull_request:
  pull_request_target:
    types: [labeled]

jobs:
  build:
    runs-on: ubuntu-latest
    if: ${{ github.event_name == 'pull_request' || (github.event_name == 'pull_request_target' && contains(github.event.pull_request.labels.*.name, 'safe to test'))  }}

    steps:
      - uses: actions/checkout@v3
      - run: ./scripts/echo-foo.sh
        env:
          FOO: ${{ secrets.FOO }}

job に対する if で pull_request_target の場合は label を見る感じ

odanodan

当然意図したとおりに secret にアクセスできていた

odanodan

GitHub で pull_request_target labeled "safe to test" で検索すると色々ヒットする

https://github.com/search?q=pull_request_target+labeled+"safe+to+test"&type=Code

https://github.com/ansible-network/ansible.scm/blob/a9a48cde5e6a554b24acf50c9846c5cedffbdda2/.github/workflows/privileged.yml

このリポジトリではイベントは pull_request_target をだけにしている
依存している別の Actions はこれ

https://github.com/ansible-network/github_actions/blob/main/.github/workflows/safe-to-test.yml

'safe to test' がついているプルリクに push があると何でもかんでも実行するっぽい...?
後から攻撃のコードを追加されるとやばそう

odanodan

こうやってステータスが2つに分かれるのなんとかしたい

odanodan
  • fork が false のとき
    • テストを実行
  • fork が true のとき
    • event がラベルの追加である
      • safe to test ラベルが追加されている
        • テストを実行

というのが良さそう?