GitHub이 12월 2일부터 공개 저장소의 pull_request_target을 기본 차단한다. 포크 PR에 AI 리뷰를 붙이던 우회로는 닫히지만 @claude 댓글 트리거는 대상이 아니다. 11월 9일 브라운아웃 전에 AI 워크플로를 트리거별로 나눠 확인한다.
공개 저장소에 AI 리뷰 봇을 붙이면 포크에서 온 PR에서 봇이 멈춘다. oddguan 4월 15일 공개문이 설명하듯 GitHub Actions는 포크 PR 실행에 저장소 시크릿을 넘기지 않아서, 봇이 ANTHROPIC_API_KEY를 읽지 못한다.
가장 짧은 해법은 트리거를 시크릿을 읽는 pull_request_target으로 바꾸는 것이고, 같은 공개문은 그렇게 열어 둔 저장소가 실제로 있다고 적었다. GitHub 11월 2일 공지는 이 우회로를 12월 2일부터 닫는다. 그런데 @claude 멘션으로 부르는 워크플로는 다른 이벤트를 듣는다.
12월 2일 기본 규칙은 pull_request_target 한 이벤트만 막는다
대상은 GitHub Free·Team·Enterprise Cloud의 공개 저장소다. 지금은 평가 모드로 돌며 막힐 실행을 Insights에 보여 준다. 11월 9일과 16일 16:0018:00 UTC(한국 시각 다음 날 01:0003:00)에는 차단 대상 실행이 오류 주석만 남기고 실제로 멈춘다. 살릴 워크플로는 이벤트 정책에서 pull_request_target을 명시적으로 허용하되, 워크플로 파일 지정으로 예외를 파일 하나까지 좁힐 수 있다.
GitHub 6월 18일 checkout 공지와 겹쳐 보면 막힌 범위가 드러난다.
| 트리거 | 12월 2일 기본 규칙 | actions/checkout v7 | 남는 관문 |
|---|---|---|---|
pull_request (포크 PR) | 대상 아님 | 대상 아님 | 시크릿이 넘어가지 않음 |
pull_request_target | 차단, 이벤트 정책으로 예외 | 포크 PR 코드 체크아웃 거부 | 파일 단위 예외 |
issue_comment·issues | 대상 아님 | 대상 아님 | 액션의 권한 검사, permissions: |
checkout 공지는 issue_comment로 들어오는 pwn request와 run 단계에서 gh로 PR 코드를 받아 실행하는 경우를 막지 않는다고 적었다.
@claude 댓글 워크플로의 관문은 GitHub 기본값이 아니라 액션 입력값이다
claude-code-action 사용 문서의 기본 예시는 issue_comment·pull_request_review_comment·issues·pull_request_review 네 이벤트에서 @claude를 찾는다. 외부인도 댓글을 다는데 12월 2일 규칙은 이 경로에 손대지 않는다.
이 경로는 액션이 지킨다. claude-code-action 보안 문서에 따르면 액션은 쓰기 권한이 있는 사용자만 실행한다. 이 검사를 푸는 입력값이 둘이다. allowed_non_write_users는 쓰기 권한 검사를 건너뛰고, 문서는 issues: write만 가진 라벨링 워크플로에만 쓰라고 했다. allowed_bots에 맞는 봇은 권한 확인을 받지 않아서, '*'이면 아무나 만든 GitHub App이 댓글로 프롬프트를 넣어 액션을 부를 수 있다.
12월 2일 이후 공개 저장소에서 에이전트를 부를 수 있는 사람은 GitHub 기본값이 아니라 워크플로 YAML의 입력값 몇 줄이 정한다.
권한 검사가 버텨도 에이전트가 읽는 PR 제목은 외부인이 쓴다. oddguan 공개문에서 Claude Code Security Review는 PR 제목에 숨긴 지시를 따라 ps auxeww로 ANTHROPIC_API_KEY와 GITHUB_TOKEN을 꺼내 PR 댓글에 올렸고, Gemini CLI Action은 GEMINI_API_KEY를 이슈 댓글로 공개했다. Anthropic은 ps 호출을 막았고, 저자는 cat /proc/*/environ으로 같은 결과가 난다고 지적했다. Claude Code Security Review README는 신뢰할 PR에만 쓰고 "Require approval for all external contributors"를 켜라고 권한다.
가져갈 것
- 11월 9일 16:00 UTC(한국 10일 01:00) 전에 Actions 정책 Insights의 차단 예정 실행에 AI 리뷰·에이전트 워크플로가 있는가?
- 그 워크플로를 살린다면
pull_request_target예외를 해당 워크플로 파일 하나로 좁혔는가? -
on:에issue_comment나issues가 있는 claude-code-action 워크플로에서allowed_bots: '*'와allowed_non_write_users: '*'가 0건인가? - Claude Code Security Review를 쓰는 공개 저장소에 "Require approval for all external contributors"가 켜져 있는가?
- 코드 검색에 걸린
allow-unsafe-pr-checkout줄마다 승인한 사람이 있는가?
안 되는 경우
- 비공개·internal 저장소와 GitHub Enterprise Server는 12월 2일 기본 규칙 대상이 아니다. 사내 저장소의
pull_request_target위험은 그대로 남는다. - GitHub 실행 보호 문서는 이벤트 규칙 예시로
push·pull_request·pull_request_target·workflow_dispatch만 들었다.issue_comment를 이벤트 규칙으로 막을 수 있는지, 행위자 규칙이 댓글 작성자를 기준으로 평가하는지는 적지 않았다. - 같은 문서에 따르면 사용자 정의 규칙의 Evaluate 모드는 GitHub Enterprise Cloud에서만 쓸 수 있다.
이번 주에는 공개 저장소의 AI 워크플로를 on: 트리거로 두 묶음으로 나눈다. pull_request_target 묶음은 파일 단위 예외로 좁히고, 댓글 묶음은 allowed_bots와 allowed_non_write_users를 이름 목록으로 바꾼다. 에이전트를 CI에 붙일 때 먼저 답할 질문은 하나다: 누가 이 에이전트를 부를 수 있는가.