Доступ к секретному ключу GitHub

Я не понимаю, как обращаться с секретными ключами.

Я опубликовал репо на GitHub с секретным ключом (теперь я знаю, большое нет), затем узнал о секретном ключе GitHub в настройках и сохранил ключ там.

Итак, два вопроса:

  • как лучше всего очистить историю коммитов, чтобы секретный ключ больше не был доступен?
  • как мне на самом деле получить доступ к этому секретному ключу? В моем settings.py теперь было SECRET_KEY = 'name_of_key_on_github', но это бросает NameError: not defined.

Любая помощь приветствуется, спасибо.

Обновить

Итак, согласно ссылке, предоставленной @VonC, мне нужно создать файл .yml в каталоге .github/workflows.

general.yml

name: key #needed but name can be arbitrary

on: [push, pull_request, deployment]

env:
    runs-on: ubuntu-latest
      - uses: actions/labeler@v2
        with:
          repo-token: ${{ secrets.name_of_my_key }}
      credentials: #these don't work yet, if anyone can tell me why?
        username: ${{ github.actor }}
        password: ${{ secrets.ghcr_token }}

settings.py

SECRET_KEY = "../.github/general.yml"

Структура проекта, если вы хотите / хотите воспроизвести:

myrepo
├── app_name
│   ├── settings.py
├── .github
│   ├── workflows
│   │   ├── general.yml

Я могу запустить python manage.py runserver, но при нажатии на удаленное управление получаю следующую ошибку:

! [remote rejected] master -> master (refusing to allow a Personal Access Token to create or update workflow `.github/workflows/general.yml` without `workflow` scope)

Обновление 2

Не активировал область рабочего процесса (github.com ›профиль› настройки ›настройки разработчика› токены личного доступа):

Убедитесь, что флажок установлен.

Необходимо установить флажок рабочего процесса


person Suqui    schedule 28.01.2021    source источник
comment
Так почему бы вам не добавить область рабочего процесса? (docs.github.com/en/developers/apps/scopes -for-oauth-apps)   -  person VonC    schedule 28.01.2021
comment
@VonC - вот в чем проблема! Большое спасибо! :)   -  person Suqui    schedule 28.01.2021
comment
Большой! Я отредактировал свой ответ, чтобы добавить этот шаг.   -  person VonC    schedule 28.01.2021
comment
Я все еще не понимаю учетные данные, ubuntu все время предлагает мне их - разве они не должны быть автоматическими с тем, что я добавил в .yml?   -  person Suqui    schedule 28.01.2021
comment
Какой убунту? Твоя (локальная машина) Или виртуальная машина GitHb Action?   -  person VonC    schedule 28.01.2021
comment
На моем локальном компьютере - может, это должно быть связано со ссылкой, которую я использовал для клонирования?   -  person Suqui    schedule 28.01.2021
comment
Локальный означает проверку вашего git config credential.helper: его помощник по учетным данным мог кэшировать старые учетные данные.   -  person VonC    schedule 28.01.2021
comment
Опять сработал шарм! Перешел по этой ссылке: git-scm.com/docs/gitcredentials   -  person Suqui    schedule 28.01.2021
comment
Отличная работа! Это действительно должно сработать.   -  person VonC    schedule 28.01.2021


Ответы (1)


Используйте новый git filter-repo, который заменяет старый git filter-branch или BFG.

В нем есть множество примеров использования, включая фильтрацию на основе содержимого, чтобы вы могли удалить path/to/secret файл в прошлых коммитах:

Чтобы сохранить все файлы, кроме этих путей, просто добавьте --invert-paths:

git filter-repo --path path/to/secret --invert-paths

Вы можете добавить --dry-run, чтобы протестировать его перед фактическим изменением вашего репозитория.

Затем git push --force (это перезапишет историю вашего репозитория, поэтому обязательно уведомите любого другого соавтора)

Поскольку это нужно делать на свежем клоне:

  1. Ничего не трогайте в текущую папку клонов
  2. Создайте отдельный клон репозитория, в котором вы делаете репозиторий фильтра
  3. В этом втором клоне, который теперь очищен (больше нет большого файла в его истории), импортируйте вашу работу из вашего первого репо.

То есть для пункта 3:

cd /path/to/second/clone
git --work-tree=/path/to/first/original/clone add .
git commit -m "Import work from first clone"
git push --force

Что касается git gilter-repo, см. Полный пример в Удаление конфиденциальных файлов из git из Boopathi Rajaa.


Вы можете хранить зашифрованные ключи, но они доступны только для действий GitHub.

За пределами действий GitHub см. Github. , секретные ключи и другие локальные настройки из Пола Смитса.

Для этого вам нужны учетные данные (PAT) с областью рабочего процесса .

person VonC    schedule 28.01.2021
comment
Привет, @VonC, спасибо за помощь. Позвольте мне еще раз проверить, все ли у меня получилось. 1. Я клонирую свое репо из гитхаба во второе место. 2. Измените рабочее дерево на исходное местоположение 3. Используйте filter-repo 4. Принудительно нажмите на исходное репо. Правильно ли я понимаю, что оба местоположения указывают на одно и то же репо на Github? Могу ли я впоследствии избавиться от исходного репо? - person Suqui; 28.01.2021
comment
Итак, я следил за статьей, которую вы связали с Boopathi Rajaa. Я сделал git filter-repo --invert-paths и вижу новые файлы в .git. Но когда я git push --force, мой пульт отключается: fatal: No configured push destination. Я пробовал git add remote repo_name repo_link и ничего не получил. Что ты посоветуешь? - person Suqui; 28.01.2021
comment
@LisaLaw Если ваш локальный репозиторий правильный (это означает, что у него есть полная история, а конфиденциальная информация пропала), вам нужно добавить удаленный обратно (что вы и сделали), а затем git push -u origin master (при условии, что ветка по умолчанию - master, а не main, как в наши дни для новых репозиториев) - person VonC; 28.01.2021
comment
Отлично, похоже, это сработало. Должен ли я делать все такие толчки сейчас, или я могу вернуться к git push самостоятельно? - person Suqui; 28.01.2021
comment
@LisaLaw Нет, следующее нажатие (из ветки master по умолчанию) будет простым git push - person VonC; 28.01.2021
comment
Потрясающе, большое спасибо за вашу помощь. :) Думаю, теперь все мои сомнения развеялись, хе-хе. По крайней мере, на этот вопрос;) - person Suqui; 28.01.2021
comment
@LisaLaw Отлично! Отличная работа. Тогда до вашего следующего вопроса. - person VonC; 28.01.2021