본문 바로가기
C.W.K.
Stream
Lesson 07 of 12 · published

GITHUB_TOKEN

~12 min · github-token, permissions, scope

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

자동 발급 러너 식별자

모든 워크플로 실행은 자동으로 발급되는 GITHUB_TOKEN을 받아. 이건 현재 저장소에 범위가 지정된 러너의 설치 토큰이야. PAT를 발급받지 않고도 GitHub API를 호출할 때 쓰지.

${{ secrets.GITHUB_TOKEN }}이나 ${{ github.token }}으로 사용해. 실행 동안에만 유효하고 끝나면 만료돼.

기본 권한은 너무 관대해

2023년까지 GITHUB_TOKEN은 대부분의 항목에 쓰기 권한을 기본값으로 줬어(contents, issues, pull-requests). 지금은 조직 기본값이 'permissive'(레거시)나 'restricted'(모두 읽기) 둘 중 하나야. 항상 확인하고 restricted를 선호해.

워크플로마다 permissions:로 범위를 지정해:

  • contents: read — 체크아웃, 푸시 없음.
  • contents: write — 커밋, 태그, 릴리스 푸시.
  • pull-requests: write — PR 코멘트, PR 생성.
  • issues: write — 이슈 코멘트.
  • id-token: write — OIDC 토큰 요청(다음 레슨).
  • packages: write — GHCR에 푸시.
  • security-events: write — 코드 스캐닝용 SARIF 업로드.

Code

최소 권한 워크플로·yaml
name: ci
on: { pull_request: {}, push: { branches: [main] } }

# Workflow-wide default: read-only.
permissions:
  contents: read

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pytest -q

  comment-on-pr:
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write   # only this job needs write
    steps:
      - uses: actions/github-script@v7
        with:
          script: |
            github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: 'CI ran successfully ✓',
            });

External links

Exercise

저장소의 각 워크플로를 점검해. contents: read 기본값을 명시하는 최상위 permissions: 블록을 추가해. 더 필요한 몇 개는 작업별로 재정의해. 푸시하고 새로운 실패를 관찰해(그게 진짜 발견이야).

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.