permissions:

Тема дорожной карты · GitHub Actions

Ключ permissions в GitHub Actions определяет область действий, предоставляемых автоматически генерируемому GITHUB_TOKEN для конкретного задания или всего workflow. Задавая permissions на уровне workflow или задания, вы ограничиваете токен только тем доступом, который действительно необходим — например, contents: read для чтения файлов или packages: write для публикации в GitHub Container Registry. Это позволяет следовать принципу минимальных привилегий, что является критически важной практикой для обеспечения безопасности. Без явного блока permissions, workflow на репозиториях, созданных после февраля 2023 года, по умолчанию имеют доступ только для чтения по большинству областей. Ключ permissions поддерживает детальные области, такие как issues, pull-requests, id-token, deployments, предоставляя командам точный контроль над тем, что каждый шаг пайплайна может делать.

Как это работает

permissions:-блок ограничивает область действия автопровиженного GITHUB_TOKEN. Это можно сделать на уровне всего workflow или для каждого отдельного задания. По умолчанию, многие старые репозитории используют permissions: write-all, что позволяет каждому шагу выполнять все действия. Современная практика включает в себя задание permissions: contents: read на уровне всего workflow и последующее повышение привилегий для конкретных заданий, где это необходимо. Например, для публикации комментариев к pull-запросам можно использовать pull-requests: write, а для публикации образов в контейнерной резервной системе — packages: write. OIDC-токен (id-token: write) используется для облачной аутентификации.

Когда применять

Всегда следует придерживаться принципа минимальных привилегий. Начните с permissions: contents: read на уровне всего workflow и добавьте write-права только там, где это необходимо для конкретных заданий. Для облачной аутентификации с использованием OIDC, необходимо задать id-token: write только для заданий, связанных с деплоем. Используйте инструменты, такие как pinact, для аудита workflow и поиска отсутствующих пинов и широких прав.

Типичные ошибки

Одним из наиболее распространенных ошибок является оставление дефолтного значения permissions: write-all, что позволяет каждому шагу выполнять все действия, включая пуш коммитов, публикацию комментариев к pull-запросам и изменение настроек. Это представляет серьезный риск для безопасности. Другой распространенной ошибкой является предоставление широких прав на уровне всего workflow вместо персонализации для каждого задания, что нарушает принцип минимальных привилегий. Наконец, часто возникает путаница между GITHUB_TOKEN и персональным доступным токеном (PAT), которые имеют разные области действия и сроки жизни.

Связанные понятия

Полезные ресурсы