Декларативная конфигурация ArgoCD GitOps: как безопасно хранить кредиты репозитория в git?

ArgoCD поддерживает декларативную конфигурацию: https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/

В частности, для учетных данных репозитория: https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/

Например, типичная запись может выглядеть так:

# Repository credentials, for using the same credentials in multiple repositories.
apiVersion: v1
kind: Secret
metadata:
  name: argoproj-https-creds
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repo-creds
stringData:
  url: https://github.com/argoproj
  type: helm
  password: my-password
  username: my-username

Аналогичным образом можно добавить доступ по SSH к репозиториям git с помощью закрытого ключа SSH:

apiVersion: v1
kind: Secret
metadata:
  name: argoproj-ssh-creds
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repo-creds
stringData:
  url: [email protected]:argoproj-labs
  type: helm
  sshPrivateKey: |
    -----BEGIN OPENSSH PRIVATE KEY-----
    ...
    -----END OPENSSH PRIVATE KEY-----

В обоих сценариях текстовый пароль и закрытый ssh-ключ сохраняются в текстовом файле в git.

Существует ли канонический способ безопасного хранения этих учетных данных вместо обычного текста?

https://xyproblem.info/: Я пытаюсь решить проблему автоматической загрузки экземпляра ArgoCD с помощью пары файлов YAML, хранящихся в репозитории git, предназначенном для gitops. Сервер приложений ArgoCD будет использовать файл YAML repo-creds для своего заполнения, чтобы впоследствии создавать приложения ArgoCD из этих репозиториев. Однако нежелательно, чтобы пароль/закрытый ключ проверялись в git в виде обычного текста. Как мы можем загрузить все необходимые репозитории, не делая этого?

Мне известен по крайней мере один обходной путь: я мог бы использовать приложение argocd CLI в нашем кластере K8s для заполнения репо-кредитов (или даже просто kubectl apply, если уж на то пошло). Но тогда какой смысл ArgoCD программно поддерживать учетные данные репо-кредитов через gitops?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, вы захотите добавить способ внедрения секретов и вообще избегать их хранения в git.

Вот некоторые распространенные решения для внедрения секретов и простого использования секретных пользовательских ресурсов в git:

Чистая загрузочная версия argocd будет выглядеть так:

  1. Установите секретный оператор в свой кластер
  2. Примените манифесты argocd с пользовательским ресурсом оператора для секрета, содержащего ваши репо-кредиты.

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

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

Я бы не рекомендовал использовать что-либо вроде SOPS, которое шифрует содержимое вашего репозитория, потому что это затрудняет разумную реакцию на скомпрометированный ключ (потому что даже если вы повторно зашифруете что-либо, скомпрометированный ключ можно использовать с предыдущими данными в ваша история git). +1 за внешние секреты.

larsks 04.06.2024 15:08

Другие вопросы по теме

Похожие вопросы

Azure DevOps: передача параметров времени выполнения для задачи копирования (с использованием условной вставки) — выражение шаблона
Стоимость удаленного Azure Key Vault с включенной защитой от очистки
Ошибка развертывания: не найден загруженный артефакт
Как мне подключить серверную часть проекта React Native Amplify к моему интерфейсу, размещенному в мобильных магазинах?
Ошибка репозитория Databricks API при попытке создать репо
Есть ли способ прикрепить политики ServiceRoles к роли, созданной вручную, с помощью AWS CDK?
Виртуальная машина Azure: остановка виртуальной машины Azure после создания в задаче конвейера CI CD
Облако Xcode, как использовать конкретную версию флаттера вместо последней?
Могу ли я добавить новые значения среды в приложение-функцию Azure через конвейер Azure Dev Ops?
Публикация артефакта в Azure Devops Pipeline: ошибка получения разрешения на доступ к пути