Skip to main content

Controlling permissions for GITHUB_TOKEN

Modify the default permissions granted to GITHUB_TOKEN.

Overview

permissions๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GITHUB_TOKEN์— ๋ถ€์—ฌ๋œ ๊ธฐ๋ณธ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ์ˆ˜์ •ํ•˜๋ฉด ํ•„์š”์— ๋”ฐ๋ผ ์•ก์„ธ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜์—ฌ ํ•„์š”ํ•œ ์ตœ์†Œ ์•ก์„ธ์Šค๋งŒ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "์ž๋™ ํ† ํฐ ์ธ์ฆ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

permissions๋ฅผ ์ตœ์ƒ์œ„ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์›Œํฌํ”Œ๋กœ์˜ ๋ชจ๋“  ์ž‘์—…์— ์ ์šฉํ•˜๊ฑฐ๋‚˜, ํŠน์ • ์ž‘์—… ๋‚ด์—์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์ž‘์—… ๋‚ด์— permissions ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด GITHUB_TOKEN์„ ์‚ฌ์šฉํ•˜๋Š” ํ•ด๋‹น ์ž‘์—… ๋‚ด์˜ ๋ชจ๋“  ๋™์ž‘ ๋ฐ ์‹คํ–‰ ๋ช…๋ น์ด ์ง€์ •ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ jobs.<job_id>.permissions๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์•„๋ž˜ ํ‘œ์— ํ‘œ์‹œ๋œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ ๊ถŒํ•œ์— ๋Œ€ํ•ด read(ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ), write ๋˜๋Š” none ์•ก์„ธ์Šค ์ˆ˜์ค€ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. write์—๋Š” read๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ง€์ •๋˜์ง€ ์•Š์€ ๋ชจ๋“  ๊ถŒํ•œ์€ none์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ถŒํ•œ ๋ฐ ๊ฐ ์ž‘์—…์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด:

PermissionGITHUB_TOKEN์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
actionsGitHub Actions์œผ๋กœ ์‹คํ–‰ ์˜ˆ๋ฅผ ๋“ค์–ด, actions: write์ด(๊ฐ€) ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์„ ์ทจ์†Œํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub ์•ฑ์— ํ•„์š”ํ•œ ๊ถŒํ•œ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
attestations์•„ํ‹ฐํŒฉํŠธ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด attestations: write๋Š” ์ž‘์—…์—์„œ ๋นŒ๋“œ์— ๋Œ€ํ•œ ์•„ํ‹ฐํŒฉํŠธ ์ฆ๋ช…์„ ์ƒ์„ฑํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "์•„ํ‹ฐํŒฉํŠธ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ์˜ ์ถœ์ฒ˜ ์„ค์ •"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
checks๊ฒ€์‚ฌ ์‹คํ–‰ ๋ฐ ๊ฒ€์‚ฌ ๋„๊ตฌ ๋ชจ์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, checks: write์ด(๊ฐ€) ๊ฒ€์‚ฌ ์‹คํ–‰์„ ๋งŒ๋“ค๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub ์•ฑ์— ํ•„์š”ํ•œ ๊ถŒํ•œ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
contents๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋‚ด์šฉ์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด contents: read์ด(๊ฐ€) ์ปค๋ฐ‹์„ ๋‚˜์—ดํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๊ณ  contents: write์ด(๊ฐ€) ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub ์•ฑ์— ํ•„์š”ํ•œ ๊ถŒํ•œ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
deployments๋ฐฐํฌ ์ž‘์—… ์˜ˆ๋ฅผ ๋“ค์–ด, deployments: write์ด(๊ฐ€) ์ƒˆ ๋ฐฐํฌ๋ฅผ ๋งŒ๋“ค๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub ์•ฑ์— ํ•„์š”ํ•œ ๊ถŒํ•œ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
packagesGitHub ํŒจํ‚ค์ง€๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, packages: write์ด(๊ฐ€) GitHub ํŒจํ‚ค์ง€์— ํŒจํ‚ค์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  ๊ฒŒ์‹œํ•˜๋Š” ์ž‘์—…์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ ์ •๋ณด"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
pagesGitHub Pages๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด pages: write์ด(๊ฐ€) GitHub Pages ๋นŒ๋“œ๋ฅผ ์š”์ฒญํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub ์•ฑ์— ํ•„์š”ํ•œ ๊ถŒํ•œ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
pull-requests๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด pull-requests: write์ด(๊ฐ€) ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์— ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub ์•ฑ์— ํ•„์š”ํ•œ ๊ถŒํ•œ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
repository-projectsGitHub ํ”„๋กœ์ ํŠธ(ํด๋ž˜์‹)๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด repository-projects: write์ด(๊ฐ€) ํ”„๋กœ์ ํŠธ(ํด๋ž˜์‹)์— ์—ด์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub ์•ฑ์— ํ•„์š”ํ•œ ๊ถŒํ•œ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
security-eventsGitHub ์ฝ”๋“œ ๊ฒ€์‚ฌ ๋ฐ Dependabot ๊ฒฝ๊ณ ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด security-events: read์ด(๊ฐ€) ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ Dependabot ๊ฒฝ๊ณ ๋ฅผ ๋‚˜์—ดํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๊ณ  security-events: write์ด(๊ฐ€) ์ฝ”๋“œ ๊ฒ€์ƒ‰ ๊ฒฝ๊ณ ์˜ ์ƒํƒœ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub ์•ฑ์— ํ•„์š”ํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ"์—์„œ "'์ฝ”๋“œ ๊ฒ€์ƒ‰ ๊ฒฝ๊ณ '์— ๋Œ€ํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ถŒํ•œ" ๋ฐ "'Dependabot ๊ฒฝ๊ณ '์— ๋Œ€ํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ถŒํ•œ"์„ ์ฐธ์กฐํ•˜์„ธ์š”.
statuses์ปค๋ฐ‹ ์ƒํƒœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด statuses:read์ด(๊ฐ€) ์ง€์ •๋œ ์ฐธ์กฐ์— ๋Œ€ํ•œ ์ปค๋ฐ‹ ์ƒํƒœ ๋‚˜์—ดํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "GitHub ์•ฑ์— ํ•„์š”ํ•œ ๊ถŒํ•œ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

