Что такое секрет?
В разработке программного обеспечения секрет — это часть конфиденциальной информации, которая используется для проверки подлинности или авторизации доступа к системам, службам, данным и API. Вот некоторые примеры.
- Ключи API и маркеры доступа, позволяющие взаимодействовать с внешними службами, такими как REST API GitHub. Маркеры доступа также позволяют службам, таким как GitHub Actions, выполнять задачи, необходимые для проверки подлинности, так как мы будем экспериментировать позже.
- Учетные данные базы данных, предоставляющие доступ к локальным и внешним базам данных и хранилищу.
- Закрытые ключи, такие как частные ключи SSH и PGP, которые можно использовать для доступа к другим серверам и шифрования данных.
Так как секреты предоставляют так много доступа, включая критически важные системы, мы можем понять, почему это так важно, чтобы обеспечить безопасность** секретов**.
Что может произойти, когда секрет предоставляется?
- Злоумышленники могут получить несанкционированный доступ ко всему секрету, к которым разрешен доступ.
- Хакеры могут украсть данные, включая конфиденциальные пользовательские данные. Это может иметь конфиденциальность и юридические последствия и вред доверия к вам и вашему приложению.
- Предоставленные секреты могут стоить вам деньги , если хакеры выполняют несанкционированные рабочие нагрузки на учетных записях поставщика облачных служб.
- Хакеры могут использовать предоставленный секрет для удаления, изменения и нарушения серверов, которые могут привести к простою и потере данных.
Рассмотрим все доступ и способности секрет предоставляет вам и то, что хакер может сделать с ним. Например, если учетная запись personal access token для учетной записи GitHub была предоставлена, хакер может опубликовать и внести изменения в GitHub как вы.
Рекомендации по управлению секретами
Чтобы избежать этих типов проблем, следуйте рекомендациям, чтобы предотвратить утечки и ограничить ущерб, если секрет когда-либо подвергается.
Следуйте принципу наименьших привилегий (PoLP)
По возможности ограничьте то, что может сделать секрет, и сможете получить доступ только к необходимым. Например:
- Если секрет будет использоваться только для чтения данных, а не внесения изменений в данные, выберите его только для чтения.
- Если api, который вы используете, позволяет ограничить секрет только определенными областями или разрешениями, выберите только те, которые вам нужны. Например, если вам нужно создать проблемы только с секретом GitHub, нет причин для доступа к содержимому репозитория или что-либо другое.
- Если секрет предоставит злоумышленнику полный доступ к учетной записи пользователя, принадлежащей ей, рассмотрите возможность создания учетных записей служб, которые могут владеть секретом.
Защита секретов в приложении
- Никогда не закодировать секрет. Всегда используйте переменные среды или средства управления секретами платформы (например, переменных данных.product.github %}секреты репозитория).
- Если вам нужно поделиться секретом с кем-то, используйте специальное средство, например диспетчер** паролей**. Никогда не отправлять секреты по электронной почте или мгновенному сообщению.
- Если это возможно, установите даты окончания срока действия и регулярно поворачивайте секреты . Это снижает риск использования старых секретов.
- Если приложение создает журнал, убедитесь, что секреты будут отредактированы перед ведением журнала. В противном случае активные секреты можно сохранить в файлах с открытым текстом.
Ограничение ущерба, если секрет предоставляется
- Рассмотрите скомпрометированный секрет, даже если он был предоставлен только на секунду, и немедленно отмените секрет. Затем создайте новый секрет и сохраните его безопасно.
- Проверьте все журналы действий, которые могут отображать любые подозрительные действия, выполненные с скомпрометированный секрет.
- Рассмотрим, как секрет был предоставлен и внесите изменения в процессы, чтобы это не могло повториться.
Как GitHub помогает защитить секреты
Есть много, что вы можете сделать, чтобы сохранить секреты в безопасности, но есть также много, что GitHub делает, чтобы помочь сохранить секрет секреты. Все делают ошибки, и мы здесь, чтобы помочь с функциями, которые будут перехватывать любые секреты, которые вы случайно предоставляете:
**Защита от отправки, с которой мы будем экспериментировать позже, блокирует отправку секретов в репозитории на GitHub.
** Сканирование секретов сканирует репозитории и создает оповещения при обнаружении секрета. Для некоторых секретов мы также уведомляем поставщика, чтобы они могли принять меры, такие как отмена секрета автоматически.
Практика безопасного хранения секрета
В этом упражнении мы создадим personal access token и безопасно сохраните его, чтобы использовать его с GitHub Actions. Действие, которое мы создадим, — это простой рабочий процесс, который отвечает на проблему.
1. Создание репозитория практики
Начнем с создания репозитория для работы. У new2code учетной записи есть репозиторий шаблонов, который можно использовать для быстрого начала работы.
- Перейдите на новую страницу репозитория. После этой ссылки предварительно выберите шаблон в учетной
new2codeзаписи. - В разделе "Владелец" убедитесь, что выбрана учетная запись пользователя.
- В поле "Имя репозитория" введите
secret-action. - Под полем описания выберите "Общедоступный ", чтобы задать видимость репозитория.
- Щелкните Создать репозиторий.
2. Фиксация фиктивного маркера
Все делают ошибки, и возможно, что вы случайно зафиксируете секрет в какой-то момент в пути написания кода. В этом упражнении мы намеренно зафиксируем поддельный токен , чтобы мы могли ознакомиться с оповещением, которое активируется.
-
Перейдите к только что созданному репозиторию.
-
Перейдите к файлу рабочего процесса YAML, щелкнув
.github/workflowsсписок файлов. -
Откройте файл рабочего процесса, щелкнув
comment.ymlсписок файлов. -
Чтобы изменить файл рабочего процесса, в правом верхнем углу щелкните .
-
В строке 13 вставьте
GH_TOKEN: ""этот фиктивный маркер между кавычками:secret_scanning_ab85fc6f8d7638cf1c11da812da308d43_abcdeКонечный результат должен выглядеть следующим образом:
GH_TOKEN: "secret_scanning_ab85fc6f8d7638cf1c11da812da308d43_abcde" -
Чтобы попытаться зафиксировать изменение, в правом верхнем углу нажмите кнопку "Зафиксировать изменения", а затем снова нажмите кнопку "Зафиксировать изменения " в диалоговом окне.
-
Теперь вы должны увидеть предупреждение о защите от пуша, которое сообщает: «Секретное сканирование нашло секрет GitHub Secret Scanning на строке 13».

