Что такое секрет?
В разработке программного обеспечения секрет — это часть конфиденциальной информации, которая используется для проверки подлинности или авторизации доступа к системам, службам, данным и API. Вот некоторые примеры.
- Ключи API и маркеры доступа, позволяющие взаимодействовать с внешними службами, такими как REST API GitHub. Маркеры доступа также позволяют службам, таким как GitHub Actions, выполнять задачи, необходимые для проверки подлинности, так как мы будем экспериментировать позже.
- Учетные данные базы данных, предоставляющие доступ к локальным и внешним базам данных и хранилищу.
- Закрытые ключи, такие как частные ключи SSH и PGP, которые можно использовать для доступа к другим серверам и шифрования данных.
Так как секреты предоставляют так много доступа, включая критически важные системы, мы можем понять, почему это так важно, чтобы обеспечить безопасность** секретов**.
Что может произойти, когда секрет предоставляется?
- Злоумышленники могут получить несанкционированный доступ ко всему секрету, к которым разрешен доступ.
- Хакеры могут украсть данные, включая конфиденциальные пользовательские данные. Это может иметь конфиденциальность и юридические последствия и вред доверия к вам и вашему приложению.
- Предоставленные секреты могут стоить вам деньги , если хакеры выполняют несанкционированные рабочие нагрузки на учетных записях поставщика облачных служб.
- Хакеры могут использовать предоставленный секрет для удаления, изменения и нарушения серверов, которые могут привести к простою и потере данных.
Рассмотрим все доступ и способности секрет предоставляет вам и то, что хакер может сделать с ним. Например, если учетная запись personal access token для учетной записи GitHub была предоставлена, хакер может опубликовать и внести изменения в GitHub как вы.
Рекомендации по управлению секретами
Чтобы избежать этих типов проблем, следуйте рекомендациям, чтобы предотвратить утечки и ограничить ущерб, если секрет когда-либо подвергается.
Следуйте принципу наименьших привилегий (PoLP)
По возможности ограничьте то, что может сделать секрет, и сможете получить доступ только к необходимым. Например:
- Если секрет будет использоваться только для чтения данных, а не внесения изменений в данные, выберите его только для чтения.
- Если api, который вы используете, позволяет ограничить секрет только определенными областями или разрешениями, выберите только те, которые вам нужны. Например, если вам нужно создать проблемы только с секретом GitHub, нет причин для доступа к содержимому репозитория или что-либо другое.
- Если секрет предоставит злоумышленнику полный доступ к учетной записи пользователя, принадлежащей ей, рассмотрите возможность создания учетных записей служб, которые могут владеть секретом.
Защита секретов в приложении
- Никогда не закодировать секрет. Всегда используйте переменные среды или средства управления секретами платформы (например, переменных данных.product.github %}секреты репозитория).