Создание секретов для репозитория
-
На GitHubперейдите на главную страницу репозитория.
-
Под именем репозитория щелкните Settings. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".


-
Выберите Новый секрет репозитория.
-
В поле "Имя" введите имя секрета.
-
В поле "Секрет" введите значение секрета.
-
Щелкните Добавить секрет.
Если в репозитории есть секреты среды или доступ к секретам из родительской организации, эти секреты также отображаются на этой странице.
Чтобы добавить секрет репозитория, используйте подкоманду gh secret set. Замените secret-name именем своего секрета.
gh secret set SECRET_NAME
CLI предложит ввести значение секрета. Кроме того, можно считать значение секрета из файла.
gh secret set SECRET_NAME < secret.txt
Чтобы получить список всех секретов для репозитория, используйте подкоманду gh secret list.
Создание секретов для среды
Чтобы создать секреты или переменные для среды в репозитории личная учетная запись, необходимо быть владельцем репозитория. Чтобы создать секреты или переменные для среды в репозитории организации, необходимо иметь admin доступ. Дополнительные сведения о средах см. в разделе Управление средами для развертывания.
-
На GitHubперейдите на главную страницу репозитория.
-
Под именем репозитория щелкните Settings. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".

-
На левой боковой панели щелкните Среды.
-
Щелкните среду, в которую нужно добавить секрет.
-
В разделе Секреты среды нажмите кнопку Добавить секрет.
-
Введите имя для секрета в поле ввода Имя.
-
Введите значение для секрета.
-
Щелкните Добавить секрет.
Чтобы добавить секрет для среды, используйте gh secret set подкоманду с флагом --env или -e, за которым следует имя среды.
gh secret set --env ENV_NAME SECRET_NAME
Чтобы создать список всех секретов для среды, используйте gh secret list подкоманду с флагом --env или -e, за которым следует имя среды.
gh secret list --env ENV_NAME
Создание секретов для организации
-
На GitHubперейдите на главную страницу организации.
-
Под именем организации щелкните Settings. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".


-
Щелкните Создать секрет организации.
-
Введите имя для секрета в поле ввода Имя.
-
Введите значение для секрета.
-
В раскрывающемся списке Доступ к репозиторию выберите политику доступа.
-
Щелкните Добавить секрет.
Примечание.
По умолчанию GitHub CLI выполняет проверку подлинности с помощью repo областей и read:org областей. Для управления секретами организации необходимо дополнительно авторизовать область admin:org.
gh auth login --scopes "admin:org"
Чтобы добавить секрет для организации, используйте подкоманду gh secret set с флагом --org или -o, за которым следует имя организации.
gh secret set --org ORG_NAME SECRET_NAME
По умолчанию секрет доступен только частным репозиториям. Чтобы указать, что секрет должен быть доступен для всех репозиториев в организации, используйте флаг --visibility или -v.
gh secret set --org ORG_NAME SECRET_NAME --visibility all
Чтобы указать, что секрет должен быть доступен для выбранных репозиториев в организации, используйте флаг --repos или -r.
gh secret set --org ORG_NAME SECRET_NAME --repos REPO-NAME-1, REPO-NAME-2
Чтобы создать список всех секретов для организации, используйте подкоманду gh secret list с флагом --org или -o, за которым следует имя организации.
gh secret list --org ORG_NAME
Проверка доступа к секретам на уровне организации
Вы можете проверить, какие политики доступа применяются к секрету в вашей организации.
-
На GitHubперейдите на главную страницу организации.
-
Под именем организации щелкните Settings. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".

