Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж

Как удалить секреты из истории Git

У вас есть пароль или секрет в вашем репозитории Git, и вы хотите его удалить. Недавно у меня была такая же проблема в одном из моих репозиториев. Я покажу вам удобный и простой способ избавиться от любого случайно зафиксированного секрета в вашем репозитории Git.

Понимание ситуации

Прежде всего, нам нужно убедиться, что у нас есть общее понимание проблемы. Мы закоммитили секрет в репозиторий Git. Это проблема, потому что каждый, у кого есть доступ к нашему исходному коду, имеет доступ к секретной информации. Нам не нужны никакие секреты в наших репозиториях исходного кода.

Неважно, удаляем ли мы секрет другим коммитом или удаляем файл из репозитория. Секрет всегда останется в истории Git.Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж

Если мы хотим избавиться от секрета, нам нужно переписать историю Git. Это может быть непросто, особенно для таких разработчиков, как я, которые обычно используют только базовые команды Git.

У меня есть пример репозитория, который содержит секреты в файле конфигурации, который я хочу удалить. Давайте посмотрим на файл.

 {
    "mailPassword": "&T95HgN~vRs>{Wv§ZsAateQ$mKX8@aat",
    "jwtSecret": ":vb5#jSKKyg&Sx)2s>nRZMXnUf$"
} 

Я сделал несколько коммитов для этого файла. Вот почему секрет останется в истории Git, даже если я удалю его в будущем коммите.

Возможные решения

Несмотря на то, что существуют встроенные команды Git, такие как git filter-branch , которые мы можем использовать для перезаписи истории Git, они по-прежнему несколько подвержены ошибкам. Это особенно верно, если вы раньше не использовали эти команды.

Я могу говорить только за себя, но я предпочитаю использовать специальный инструмент, который помогает мне поступать правильно.Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж К счастью, я наткнулся на BFG Repo Cleaner.

Средство очистки репозиториев BFG

Средство очистки репозиториев BFG — это инструмент Java, что означает, что на вашем компьютере должна быть установлена ​​среда выполнения Java, а Java должна быть доступна из командной строки.

BFG Repo Cleaner предлагает более простую и быструю альтернативу git-filter-branch для удаления секретных данных из истории вашего репозитория Git.

Загрузите инструмент и переместите его в место, доступное из командной строки. Я переместил его в корень диска C:\ на моем компьютере с Windows.

Подготовка репозитория

Нам нужно убедиться, что наш репозиторий находится в чистом состоянии. Я предлагаю, чтобы у вас не было ожидающих изменений, и вы загружали последние изменения из удаленных репозиториев, чтобы убедиться, что вы работаете с последней версией своего кода.

Кроме того, нам нужно убедиться, что мы удалили все секреты из репозитория с помощью другого коммита, прежде чем использовать BFG Repo Cleaner.Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж Давайте откроем файл конфигурации, удалим секреты и зафиксируем изменения.

Создание файла Password.Txt

