Как я могу найти главный сервисный секрет моего кластера AKS?

Хорошо, так что я перепутал, я случайно побежал az ad sp reset-credentials против сервис-принципала, под которым работает наш кластер AKS. И теперь мы получаем ошибки, такие как:

Ошибка создания балансировщика нагрузки (повторная попытка): ошибка при получении LB для теста службы /admin-api: azure.BearerAuthorizer#WithAuthorization: не удалось обновить токен для запроса к https://management.azure.com/subscriptions/**** /resourceGroups/MC_****/providers/Microsoft.Network/loadBalancers?api-version=2017-09-01: StatusCode = 0 - Исходная ошибка: adal: сбой запроса на обновление. Код состояния = "401". Тело ответа: {"error":"invalid_client","error_description":"AADSTS70002: Ошибка при проверке учетных данных. AADSTS50012: Предоставлен неверный секретный ключ клиента.\ R \nTrace ID:****\r\n Корреляционный идентификатор:**** \r\nTimestamp: 2018-08-23 12:01:33Z","error_codes":[70002,50012],"timestamp":"2018-08-23 12:01:33Z","trace_id":"****","correlation_id":"****"}

а также

Не удалось получить изображение "****. Azurecr.io/****:****": ошибка rpc: code = Unknown desc = Ответ об ошибке от демона: Получить https://****.azurecr.io/v2/****/ манифесты / ****: не авторизован: требуется аутентификация

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

Есть идеи?

4 ответа

Решение

В конце концов решение было довольно простым.

  • На портале Azure перейдите к группе ресурсов с именем MC_<resourcegroup>_<aksName>_<region>,
  • Нажмите на один из ресурсов типа "Виртуальная машина".
  • Прокрутите вниз до "Выполнить команду"

Команда запуска

  • Выберите "RunShellScript"
  • Войти cat /etc/kubernetes/azure.json и нажмите "Выполнить"

Команда вернет содержимое файла JSON. Имущество, которое вам нужно aadClientSecret

Кто бы ни сталкивался с этой проблемой, есть обновленное решение от Microsoft.

https://docs.microsoft.com/en-us/azure/aks/update-credentials

Они также упоминают (что не очевидно) следующее:По умолчанию кластеры AKS создаются с субъектом службы, срок действия которого составляет один год.

Кроме того, начиная с Azure CLI 2.0.68 параметр --password для создания субъекта-службы с паролем, определяемым пользователем, больше не поддерживается, чтобы предотвратить случайное использование слабых паролей. поэтому первоначальное решение по изменению пароля субъекта-службы больше не работает.

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

Во-первых, вы должны выяснить субъект обслуживания вашего реестра контейнеров. Вы можете сделать это на портале Azure и перейти к панели реестра, затем вы можете найти субъект службы следующим образом:

введите описание изображения здесь

Или вы можете использовать команду Azure CLI, чтобы найти идентификатор реестра следующим образом:

az acr show --resource-group groupName --name registryName --query id --output tsv

Затем используйте команду, чтобы найти идентификатор участника службы следующим образом:

az role assignment list --scope registryID

Вы можете выбрать сервисный принципал, который вы хотите.

Тогда вы получите все секреты с командой kubectl get secrets а также kubectl get secrets secretName -o yaml чтобы получить знак секрета. Затем проанализируйте один за другим, чтобы проверить, совпадает ли имя пользователя с идентификатором участника службы. Вы можете использовать такие инструменты, как JWT для анализа секретного токена. Результат будет таким:

введите описание изображения здесь

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

Кстати, кажется, что вы можете просто увидеть пароль участника службы один раз при его создании. Лазурь не покажет вам снова. Но если вы создаете секрет Kubernetes, пароль хранится в нем.

На портале Azure доступны новые функции, позволяющие просматривать конфигурацию кластера без использования интерфейса командной строки. Перейдите на портал Azure -> Ресурс вашего кластера -> Обзор.

С правой стороны есть кнопка с надписью «Просмотр JSON». Щелкните по нему, и вы увидите файл json с деталями кластера. Идентификатор участника службы отображается в разделе "servicePrincipalProfile".

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