Использование Azure Web App для контейнеров с управляемым удостоверением

Развернул службу приложений Azure для контейнеров с пользовательским образом (из базового образа Centos 7). На основе следующей документации Существует переменная среды, которая должна быть установлена ​​Azure и использоваться для создания запроса REST API для получения токена доступа:

  • IDENTITY_ENDPOINT – URL-адрес локальной службы токенов.

Однако при проверке внутри контейнера эта переменная не устанавливается:

[root@f22dfd74be31 ~]# echo $IDENTITY_ENDPOINT
(empty result here)

Я также пытался вызвать az cli, что также не удалось:

[root@f22dfd74be31 ~]# az login -i
AzureConnectionError: Failed to connect to MSI. Please make sure MSI is configured correctly 
and check the network connection.
Error detail: HTTPConnectionPool(host='169.254.169.254', port=80): Max retries exceeded with 
url: /metadata/identity/oauth2/token?resource=https%3
A%2F%2Fmanagement.core.windows.net%2F&api-version=2018-02-01 (Caused by 
NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f9e0c4
c72e8>: Failed to establish a new connection: [Errno 110] Connection timed out',))

Я успешно использовал управляемое удостоверение как с виртуальными машинами, так и со службой приложений (развертывание кода, а не с контейнерами). Поддерживается ли оно службой приложений для контейнеров с настраиваемыми контейнерами?

да поддерживается, но не в GA azure.microsoft.com/en-us/blog/…

Sajeetharan 26.12.2020 04:52

@Sajeetharan, этому сообщению в блоге более двух лет;) Я считаю, что оно должно быть GA и работать. Так что вам, вероятно, следует открыть дело поддержки, если это возможно.

silent 26.12.2020 12:31

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

Setec Astronomy 26.12.2020 18:30
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
2
3
1 762
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Он должен поддерживать MSI, убедитесь, что вы включили MSI, как показано ниже.

Кроме того, в шаге 4 в этом документе также упоминается команда CLI для включения MSI.

az webapp identity assign --resource-group AppSvc-DockerTutorial-rg --name <app-name> --query principalId --output tsv

Как говорится в вопросе, в прошлом я настраивал MI как с виртуальными машинами, так и со службой приложений (код), поэтому я знаю, как установить систему и управляемую пользователем идентификацию. проблема в том, что переменная среды IDENTITY_ENDPOINT не экспортируется внутри пользовательского контейнера. Он также указан на вкладке «Среда» инструментов Advances (Kudo), но опять же не распространяется внутри контейнера.

Setec Astronomy 28.12.2020 17:11
Ответ принят как подходящий

При работе со службой приложений для контейнеров переменные среды "платформа", включая управляемое удостоверение и параметры приложения, доступны только при инициализации контейнера. Чтобы сделать эти переменные доступными из контейнера, в сценарий запуска контейнера необходимо включить следующую строку (вызывается из Dockerfile ENTRYPOINT):

eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/g' | sed '/=/s// = "/' | sed 's/$/"/' >> /etc/profile)

О, чувак, это спасение, потратьте несколько дней, пытаясь понять это, и это отлично работает!

ulath 27.04.2022 11:46

Эй, можете ли вы объяснить, где именно должна быть размещена команда eval в ответе? Я создал скрипт run.sh (используемый как ENTRYPOINT в моем файле докеров), где первая строка — это команда выше, а следующая строка — моя исполняемая команда запуска. Это верно? Кажется, это не решает ошибку 400 из конечной точки /msi/token для меня.

jamyspex 09.03.2023 21:30

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