Если бы мы не экспериментировали с фиктивным маркером, это оповещало нас о том, что мы были одним шагом от предоставления маркера. Просмотрите параметры, которые можно выбрать в оповещении.
-
Чтобы остановить фиксацию и избежать предоставления секрета, нажмите кнопку "Отмена". В правом верхнем углу нажмите кнопку "Отмена изменений", а затем отмените несохраненные изменения при появлении запроса.
3. Создание реального токена
Теперь давайте попробуем выполнить наши рекомендации. Сначала мы создадим personal access token, что позволит действию действовать от вашего имени (создаваемый комментарий будет отображаться из учетной записи пользователя).
Примечание.
Обратите внимание, что мы следуйте принципу наименьших привилегий для каждого шага конфигурации. У маркера будет самый короткий срок действия, только у него есть доступ к нужному репозиторию и минимальные разрешения, необходимые для работы.
- Перейдите на новую страницу personal access token.
- В разделе "Имя токена" укажите новое имя маркера. Вы можете использовать что-то подобное "Маркер действия".
- В разделе "Срок действия" выберите "7 дней".
- В разделе "Доступ к репозиторию" выберите "Только репозитории".
- В раскрывающемся списке "Выбор репозиториев" выберите только созданный ранее репозиторий практики.
- Справа от "Разрешения репозитория" в разделе "Разрешения" щелкните для просмотра всех возможных разрешений.
- Прокрутите вниз до раздела "Проблемы" и в раскрывающемся списке справа выберите "Чтение и запись".
- В нижней части страницы нажмите кнопку "Создать токен". При появлении запроса подтвердите, снова нажав кнопку "Создать маркер ".
Важно безопасно обрабатывать полученный маркер с этого момента. Как мы будем использовать маркер вскоре, вы можете скопировать его в буфер обмена кратко.
4. Безопасное хранение маркера
Теперь мы можем безопасно хранить новый маркер в нашем репозитории.
-
Перейдите к репозиторию, созданному в начале упражнения.
-
Под именем репозитория щелкните Settings. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".

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

-
В разделе "Секреты репозитория" щелкните "Создать секрет репозитория".
-
**В поле "Имя"** введите имя секрета. Для этого упражнения мы будем использовать `MY_TOKEN`. -
В поле "Секрет"** вставьте созданные **ранее данные personal access token.
-
Щелкните Добавить секрет.
Ваш секрет теперь безопасно зашифрован и готов к использованию!
5. Ссылка на маркер в нашем действии
Теперь мы можем обновить файл рабочего процесса YAML, чтобы использовать маркер и проверить его работу.
-
Вернитесь к репозиторию. Если вы находитесь в параметрах репозитория, вы можете щелкнуть Code под именем репозитория.
-
Перейдите к файлу рабочего процесса YAML, щелкнув
.github/workflowsсписок файлов. -
Откройте файл рабочего процесса, щелкнув
comment.ymlсписок файлов. -
Чтобы начать редактирование файла рабочего процесса, в правом верхнем углу щелкните .
-
В строке 13
GH_TOKEN: ""замените пустые кавычки${{ secrets.MY_TOKEN }}на . Это будет ссылаться на секрет репозитория, который мы добавили ранее.GH_TOKEN: ${{ secrets.MY_TOKEN }} -
Чтобы зафиксировать изменение, в правом верхнем углу нажмите кнопку "Зафиксировать изменения".
-
В диалоговом окне "Фиксация изменений" измените "Зафиксировать сообщение", чтобы отразить внесенные изменения. Например, можно ввести "Обновление рабочего процесса для использования секрета репозитория".
-
Убедитесь, что выбран параметр "Зафиксировать непосредственно в
mainветви". -
Щелкните Зафиксировать изменения.
6. Тестирование маркера и рабочего процесса
Мы должны быть все настроены сейчас! Давайте пройдем и протестируем рабочий процесс.
personal access token 1. Щелкните Новая проблема.
- В разделе "Добавить название" можно ввести любой нужный заголовок.
- В разделе "Добавить описание" в текстовой области введите
Hello. - Под текстовой областью нажмите кнопку "Создать".
После завершения рабочего процесса появится новый комментарий. Комментарий будет создан самостоятельно, так как мы используем ваш токен и содержат приветствие в ответ.
Следующие шаги
Для более подробного изучения защиты от сканирования секретов и принудительной отправки можно выполнить курс "Введение в проверку секретов " в GitHub Skills.
Еще одной важной частью безопасности кода является определение уязвимостей кода и исправление уязвимостей в проектах. См . раздел AUTOTITLE.