GITHUB_TOKEN в GitHub Actions
Как это работат, изменение привелегий, кастомизация.
Сегодня я расскажу вам все о GITHUB_TOKEN в GitHub Actions. Вы узнаете, что это такое, как он работает, как настроить его поведение, а также как ограничить или изменить его разрешения.
Видео
Как обычно, если вы учитесь визуально или просто предпочитаете смотреть и слушать, а не читать, вот вам видео с полным объяснением и демонстрацией, которое, честно говоря, гораздо более полное, чем этот пост.
Если вы предпочитаете читать, что ж… давайте продолжим 🙂
Что такое GITHUB_TOKEN
Давайте начнем с того, что такое GITHUB_TOKEN в GitHub Actions и как он работает.
GITHUB_TOKEN — это специальный токен доступа, который вы можете использовать для аутентификации от имени GitHub Actions. GitHub автоматически создает для вас секрет GITHUB_TOKEN для использования в рабочем процессе, и вы можете использовать его для аутентификации при выполнении рабочего процесса.
Это работает следующим образом: когда вы включаете GitHub Actions в репозитории, GitHub устанавливает на него GitHub App. Секрет GITHUB_TOKEN — это, по сути, токен доступа к установке приложения GitHub.
Перед началом каждого задания GitHub получает токен доступа к установке для задания от этого приложения GitHub. Поскольку приложение имеет доступ к одному репозиторию, права доступа токена ограничены репозиторием, содержащим ваш рабочий процесс. А чтобы сделать его еще более безопасным, срок действия маркера истекает после завершения работы.
Надеюсь, теперь механизм стал более понятным. Давайте быстро посмотрим, как использовать GITHUB_TOKEN
Использование токена GitHub
Существует 2 способа использования токена: из секретов и из контекста.
- uses: actions/labeler@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
В этом первом примере мы используем секрет secrets.GITHUB_TOKEN
для его использования. Как уже упоминалось, секрет генерируется автоматически, поэтому вы можете сразу же использовать его.
- name: Create a Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ github.token }}
Здесь вместо этого мы используем контекст GitHub, который содержит токен. Обратите внимание, что эти два варианта эквивалентны.
Персональный токен доступа против GITHUB_TOKEN
Если вы думаете: «Почему я должен использовать GITHUB_TOKEN вместо моего обычного PAT?», помните, что персональный токен всегда доступен, поэтому если кто-то сможет украсть этот PAT, он может причинить вред.
Срок действия GITHUB_TOKEN истекает сразу после завершения работы. Поэтому даже если кто-то сможет украсть его (что практически невозможно), он в принципе не сможет сделать ничего плохого.
Права по умолчанию
По умолчанию GITHUB_TOKEN имеет довольно внушительный список разрешений, назначенных ему.
В этой таблице показаны разрешения, предоставляемые GITHUB_TOKEN по умолчанию. Хорошо то, что люди с правами администратора предприятия, организации или хранилища могут установить разрешения по умолчанию как разрешительные или ограниченные.
Разрешения в UI
Итак, давайте посмотрим, как мы можем изменить разрешения GITHUB_TOKEN, чтобы сделать его еще более безопасным.
Просто зайдите в Настройки (Settings) вашего хранилища или организации, затем нажмите на Действия (Actions).
Здесь вы можете изменить разрешения, назначенные вашему токену, выбрав «Чтение и запись» (что позволяет вам получить доступ к содержимому и вносить изменения) или «Только чтение«.
Это очень быстро, но, с другой стороны, довольно ограниченно. Что если я хочу назначить разрешения более детально?
Гранулярные разрешения через YAML
Вы можете использовать ключ permissions
в YAML-файле рабочего процесса, чтобы изменить разрешения GITHUB_TOKEN как для всего рабочего процесса так и для отдельных заданий.
permissions:
contents: write
pull-requests: write
issues: read
packages: none
И вы можете использовать все разрешения, которые перечислены в таблице выше. Кроме того, как вы можете видеть ниже, он поддерживает дополнение ввода, если вы делаете это непосредственно в интерфейсе GitHub:
Когда используется ключ
permissions
, все неуказанные разрешения устанавливаются на отсутствие доступа, за исключением области метаданных, которая всегда получает доступ на чтение.
Вы можете персонализировать разрешения токенов либо на уровне конкретного задания, либо на уровне всего рабочего процесса (или и то, и другое):
[...]
permissions:
contents: write
pull-requests: write
jobs:
job1:
runs-on: ubuntu-latest
steps:
[...]
job2:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
[...]
Заключение
Надеюсь, теперь вы лучше поняли, что такое GITHUB_TOKEN, что он делает и как правильно установить его права доступа. Дайте мне знать в комментариях ниже, если у вас есть другие вопросы по этому поводу.
Источник: The GITHUB_TOKEN in GitHub Actions: How it Works, Change Permissions, Customizations