-
Список секретов включает все настроенные разрешения и политики. Дополнительные сведения о настроенных разрешениях для каждого секрета нажмите кнопку "Обновить".
Использование секретов в рабочем процессе
Примечание.
*
- Секреты не передаются в повторно используемые рабочие процессы. Дополнительные сведения см. в разделе Повторное использование рабочих процессов.
- Секреты недоступны для рабочих процессов, активированных событиями Dependabot. Дополнительные сведения см. в разделе Устранение неполадок зависимостей от действий GitHub.
- Если рабочим процессам GitHub Actions требуется доступ к ресурсам от поставщика облачных служб, поддерживающего OpenID Connect (OIDC), можно настроить рабочие процессы для проверки подлинности непосредственно в поставщике облачных служб. Это позволит прекратить хранение таких учетных данных в виде долгоживущих секретов и обеспечить другие преимущества безопасности. Дополнительные сведения см. в разделе OpenID Connect.
Предупреждение
Маскировка всех конфиденциальных данных, которые не являются секретом GitHub с помощью ::add-mask::VALUE. Это приводит к тому, что значение будет рассматриваться как секрет и отредактировано из журналов.
Чтобы указать действие с секретом в качестве входных данных или переменной среды, можно использовать контекст secrets для доступа к секретам, созданным в репозитории. Дополнительные сведения см. в разделе [AUTOTITLE и Справочник по контекстам](/actions/using-workflows/workflow-syntax-for-github-actions).
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:. Вместо этого рекомендуется задать секреты в качестве переменных среды на уровне задания, а затем создать ссылки на переменные среды для условного выполнения шагов в задании. Дополнительные сведения см. в разделе Справочник по контекстам иjobs.<job_id>.steps[*].if .
Если секрет не задан, возвращаемое значение выражения, которое ссылается на этот секрет (например, ${{ secrets.SuperSecret }} в примере) будет пустой строкой.
По возможности избегайте передачи секретов между процессами из командной строки. Процессы командной строки могут быть видимы для других пользователей (с помощью команды ps) или сканируются событиями аудита безопасности. Чтобы обеспечить защиту секретов, рассмотрите возможность использования переменных среды, STDINили других механизмов, поддерживаемых целевым процессом.
Если необходимо передать секреты в командной строке, добавьте их в соответствующие правила . Секреты зачастую содержат специальные символы, которые могут непреднамеренно повлиять на оболочку. Чтобы экранировать эти специальные символы, заключайте переменные среды в кавычки. Например:
Пример с использованием Bash
steps:
- shell: bash
env:
SUPER_SECRET: ${{ secrets.SuperSecret }}
run: |
example-command "$SUPER_SECRET"
Пример с использованием PowerShell
steps:
- shell: pwsh
env:
SUPER_SECRET: ${{ secrets.SuperSecret }}
run: |
example-command "$env:SUPER_SECRET"
Пример с использованием Cmd.exe
steps:
- shell: cmd
env:
SUPER_SECRET: ${{ secrets.SuperSecret }}
run: |
example-command "%SUPER_SECRET%"
Хранение больших секретов
Чтобы использовать секреты размером более 48 КБ, можно использовать обходное решение для хранения секретов в репозитории и сохранения парольной фразы расшифровки в виде секрета на GitHub. Например, можно использовать gpg для локального шифрования файла, содержащего секрет, прежде чем добавлять файл в репозиторий на GitHub. Дополнительные сведения см. в gpg manpage.
Предупреждение
Будьте осторожны, чтобы секреты не печатались при запуске рабочего процесса. При использовании этого временного решения GitHub не редактирует секреты, которые выводятся на печать в журналах.
-
Выполните следующую команду на терминале, чтобы зашифровать файл, содержащий секрет, с помощью
gpgи алгоритма шифра AES256. В этом примере секрет содержит файлmy_secret.json.gpg --symmetric --cipher-algo AES256 my_secret.json -
Вам будет предложено ввести парольную фразу. Запомните парольную фразу, так как вам потребуется создать новый секрет в GitHub, который использует парольную фразу как значение.
-
Создайте новый секрет, который содержит парольную фразу. Например, создайте новый секрет с именем
LARGE_SECRET_PASSPHRASEи задайте для секрета парольную фразу, использованную на предыдущем шаге. -
Скопируйте зашифрованный файл в путь в репозитории и выполните его фиксацию. В этом примере зашифрованный файл имеет значение
my_secret.json.gpg.Предупреждение
Обязательно скопируйте зашифрованный
my_secret.json.gpgфайл,.gpgзаканчивающийся расширением файла, а не незашифрованныйmy_secret.jsonфайл.git add my_secret.json.gpg git commit -m "Add new secret JSON file" -
Создайте скрипт оболочки в репозитории для расшифровки файла секрета. В этом примере секрет называется
decrypt_secret.sh.Shell #!/bin/sh # Decrypt the file mkdir $HOME/secrets # --batch to prevent interactive command # --yes to assume "yes" for questions gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" \ --output $HOME/secrets/my_secret.json my_secret.json.gpg
#!/bin/sh # Decrypt the file mkdir $HOME/secrets # --batch to prevent interactive command # --yes to assume "yes" for questions gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" \ --output $HOME/secrets/my_secret.json my_secret.json.gpg -
Перед возвратом в репозиторий убедитесь, что скрипт оболочки является исполняемым.
chmod +x decrypt_secret.sh git add decrypt_secret.sh git commit -m "Add new decryption script" git push -
В рабочем процессе GitHub Actions используйте
stepдля вызова скрипта оболочки и расшифровки секрета. Чтобы создать копию репозитория в среде, в которой выполняется рабочий процесс, необходимо использовать действиеactions/checkout. Создайте ссылку на сценарий оболочки с помощью командыrunотносительно корня репозитория.name: Workflows with large secrets on: push jobs: my-job: name: My Job runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Decrypt large secret run: ./decrypt_secret.sh env: LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }} # This command is just an example to show your secret being printed # Ensure you remove any print statements of your secrets. GitHub does # not hide secrets that use this workaround. - name: Test printing your secret (Remove this step in production) run: cat $HOME/secrets/my_secret.json
Хранение двоичных BLOB-объектов Base64 в виде секретов
Кодировку Base64 можно использовать для хранения небольших BLOB-объектов в виде секретов. Затем можно создать ссылку на секрет в рабочем процессе и декодировать его для использования в средстве выполнения тестов. Ограничения размера см. в разделе Использование секретов в GitHub Actions.
Примечание.
- Обратите внимание, что Base64 преобразует только двоичный файл в текст и не является заменой фактического шифрования.
- Использование другой оболочки может потребовать различных команд для декодирования секрета в файл. В запусках Windows рекомендуется использовать оболочку bash с
shell: bashпомощью команд, описанных на приведенном выше шагеrun.
-
Используйте
base64для кодирования файла в строку Base64. Например:В macOS можно выполнить следующее:
base64 -i cert.der -o cert.base64В Linux можно выполнить следующее:
base64 -w 0 cert.der > cert.base64 -
Создайте секрет, который содержит строку Base64. Например:
$ gh secret set CERTIFICATE_BASE64 < cert.base64 ✓ Set secret CERTIFICATE_BASE64 for octocat/octorepo -
Чтобы получить доступ к строке Base64 из средства выполнения тестов, передайте секрет в
base64 --decode. Например:name: Retrieve Base64 secret on: push: branches: [ octo-branch ] jobs: decode-secret: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Retrieve the secret and decode it to a file env: CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }} run: | echo $CERTIFICATE_BASE64 | base64 --decode > cert.der - name: Show certificate information run: | openssl x509 -in cert.der -inform DER -text -noout
Следующие шаги
Справочные сведения см. в разделе Справочник по секретам.