Defining access for the GITHUB_TOKEN permissions

permissions ํ‚ค ๋‚ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ถŒํ•œ์˜ ๊ฐ’์œผ๋กœ read, write, none์„ ์ง€์ •ํ•˜์—ฌ GITHUB_TOKEN์ด ํ—ˆ์šฉํ•  ์•ก์„ธ์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

permissions:
  actions: read|write|none
  attestations: read|write|none
  checks: read|write|none
  contents: read|write|none
  deployments: read|write|none
  id-token: write|none
  issues: read|write|none
  discussions: read|write|none
  packages: read|write|none
  pages: read|write|none
  pull-requests: read|write|none
  repository-projects: read|write|none
  security-events: read|write|none
  statuses: read|write|none

์ด๋Ÿฌํ•œ ๊ถŒํ•œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ง€์ •๋˜์ง€ ์•Š์€ ๋ชจ๋“  ๊ถŒํ•œ์€ none์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ถŒํ•œ์— ๋Œ€ํ•œ read-all ๋˜๋Š” write-all ์•ก์„ธ์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

permissions: read-all
permissions: write-all

๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ถŒํ•œ์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

permissions: {}

Changing the permissions in a forked repository

๋˜ํ•œ permissions ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌํฌ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๊ถŒํ•œ์„ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์“ฐ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์€ ๋ถ€์—ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋™์ž‘์˜ ์˜ˆ์™ธ๋Š” ๊ด€๋ฆฌ ์‚ฌ์šฉ์ž๊ฐ€ GitHub Actions ์„ค์ •์˜ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์—์„œ ์›Œํฌํ”Œ๋กœ์— ์“ฐ๊ธฐ ํ† ํฐ ๋ณด๋‚ด๊ธฐ ์˜ต์…˜์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ GitHub Actions ์„ค์ • ๊ด€๋ฆฌ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

Setting the GITHUB_TOKEN permissions for all jobs in a workflow

You can specify permissions at the top level of a workflow, so that the setting applies to all jobs in the workflow.

Example: Setting the GITHUB_TOKEN permissions for an entire workflow

์ด ์˜ˆ์ œ์—์„œ๋Š” ์›Œํฌํ”Œ๋กœ์˜ ๋ชจ๋“  ์ž‘์—…์— ์ ์šฉ๋˜๋Š” GITHUB_TOKEN์— ๋Œ€ํ•ด ์„ค์ •๋˜๋Š” ์‚ฌ์šฉ ๊ถŒํ•œ์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ถŒํ•œ์—๋Š” ์ฝ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

name: "My workflow"

on: [ push ]

permissions: read-all

jobs:
  ...

Setting the GITHUB_TOKEN permissions for a specific job

ํŠน์ • ์ž‘์—…์˜ ๊ฒฝ์šฐ jobs.<job_id>.permissions๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GITHUB_TOKEN์— ๋ถ€์—ฌ๋œ ๊ธฐ๋ณธ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ์ˆ˜์ •ํ•˜๋ฉด ํ•„์š”์— ๋”ฐ๋ผ ์•ก์„ธ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜์—ฌ ํ•„์š”ํ•œ ์ตœ์†Œ ์•ก์„ธ์Šค๋งŒ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "์ž๋™ ํ† ํฐ ์ธ์ฆ"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ž‘์—… ์ •์˜ ๋‚ด์—์„œ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ์ง€์ •ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐ ์ž‘์—…์˜ GITHUB_TOKEN์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์‚ฌ์šฉ ๊ถŒํ•œ ์ง‘ํ•ฉ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์›Œํฌํ”Œ๋กœ์˜ ๋ชจ๋“  ์ž‘์—…์— ๋Œ€ํ•œ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ ์ˆ˜์ค€์—์„œ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ permissions๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Example: Setting the GITHUB_TOKEN permissions for one job in a workflow

์ด ์˜ˆ์ œ์—์„œ๋Š” ์ด๋ฆ„์ด stale๋กœ ์ง€์ •๋œ ์ž‘์—…์—๋งŒ ์ ์šฉ๋˜๋Š” GITHUB_TOKEN์— ๋Œ€ํ•ด ์„ค๋ช…๋˜๋Š” ์‚ฌ์šฉ ๊ถŒํ•œ์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. issues ๋ฐ pull-requests ๊ถŒํ•œ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ถŒํ•œ์€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

jobs:
  stale:
    runs-on: ubuntu-latest

    permissions:
      issues: write
      pull-requests: write

    steps:
      - uses: actions/stale@v5