Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Приложения, размещенные за пределами Azure (например, локально или в стороннем центре обработки данных), должны использовать основной объект службы приложения для аутентификации в Azure при доступе к ресурсам Azure. Объекты субъекта-службы приложений создаются с помощью процесса регистрации приложений в Azure. Создание нового служебного принципала приложения приводит к созданию идентификатора клиента и секрета клиента для вашего приложения. Вы сохраняете идентификатор клиента, секрет клиента и идентификатор клиента в переменных среды, которые будут использоваться пакетом SDK Azure для Python для проверки подлинности приложения в Azure во время выполнения.
Для каждой среды необходимо создать другую регистрацию приложения, в которой размещено приложение. Создание другой регистрации приложений позволяет настроить разрешения конкретного ресурса среды для каждого субъекта-службы и убедиться, что приложение, развернутое в одной среде, не разговаривает с ресурсами Azure, которые являются частью другой среды.
Регистрация приложения в Azure
Приложение можно зарегистрировать в Azure с помощью портал Azure или Azure CLI.
APP_NAME=<app-name>
az ad sp create-for-rbac --name $APP_NAME
Результаты команды аналогичны следующему примеру. Запишите эти значения или оставьте это окно открытым, так как вам потребуется эти значения в следующих шагах и не сможете снова просмотреть значение пароля (секрет клиента).
{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "msdocs-python-sdk-auth-prod",
"password": "Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6",
"tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
Затем необходимо получить appID значение и сохранить его в переменной. Это значение используется для настройки переменных окружения в вашей локальной среде разработки, чтобы пакет SDK Azure для Python мог проходить аутентификацию в Azure с помощью учетной записи службы.
APP_ID=$(az ad sp create-for-rbac \
--name $APP_NAME --query appId --output tsv)
Назначение ролей для служебного принципала приложения
Затем необходимо определить, какие роли (разрешения) приложения требуются для ресурсов и назначить эти роли приложению. Роли могут быть назначены на уровне ресурса, группы ресурсов или области подписки. В этом примере показано, как назначить роли для принципала службы на уровне группы ресурсов, поскольку почти все приложения группируют свои ресурсы Azure в одну группу ресурсов.
Служебный принципал назначается на роль в Azure с помощью команды az role assignment create.
RESOURCE_GROUP_NAME=<resource-group-name>
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
ROLE_NAME=<role-name>
az role assignment create \
--assignee "$APP_ID" \
--scope "./subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME" \
--role "$ROLE_NAME"
![!ПРИМЕЧАНИЕ] Чтобы предотвратить рассмотрение /subscriptions/... как путь к файлу, ставьте ./ перед строкой, используемой в параметре
scope, и используйте двойные кавычки вокруг всей строки.
Чтобы получить названия ролей, которые можно назначить служебному принципалу, используйте команду az role definition list.
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Например, чтобы разрешить субъект-службы с appId 00001111-aaaa-2222-bbbb-3333cccc4444 доступ к чтению, записи и удалению в контейнерах BLOB-объектов и данных в хранилище Azure во всех учетных записях хранения в группе ресурсов msdocs-python-sdk-auth-example в подписке с идентификатором aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e, вы назначите субъект-службы на роль участник данных BLOB-объектов хранилища с помощью следующей команды.
az role assignment create --assignee 00001111-aaaa-2222-bbbb-3333cccc4444 \
--scope "./subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example" \
--role "Storage Blob Data Contributor"
Сведения о назначении разрешений на уровне ресурса или подписки с помощью Azure CLI см. в статье "Назначение ролей Azure с помощью Azure CLI".
Настройка переменных среды для приложения
Необходимо задать переменные среды AZURE_CLIENT_ID, AZURE_TENANT_ID и AZURE_CLIENT_SECRET для процесса, запускающего ваше приложение Python, чтобы учетные данные участника службы приложения были доступны для приложения во время выполнения. Объект DefaultAzureCredential ищет информацию о главной службе в этих переменных среды.
При использовании Gunicorn для запуска веб-приложений Python в среде сервера UNIX переменные среды для приложения можно указать с помощью директивы EnvironmentFile в gunicorn.server. См. следующий пример.
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=www-user
Group=www-data
WorkingDirectory=/path/to/python-app
EnvironmentFile=/path/to/python-app/py-env/app-environment-variables
ExecStart=/path/to/python-app/py-env/gunicorn --config config.py wsgi:app
[Install]
WantedBy=multi-user.target
Файл, указанный в директиве EnvironmentFile , должен содержать список переменных среды со следующими значениями.
AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>
Реализация DefaultAzureCredential в приложении
Для проверки подлинности клиентских объектов Пакета SDK Azure в Azure приложение должно использовать DefaultAzureCredential класс из azure.identity пакета.
Начните с добавления пакета azure.identity в приложение.
pip install azure-identity
Затем для любого кода Python, создающего клиентский объект Azure SDK в приложении, необходимо:
-
DefaultAzureCredentialИмпортируйте класс изazure.identityмодуля. - Создание объекта
DefaultAzureCredential. - Передайте объект конструктору
DefaultAzureCredentialклиентского объекта пакета SDK Azure.
Пример этого подхода показан в следующем сегменте кода.
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Acquire a credential object
token_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url="https://<my_account_name>.blob.core.windows.net",
credential=token_credential)
В этом примере, когда код создает экземпляр объекта DefaultAzureCredential, DefaultAzureCredential считывает переменные среды AZURE_TENANT_ID, AZURE_CLIENT_ID, и AZURE_CLIENT_SECRET, чтобы подключаться к Azure, используя учетные данные субъект-службы приложения.