Управление секретами в GitHub
Секреты — это переменные, создаваемые в организации, репозитории или среде репозитория. Секреты доступны для использования в рабочих процессах GitHub Actions. GitHub Actions может читать только секрет, если вы явно включаете секрет в рабочий процесс.
Для секретов, хранящихся на уровне организации, можно использовать политики доступа для управления тем, какие репозитории могут использовать секреты организации. Секреты уровня организации позволяют совместно использовать секреты между несколькими репозиториями. Это снижает потребность в создании повторяющихся секретов. При обновлении секрета организации в одном расположении это изменение вступает в силу во всех рабочих процессах репозитория, использующих этот секрет.
Для секретов, хранящихся на уровне среды, можно включить нужных проверяющих для управления доступом к секретам. Задание рабочего процесса не может получить доступ к секретам среды, пока его не одобрят обязательные утверждающие лица.
Замечание
Рабочие процессы можно настроить для проверки подлинности непосредственно в Azure для доступа к ресурсам.
Присвоение имен секретам
К именам секретов применяются следующие правила:
- Имена могут содержать только буквенно-цифровые символы (
[a-z],[A-Z],[0-9]) или символы подчеркивания (_). Пробелы не допускаются. - Имена не должны начинаться с префикса
GITHUB_. - Имена не должны начинаться с числа.
- Имена не чувствительны к регистру.
- Имена должны быть уникальными на том уровне, где они создаются.
Чтобы убедиться, что GitHub редактирует секрет в журналах, не используйте структурированные данные в качестве значений секретов. Например, не создавайте секреты, содержащие BLOB-объекты JSON или закодированные BLOB-объекты Git.
Доступ к секретам
Задайте секрет в качестве входной или переменной среды в файле рабочего процесса, чтобы сделать его доступным для действия. Вы можете использовать и считывать секреты в файле рабочего процесса, если у вас есть доступ к редактированию файла. Дополнительные сведения см. в разделе "Разрешения Access" на сайте GitHub.
Секреты организации и репозитория считываются при выполнении рабочего процесса в очереди, а секреты среды считываются при запуске задания, ссылающегося на среду. Вы также можете управлять секретами с помощью REST API.
Ограничение разрешений для учетных данных
Рекомендуется предоставить минимально возможные разрешения. Например, вместо использования личных учетных данных используйте ключи развертывания или учетную запись службы. Попробуйте предоставить разрешения только для чтения, если это необходимо, и максимально ограничить доступ.
При создании токена личного доступа (классический), выберите минимальное количество областей доступа. При создании детализированного личного токена доступа выберите минимальные разрешения и необходимый доступ к репозиторию.
Создание секретов
Чтобы создать секреты или переменные в GitHub для репозитория личных учетных записей, необходимо быть владельцем репозитория. Чтобы создать секреты или переменные на GitHub для репозитория организации, необходимо иметь доступ уровня admin. Наконец, чтобы создать секреты или переменные для репозитория личных учетных записей или репозитория организации через REST API, необходимо иметь доступ к участникам совместной работы.
Секреты можно создать следующими способами:
- Выберите "Параметры " в верхней панели навигации репозитория.
- В разделе "Безопасность " левой навигации выберите раскрывающийся список "Секреты и переменные ".
- Выберите "Действия" , чтобы получить доступ к секретам и переменным действий .
Использование секретов в рабочем процессе
Чтобы предоставить действие с секретом в качестве входной или переменной среды, можно использовать secrets контекст для доступа к секретам, созданным в репозитории. В следующем коде показан пример доступа к секретам в рабочем процессе.
steps:
- name: Hello world action
with: # Set the secret as an input
super_secret: ${{ secrets.SuperSecret }}
env: # Or as an environment variable
super_secret: ${{ secrets.SuperSecret }}
На секреты нельзя ссылаться напрямую в условных выражениях if:. Рекомендуется задать секреты в качестве переменных среды уровня задания, а затем ссылаться на переменные среды для условного выполнения шагов в задании.
Если значение секрета не задано, возвращаемое значение выражения, ссылающегося на секрет (например ${{ secrets.SuperSecret }} , в примере), является пустой строкой.