пятница, 12 декабря 2025 г.

Distribution не работает через workload identity в Azure

 Довольно долго провозился с настройкой distribution в Azure через workload identity в AKS который не хотел работать.

Сама настройка простая:

  • аннотация на сервис аккаунт в кластере (azure.workload.identity/client-id)
  • метка на под (azure.workload.identity/use: "true")
  • настроить конфигурацию в distribution
    storage:
      azure:
        accountname: accountname
        container: containername
        credentials:
          type: default_credentials
    

Но в лог валится ошибка "403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature."

time="2025-12-12T13:31:49.16984327Z" level=error msg="storage driver health check: azure: HEAD https://redacted.blob.core.windows.net/distribution//\n----------------------------… 403: 403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.\nERROR CODE: AuthenticationFailed\n--------------------------------------------------------------------------------\nResponse contained no body\n--------------------------------------------------------------------------------\n" go.version=go1.23.7 instance.id=bad30917-c9bb-4ba6-a309-dc45e3ca5910 service=registry version=3.0.0

Заменил образ на mcr.microsoft.com/azure-cli, зашёл в под и просмотрел список блобов в нужном сторадж аккаунте. Никаких проблем не возникло, а значит workload identity настроен правильно.

В issues нашёлся #4618 (Azure storage driver default_credentials don't work with Workload Identity) который описывает идентичную проблему, но он был закрыт ещё в начале апреля.

При этом авторизация через shared key работает. Причём даже в странной комбинации настроек

storage:
  azure:
    accountname: accountname
    accountkey: accountkey
    container: containername
    credentials:
      type: default_credentials

Т.е. при таком раскладе должно использовать workload identity, но по факту использует shared key. 

Полез смотреть в код и заметил что функция newClient() в релизе 3.0.0 не содержит исправление для #4618. Заменил тег с 3.0.0 на edge и всё заработало.

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

Комментариев нет:

Отправить комментарий