Далее мы создаем новый файл в корневой папке репозитория и называем его password.txt . В этот файл мы вставляем секреты, которые хотим удалить из репозитория. Убедитесь, что вы помещаете каждый секрет в новую строку.

 &T95HgN~vRs>{Wv§ZsAateQ$mKX8@aat
:vb5#jSKKyg&Sx)2s>nRZMXnUf$ 

Запуск BFG Repo Cleaner

Затем мы открываем инструмент командной строки и переходим в корень репозитория. Мы запускаем следующую команду для запуска BFG Repo Cleaner.

 java -jar C:\bfg-1.14.0.jar --replace-text password.txt 

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

Проверка репозитория

Теперь давайте посмотрим на историю Git репозитория.Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж Как видите, инструмент заменил секреты общей строкой.

Удаленные секреты в Git Diff

Отправка вашего переписанного репозитория

Если вы работаете с удаленными устройствами, например, GitHub, вам необходимо принудительно отправить изменения с помощью следующей команды:

 git push --force origin main 

Origin — это имя удаленного сервера, а main — это имя ветки.

Это нужно сделать, потому что при перезаписи истории каждое изменение хэша коммита начиналось с первого коммита, содержащего какой-либо из ваших секретов.

Работа с раскрытыми секретами

Также убедитесь, что все копии вашего репозитория, включая все удаленные, снова клонированы. В противном случае вы не сможете отправить изменения, потому что история двух репозиториев Git не совпадает.

А как же раскрытые секреты?

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

изменить любые пароли или другие секретная информация , которая была раскрыта.Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж

В общем, я бы рассматривал любую секретную информацию, которая была передана в репозиторий, как потенциально утечку, и я предлагаю изменить эти секреты сразу после исправления репозитория с помощью метода, показанного здесь.

 

Я увлеченный инженер-программист, страстно любящий преподавать разработку .NET на YouTube, писать статьи о своем путешествии в своем блоге и заставлять людей улыбаться.

Управление секретами с помощью kubectl | Kubernetes

Создание секретных объектов с помощью командной строки kubectl.

На этой странице показано, как создавать, редактировать, управлять и удалять Kubernetes. Секреты использования kubectl инструмент командной строки.

Прежде чем начать

У вас должен быть кластер Kubernetes, и инструмент командной строки kubectl должен быть настроен для связи с вашим кластером. Рекомендуется запускать это руководство в кластере по крайней мере с двумя узлами, которые не действуют как хосты плоскости управления.Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж Если у вас еще нет кластер, вы можете создать его, используя миникуб или вы можете использовать одну из этих игровых площадок Kubernetes:

  • Killercoda
  • Играть с Kubernetes

Создать секрет

A Секрет 9Объект 0098 хранит конфиденциальные данные, такие как учетные данные. используется модулями для доступа к сервисам. Например, вам может понадобиться секрет для хранения имя пользователя и пароль, необходимые для доступа к базе данных.

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

admin и пароль S!B\*d$zDsb= .

Использовать необработанные данные

Выполните следующую команду:

 kubectl создать секретный универсальный db-user-pass \
    --from-literal=имя пользователя=admin \
    --from-literal=password='S!B\*d$zDsb='
 

Вы должны использовать одинарные кавычки '' для экранирования специальных символов, таких как $ , \ , * , = и ! в ваших строках.Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж Если вы этого не сделаете, ваша оболочка будет интерпретировать эти персонажи.

Использовать исходные файлы

  1. Сохранить учетные данные в файлах:

     echo -n 'admin' > ./username.txt
    echo -n 'S!B\*d$zDsb=' > ./password.txt
     

    Флаг -n гарантирует, что в сгенерированных файлах не будет лишней новой строки символ в конце текста. Это важно, потому что когда

    kubectl читает файл и кодирует содержимое в строку base64, дополнительный символ новой строки также кодируется. Вам не нужно специально бежать символов в строках, которые вы включаете в файл.

  2. Передайте пути к файлам в команде kubectl :

     kubectl create secret generic db-user-pass \
        --from-file=./имя_пользователя.txt \
        --from-file=./password.txt
     

    Имя ключа по умолчанию — это имя файла. При желании вы можете установить имя ключа используя --from-file=[key=]source .Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж Например:

     kubectl create secret generic db-user-pass \
        --from-file=имя_пользователя=./имя_пользователя.txt \
        --from-file=пароль=./password.txt
     

При любом методе вывод аналогичен:

 secret/db-user-pass created
 

Проверка секрета

Проверка создания секрета:

 kubectl получить секреты
 

Вывод аналогичен:

 ИМЯ ТИП ДАННЫХ ВОЗРАСТ
db-user-pass Непрозрачный 2 51s
 

Посмотреть подробности секрета:

 kubectl описать секрет db-user-pass
 

Вывод аналогичен:

 Имя: db-user-pass
Пространство имен: по умолчанию
Ярлыки: <нет>
Аннотации: <нет>
Тип: Непрозрачный
Данные
====
пароль: 12 байт
имя пользователя: 5 байт
 

Команды kubectl получить и kubectl описать не показывать содержимое из Secret по умолчанию. Это сделано для защиты секрета от разоблачения.Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж случайно или из-за сохранения в журнале терминала.

Расшифровать секрет

  1. Просмотр содержимого созданного вами секрета:

     kubectl get secret db-user-pass -o jsonpath='{.data}'
     

    Вывод аналогичен:

     { "пароль": "UyFCXCpkJHpEc2I9", "имя пользователя": "YWRtaW4=" }
     
  2. Расшифровать пароль данные:

     эхо 'UyFCXCpkJHpEc2I9' | base64 --декодировать
     

    Вывод аналогичен:

     S!B\*d$zDsb=
     

    Внимание! Это пример для документации. На практике, этот метод может привести к тому, что команда с закодированными данными будет сохранена в история вашей оболочки. Любой, кто имеет доступ к вашему компьютеру, может найти команду и расшифровать секрет. Лучший подход состоит в том, чтобы объединить представление и декодировать команды.

     kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --декодировать
     

Редактирование секрета

Вы можете редактировать существующий объект Secret , если только он не неизменный.Снять секретки: Снятие секреток с колеса – 5 простых способов — Блог — Мобильный шиномонтаж

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *