Note
GitHubразмещенные в данный момент средства выполнения не поддерживаются в GitHub Enterprise Server. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.
Общие сведения о секретах см. в разделе Сведения о секретах.
Создание секретов для репозитория
-
На GitHubперейдите на главную страницу репозитория.
-
Под именем репозитория щелкните Settings. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".
-
Выберите Новый секрет репозитория.
-
В поле "Имя" введите имя секрета.
-
В поле "Секрет" введите значение секрета.
-
Щелкните Добавить секрет.
Если в репозитории есть секреты среды или доступ к секретам из родительской организации, эти секреты также отображаются на этой странице.
Note
Дополнительные сведения о GitHub CLIсм. в разделе Сведения о GitHub CLI.
Чтобы добавить секрет репозитория, используйте подкоманду 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. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".
-
Щелкните Создать секрет организации.
-
Введите имя для секрета в поле ввода Имя.
-
Введите значение для секрета.
-
В раскрывающемся списке Доступ к репозиторию выберите политику доступа.
-
Щелкните Добавить секрет.
Note
По умолчанию 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. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".
-
Список секретов включает все настроенные разрешения и политики. Дополнительные сведения о настроенных разрешениях для каждого секрета нажмите кнопку "Обновить".
Использование секретов в рабочем процессе
Note
*
- Секреты не передаются в повторно используемые рабочие процессы. Дополнительные сведения см. в разделе Повторное использование рабочих процессов. Если рабочим процессам GitHub Actions требуется доступ к ресурсам от поставщика облачных служб, поддерживающего OpenID Connect (OIDC), можно настроить рабочие процессы для проверки подлинности непосредственно в поставщике облачных служб. Это позволит прекратить хранение таких учетных данных в виде долгоживущих секретов и обеспечить другие преимущества безопасности. Дополнительные сведения см. в разделе Сведения об усилении защиты с помощью OpenID Connect.
Чтобы указать действие с секретом в качестве входных данных или переменной среды, можно использовать контекст 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%"
Ограничения для секретов
Можно хранить до 1000 секретов организации, 100 секретов репозитория и 100 секретов среды.
Рабочий процесс, созданный в репозитории, может получить доступ к следующему количеству секретов:
- Все 100 секретов в репозитории
- Если репозиторию назначен доступ к более чем 100 секретам организации, рабочий процесс может использовать только первые 100 секретов организации (отсортированные по имени в алфавитном порядке).
- Все 100 секретов среды.
Секреты ограничены размером 48 КБ. Чтобы сохранить более крупные секреты, см . обходное решение по хранению больших секретов ниже.
Хранение больших секретов
Чтобы использовать секреты размером более 48 КБ, можно использовать обходное решение для хранения секретов в репозитории и сохранения парольной фразы расшифровки в виде секрета на GitHub. Например, можно использовать gpg
для локального шифрования файла, содержащего секрет, прежде чем добавлять файл в репозиторий на GitHub. Дополнительные сведения см. в gpg manpage.
Warning
Будьте осторожны, чтобы секреты не печатались при запуске рабочего процесса. При использовании этого временного решения GitHub не редактирует секреты, которые выводятся на печать в журналах.
-
Выполните следующую команду на терминале, чтобы зашифровать файл, содержащий секрет, с помощью
gpg
и алгоритма шифра AES256. В этом примере секрет содержит файлmy_secret.json
.gpg --symmetric --cipher-algo AES256 my_secret.json
-
Вам будет предложено ввести парольную фразу. Запомните парольную фразу, так как вам потребуется создать новый секрет в GitHub, который использует парольную фразу как значение.
-
Создайте новый секрет, который содержит парольную фразу. Например, создайте новый секрет с именем
LARGE_SECRET_PASSPHRASE
и задайте для секрета парольную фразу, использованную на предыдущем шаге. -
Скопируйте зашифрованный файл в путь в репозитории и выполните его фиксацию. В этом примере зашифрованный файл имеет значение
my_secret.json.gpg
.Warning
Обязательно скопируйте зашифрованный
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@v4 - 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.
Note
Обратите внимание, что Base64 преобразует только двоичный файл в текст и не является заменой фактического шифрования.
-
Используйте
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@v4 - 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
Note
Использование другой оболочки может потребовать различных команд для декодирования секрета в файл. В запусках Windows рекомендуется использовать оболочку bash с shell: bash
помощью команд, описанных на приведенном выше шаге run
.
Изменение секретов из журналов выполнения рабочего процесса
GitHub Actions автоматически редактирует содержимое всех секретов GitHub , которые печатаются в журналах рабочих процессов.
GitHub Actions также редактирует информацию, которая распознается как конфиденциальная, но не хранится в виде секрета. В настоящее время GitHub поддерживает следующее:
- 32-байтовые и 64-байтовые ключи Azure
- Пароли клиентского приложения Azure AD
- Ключи кэша Azure
- ключи Реестр контейнеров Azure
- Ключи узла функции Azure
- Ключи поиска Azure
- Строки подключения к базам данных
- Заголовки маркера носителя HTTP
- JWTs
- Маркеры автора NPM
- Ключи API NuGet
- Токены установки GitHub версии 1
- Токены установки GitHub версии 2 (
ghp
, ,ghu``gho
,ghs``ghr
) - GitHub PATs версии 2
Note
Если вы хотите, чтобы другие типы конфиденциальной информации были автоматически отредактированы, обратитесь к нам в наших обсуждениях сообщества.
В качестве привычки рекомендуется маскировать все конфиденциальные сведения, которые не являются секретом GitHub с помощью ::add-mask::VALUE
. Это приводит к тому, что значение будет рассматриваться как секрет и отредактировано из журналов. Дополнительные сведения о маскировки данных см. в разделе Команды рабочего процесса для GitHub Actions.
Редактирование секретов выполняется средствами выполнения рабочих процессов. Это означает, что секрет будет отредактирован только в том случае, если он использовался в задании и доступен средством выполнения. Если нередактируемый секрет отправляется в журнал выполнения рабочего процесса, следует удалить журнал и повернуть секрет. Сведения об удалении журналов см. в разделе Использование журналов выполнения рабочих процессов.