Получить Azure управляемую личность из функции - PullRequest
1 голос
/ 10 июля 2020

Я использую функцию Azure Managed Identity для своего python Azure Functions App и хотел бы иметь возможность получать назначенные на данный момент Client ID из самого приложения-функции.

Поиск в документации и azure-identity python исходники не дали результата, которого я ожидал.

Возможно, я мог бы:

  1. запросить Azure Instance Metadata Service сам, чтобы получить этот идентификатор. (не очень доволен этой опцией)
  2. Предоставьте его как env переменную на этапе развертывания ARM / или вручную позже. (кажется хорошим и эффективным, но не уверен, что здесь лучше всего)

ОБНОВЛЕНИЕ

Удалось заставить его работать с шаблоном ARM и переменной env

  1. Развертывает FunctionApp с системным идентификатором
  2. Предоставляет системный идентификатор как переменную env того же FunctionApp

Идея состоит в том, чтобы использовать подшаблон Microsoft.Resources/deployments для обновления приложения Function конфигурация с:

{
    "name": "AZURE_CLIENT_ID",
    "value": "[reference(resourceId('Microsoft.Web/sites', variables('appName')), '2019-08-01', 'full').identity.principalId]"
},

1 Ответ

0 голосов
/ 13 июля 2020

Самый простой вариант - это go перейти на вкладку идентификации вашего приложения с функциями и включить «Управляемую идентификацию, назначенную системой». Затем вы можете получить токен доступа без необходимости указывать client_id, поскольку запрос токена просто выбирает идентификатор, назначенный системой, если он существует для приложения-функции.

Если вы используете «управляемое удостоверение, назначенное пользователем», тогда вам нужно предоставить client_id: либо через env, либо непосредственно в вашем коде.

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

ваш вариант 1 (запрос Azure Служба метаданных экземпляра ), доступен только на виртуальных машинах.

ОБНОВЛЕНИЕ

Поскольку client_id нужен для других целей, вы также можете прочитать его из ответа на ваш запрос для токен доступа: client_id - это один из параметров токена JSON, возвращаемого вам по wi th токен доступа, и его значение - это client_id используемого вами управляемого удостоверения (в вашем случае, управляемое удостоверение, назначенное системой)

Вот пример ответа маркера, чтобы проиллюстрировать это:

 {
  access_token: <...>,
  resource: <...>,
  token_type: 'Bearer',
  client_id: <client_id of the managed identity used to get this token>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...