Şirket içinde barındırılan Python uygulamalarından Azure kaynaklarında kimlik doğrulaması

Azure dışında barındırılan uygulamalar (örneğin şirket içi veya üçüncü taraf veri merkezinde), Azure kaynaklarına erişirken Azure'da kimlik doğrulaması yapmak için bir uygulama hizmet sorumlusu kullanmalıdır. Uygulama hizmeti sorumlusu nesneleri, Azure'da uygulama kayıt işlemi kullanılarak oluşturulur. Uygulama hizmet sorumlusu oluşturulduğunda, uygulamanız için bir istemci kimliği ve istemci gizli dizisi oluşturulur. İstemci kimliği, istemci gizli anahtarı ve kiracı kimliğiniz daha sonra ortam değişkenlerinde depolanır, böylece python için Azure SDK'sı tarafından uygulamanızın çalışma zamanında Azure'da kimliğini doğrulamak için kullanılabilir.

Uygulamanın barındırılacağı her ortam için farklı bir uygulama kaydı oluşturulmalıdır. Bu, her hizmet sorumlusu için ortama özgü kaynak izinlerinin yapılandırılmasına olanak tanır ve bir ortama dağıtılan bir uygulamanın başka bir ortamın parçası olan Azure kaynaklarıyla konuşmamasını sağlar.

1 - Uygulamayı Azure'a kaydetme

Bir uygulama Azure portalı veya Azure CLI kullanılarak Azure'a kaydedilebilir.

az ad sp create-for-rbac --name <app-name>

Komutun çıkışı aşağıdakine benzer olacaktır. Bu değerleri not alın veya sonraki adımlarda bu değerlere ihtiyacınız olacağı ve parola (istemci gizli dizisi) değerini yeniden görüntüleyemeyeceğiniz için bu pencereyi açık tutun.

{
  "appId": "00000000-0000-0000-0000-000000000000",
  "displayName": "msdocs-python-sdk-auth-prod",
  "password": "abcdefghijklmnopqrstuvwxyz",
  "tenant": "33333333-3333-3333-3333-333333333333"
}

2 - Uygulama hizmet sorumlusuna rol atama

Ardından, uygulamanızın hangi kaynaklar üzerinde hangi rollere (izinlere) ihtiyacı olduğunu belirlemeniz ve bu rolleri uygulamanıza atamanız gerekir. Rollere kaynak, kaynak grubu veya abonelik kapsamında bir rol atanabilir. Bu örnekte, çoğu uygulama tüm Azure kaynaklarını tek bir kaynak grubunda gruplandırdığından kaynak grubu kapsamında hizmet sorumlusu için rollerin nasıl atandığı gösterilmektedir.

Azure'da az role assignment create komutu kullanılarak hizmet sorumlusuna bir rol atanır.

az role assignment create --assignee {appId} \
    --scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
    --role "{roleName}" 

Hizmet sorumlusunun atanabileceği rol adlarını almak için az role definition list komutunu kullanın.

az role definition list \
    --query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
    --output table

Örneğin, azure Depolama blob kapsayıcılarına 00000000-0000-0000-0000-000000000000 ve kimliğine 11111111-1111-1111-1111-111111111111sahip abonelikteki msdocs-python-sdk-auth-example kaynak grubundaki tüm depolama hesaplarındaki verilere okuma, yazma ve silme appId değeriyle hizmet sorumlusuna erişim izni vermek için aşağıdaki komutu kullanarak uygulama hizmet sorumlusunu Depolama Blob Veri Katkıda Bulunanı rolüne atayabilirsiniz.

az role assignment create --assignee 00000000-0000-0000-0000-000000000000 \
    --scope /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"

Azure CLI kullanarak kaynak veya abonelik düzeyinde izin atama hakkında bilgi için Azure CLI kullanarak Azure rolleri atama makalesine bakın.

3 - Uygulama için ortam değişkenlerini yapılandırma

Uygulama hizmeti sorumlusu kimlik bilgilerini çalışma zamanında uygulamanızın kullanımına açmak için Python uygulamanızı çalıştıran işlem için , AZURE_TENANT_IDve AZURE_CLIENT_SECRET ortam değişkenlerini ayarlamanız AZURE_CLIENT_IDgerekir. DefaultAzureCredential nesnesi, bu ortam değişkenlerinde hizmet sorumlusu bilgilerini arar.

Unix sunucu ortamında Python web uygulamalarını çalıştırmak için Gunicorn kullanılırken, bir uygulamanın ortam değişkenleri dosyada gunicorn.server aşağıda gösterildiği gibi yönergesi EnvironmentFile kullanılarak belirtilebilir.

[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

yönergesinde belirtilen dosya, EnvironmentFile aşağıda gösterildiği gibi değerlerini içeren bir ortam değişkenleri listesi içermelidir.

AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>

4 - Uygulamada DefaultAzureCredential uygulama

Azure SDK istemci nesnelerinin kimliğini Azure'da doğrulamak için uygulamanız paketteki DefaultAzureCredentialazure.identity sınıfını kullanmalıdır.

Uygulamanıza azure.identity paketini ekleyerek başlayın.

pip install azure-identity

Ardından, uygulamanızda bir Azure SDK istemci nesnesi oluşturan tüm Python kodları için şunları yapmak istersiniz:

  1. sınıfını DefaultAzureCredential modülden içeri aktarın azure.identity .
  2. Bir DefaultAzureCredential nesne oluşturun.
  3. DefaultAzureCredential Nesnesini Azure SDK istemci nesnesi oluşturucusna geçirin.

Bunun bir örneği aşağıdaki kod kesiminde gösterilmiştir.

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)

Yukarıdaki kod nesnesinin örneğini oluşturduğundaDefaultAzureCredential, DefaultAzureCredential ile Azure'a bağlanacak uygulama hizmeti sorumlusu bilgileri için , AZURE_CLIENT_IDve AZURE_CLIENT_SECRET ortam değişkenlerini AZURE_TENANT_IDokur.