• Русский
  • Изменение OIDC Client Secret платформы

    ACP использует OIDC Client Secret для аутентификации между компонентами платформы. Может потребоваться выполнить ротацию этого секретного значения в целях соответствия требованиям безопасности, периодической ротации учетных данных или после возможной утечки учетных данных. После обновления секрета в global cluster платформа автоматически синхронизирует его со всеми member clusters.

    Предварительные требования

    • Доступ к kubectl в global cluster с привилегиями cluster-admin.
    • Все кластеры, управляемые платформой, должны быть обновлены до ACP v4.3.
    • Следующие плагины с жизненным циклом Agnostic должны быть обновлены до версий, совместимых с ACP v4.3:
      • Alauda Container Platform Gitops
      • Alauda Build of Kiali
      • Kubeflow Base
      • Alauda AI
    • Подготовлено новое значение client secret. Рекомендуется использовать криптографически случайную строку длиной не менее 32 символов.
    WARNING

    Изменение Client Secret приведет к перезапуску затронутых компонентов, что вызовет временные перебои в аутентификации. Планируйте эту операцию на окно технического обслуживания.

    Обзор OIDC Secret

    Учетные данные OIDC платформы хранятся в Kubernetes Secret со следующими параметрами:

    СвойствоЗначение
    Secret Namecpaas-oidc-secret
    Namespacecpaas-system

    Secret содержит два ключа данных:

    • client-id — идентификатор OIDC client. Значение по умолчанию — alauda-auth. Не изменяйте это значение.
    • client-secret — OIDC client secret. Это значение вы будете ротировать.

    Процедура

    Создание резервной копии текущего secret

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

    kubectl get secret cpaas-oidc-secret -n cpaas-system -o yaml > cpaas-oidc-secret-backup.yaml
    WARNING

    Резервная копия содержит конфиденциальные данные учетных данных. Храните ее в защищенном месте и удалите после завершения операции.

    Зафиксируйте текущий хэш client-secret для проверки без использования открытого текста после обновления:

    OLD_SECRET_SHA256="$(kubectl get secret cpaas-oidc-secret -n cpaas-system \
      -o jsonpath='{.data.client-secret}' | base64 -d | openssl dgst -sha256 -r | awk '{print $1}')"
    echo "Current client-secret SHA256: ${OLD_SECRET_SHA256}"

    Обновление Client Secret

    DANGER

    Не изменяйте значение client-id и не удаляйте Secret с последующим созданием заново. Это может привести к каскадным сбоям аутентификации во всей платформе.

    Используйте один из следующих способов, чтобы обновить только поле данных client-secret.

    Способ 1: использование kubectl patch (рекомендуется)

    Считайте новый secret из защищенного интерактивного ввода:

    read -rs NEW_CLIENT_SECRET
    echo
    kubectl patch secret cpaas-oidc-secret -n cpaas-system \
      --type merge \
      -p "{\"data\":{\"client-secret\":\"$(printf %s "$NEW_CLIENT_SECRET" | base64 | tr -d '\n')\"}}"
    unset NEW_CLIENT_SECRET

    Способ 2: использование kubectl edit

    Откройте Secret в редакторе по умолчанию и замените значение client-secret на новое значение, закодированное в base64.

    kubectl edit secret cpaas-oidc-secret -n cpaas-system
    TIP

    Вы можете заранее сгенерировать значение в base64-кодировке:

    read -rs NEW_CLIENT_SECRET
    echo
    printf %s "$NEW_CLIENT_SECRET" | base64
    unset NEW_CLIENT_SECRET

    Убедитесь, что Secret был обновлен в global cluster, не раскрывая открытый текст:

    NEW_SECRET_SHA256="$(kubectl get secret cpaas-oidc-secret -n cpaas-system \
      -o jsonpath='{.data.client-secret}' | base64 -d | openssl dgst -sha256 -r | awk '{print $1}')"
    echo "Updated client-secret SHA256: ${NEW_SECRET_SHA256}"
    test "${OLD_SECRET_SHA256}" != "${NEW_SECRET_SHA256}" && \
      echo "Verification passed: client-secret has changed."
    unset OLD_SECRET_SHA256 NEW_SECRET_SHA256

    Проверка состояния компонентов

    После обновления Secret base-operator автоматически синхронизирует его со всеми member clusters. Некоторые компоненты, зависящие от OIDC credential, будут перезапущены для загрузки нового значения. В частности, убедитесь, что deployments frontend и apollo работают нормально:

    kubectl get deploy -n cpaas-system frontend apollo

    Убедитесь, что все Pod находятся в состоянии READY и UP-TO-DATE. Завершение перезапуска может занять несколько минут.

    INFO

    Если компонент не запускается, убедитесь, что Secret cpaas-oidc-secret существует в namespace cpaas-system и содержит корректные значения client-id и client-secret.

    Откат

    Если после изменения Secret возникнут проблемы, восстановите предыдущее значение из резервной копии, созданной на Step 1:

    kubectl apply -f cpaas-oidc-secret-backup.yaml

    В качестве альтернативы, если вам известно предыдущее значение secret:

    read -rs PREVIOUS_CLIENT_SECRET
    echo
    kubectl patch secret cpaas-oidc-secret -n cpaas-system \
      --type merge \
      -p "{\"data\":{\"client-secret\":\"$(printf %s "$PREVIOUS_CLIENT_SECRET" | base64 | tr -d '\n')\"}}"
    unset PREVIOUS_CLIENT_SECRET

    После выполнения отката повторите verification steps, чтобы убедиться, что все компоненты работают нормально.