Yerel olarak barındırılan Python uygulamalarından Azure kaynaklarına kimlik doğrulaması

Şirket içi veya üçüncü taraf veri merkezi gibi Azure dışında barındırılan uygulamalar, Azure hizmetlerde kimlik doğrulaması yapmak için Microsoft Entra ID aracılığıyla bir uygulama hizmet sorumlusu kullanmalıdır. İlerideki bölümlerde şunları öğrenirsiniz:

  • Microsoft Entra ile bir hizmet ilkesi oluşturmak için uygulamayı kaydetme
  • Kapsam izinlerine roller atama
  • Uygulama kodunuzdan hizmet ilkesi kullanarak kimlik doğrulaması yapma

Ayrılmış uygulama hizmet sorumlularını kullanmak, Azure kaynaklara erişirken en az ayrıcalık ilkesine uymanızı sağlar. İzinler, geliştirme sırasında uygulamanın belirli gereksinimleriyle sınırlıdır ve diğer uygulamalar veya hizmetler için amaçlanan Azure kaynaklara yanlışlıkla erişimi önler. Bu yaklaşım, uygulama geliştirme ortamında aşırı ayrıcalıklı olmadığından emin olarak üretime taşındığında karşılaşılan sorunları önlemeye de yardımcı olur.

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 kaynaklarla konuşmadığından emin olun.

Uygulamayı Azure'a kaydetme

Azure'da bir uygulama kaydı üzerinden uygulama hizmet sorumlusu nesneleri, Azure portalı veya Azure CLI kullanılarak oluşturulur.

  1. Azure portalında arama çubuğunu kullanarak App registrations sayfasına gidin.

  2. App registrations sayfasında + Yeni kayıt'i seçin.

  3. Uygulamayı kaydetme sayfasında:

    • Adı alanı için uygulama adını ve hedef ortamı içeren açıklayıcı bir değer girin.
    • Desteklenen hesap türleri için yalnızca bu kuruluş dizinindeki hesaplar (Yalnızca Microsoft Müşteri Liderliğinde - Tek kiracı) veya gereksinimlerinize en uygun seçeneğiseçin.
  4. Uygulamanızı kaydetmek ve hizmet sorumlusunu oluşturmak için Kaydet seçin.

     Azure portalında uygulama kaydının nasıl oluşturulacağını gösteren ekran görüntüsü.

  5. Uygulamanızın Uygulama kaydı sayfasında Uygulama (istemci) kimliği ve Dizin (kiracı) kimliği kopyalayın ve bunları uygulama kodu yapılandırmalarınızda daha sonra kullanmak üzere geçici bir konuma yapıştırın.

  6. Uygulamanızın kimlik bilgilerini ayarlamak için Sertifika veya gizli dizi ekle'yi seçin.

  7. Sertifikalar ve gizli anahtarlar sayfasında + Yeni istemci gizli anahtar'ı seçin.

  8. İstemci sırrı ekle panosunda açılan panelde:

    • Açıklamaiçin Geçerli değerini girin.
    • Süresi Doluyor değeri için varsayılan önerilen 180 gün değerini bırakın.
    • Sırrı eklemek için Ekle'yi seçin.
  9. Sertifikalar & gizli anahtarları sayfasında, istemci gizli anahtarının Değer özelliğini gelecekte kullanmak üzere kopyalayın.

    Uyarı

    İstemci gizli anahtarı değeri, uygulama kaydı oluşturulduktan sonra yalnızca bir kez görüntülenir. Bu istemci sırrını geçersiz kılmadan daha fazla istemci sırrı ekleyebilirsiniz; ancak bu değeri yeniden görüntüleyebilmenin bir yolu yoktur.

Uygulama hizmet sorumlusuna rol atama

Ardından, uygulamanızın hangi kaynaklar üzerinde hangi rollere (izinlere) ihtiyacı olduğunu belirleyin ve bu rolleri oluşturduğunuz hizmet sorumlusuna atayın. Roller kaynak, kaynak grubu veya abonelik kapsamında atanabilir. Bu örnekte, çoğu uygulama tüm Azure kaynaklarını tek bir kaynak grubunda gruplandırdığından kaynak grubu kapsamında rollerin nasıl atandığı gösterilmektedir.

  1. Azure portalında, uygulamanızı içeren kaynak grubunun Overview sayfasına gidin.

  2. Sol gezinti bölmesinden Erişim denetimi (IAM) seçin.

  3. Erişim denetimi (IAM) sayfasında + Ekle'yi ve ardından açılan menüden Rol ataması ekle'yi seçin. Rol ataması ekle sayfasında rolleri yapılandırmak ve atamak için birkaç sekme bulunur.

  4. Rol sekmesinde, atamak istediğiniz rolü bulmak için arama kutusunu kullanın. Rolü seçin ve ardından İleri'yi seçin.

  5. Üyeler sekmesinde:

    • Değere erişim ata için Kullanıcı, grup veya hizmet sorumlusu öğesini seçin.
    • Üyeler değeri için + Üyeleri seç'i seçerek Üyeleri seçin açılır penceresini açın.
    • Daha önce oluşturduğunuz hizmet sorumlusunu arayın ve filtrelenen sonuçlardan seçin. Grubu seçmek ve açılır menü panelini kapatmak için Seç'i seçin.
    • Gözden Geçir ve Ata'yı, Üyeler sekmesinin alt kısmında seçin.

    Hizmet sorumlusuna rol atamayı gösteren ekran görüntüsü.

  6. Gözden geçir ve ata sekmesinde, sayfanın alt kısmında Gözden geçir ve ata seçeneğini seçin.


Uygulama ortamı değişkenlerini ayarlama

Çalışma zamanında, Azure Identity kitaplığı'ndan bazı kimlik bilgileri, örneğin DefaultAzureCredential, EnvironmentCredential ve ClientSecretCredential, ortam değişkenlerinde hizmet sorumlusu bilgilerini kurala göre arar. Araçlarınıza ve ortamınıza bağlı olarak, Python ile çalışırken ortam değişkenlerini yapılandırmanın birden çok yolu vardır.

Seçtiğiniz yaklaşımdan bağımsız olarak, hizmet sorumlusu için aşağıdaki ortam değişkenlerini yapılandırın:

  • AZURE_CLIENT_ID: Azure'da kayıtlı uygulamayı tanımlamak için kullanılır.
  • AZURE_TENANT_ID: Microsoft Entra kiracısının ID'si.
  • AZURE_CLIENT_SECRET: Uygulama için oluşturulan gizli kimlik bilgisi.

Visual Studio Code ortam değişkenleri, projenizin launch.json klasöründe bulunan .vscode dosyasında ayarlanabilir. Bu değerler uygulama başlatıldığında otomatik olarak çekilir. Ancak bu yapılandırmalar dağıtım sırasında uygulamanızla birlikte hareket etmediğinden, hedef barındırma ortamınızda ortam değişkenleri ayarlamanız gerekir.

{
    "configurations": [
        {
            "env": {
                "AZURE_CLIENT_ID": "<your-client-id>",
                "AZURE_TENANT_ID": "<your-tenant-id>",
                "AZURE_CLIENT_SECRET": "<your-client-secret>"
            }
        }
    ]
}

Uygulamanızdan Azure hizmetleri için kimlik doğrulaması

azure-identity kitaplığı, farklı senaryoları ve Microsoft Entra kimlik doğrulama akışlarını destekleyebilmek için uyarlanmış çeşitli kimlik bilgilerini sunar. Önümüzdeki adımlarda, hizmet sorumlularıyla yerel olarak ve üretimde çalışırken ClientSecretCredential'ın nasıl kullanılacağı gösterilmektedir.

Kodu uygulama

Paketi uygulamanıza 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ı yapmalısınız:

  1. ClientSecretCredential sınıfını azure.identity modülünden içeri aktarın.
  2. os Ortam değişkenlerini okumak için modülü içeri aktarın.
  3. İstemci kimliğini, tenant ID'yi ve istemci gizli anahtarını almak için ortam değişkenlerini okuyun.
  4. Kiracı kimliğini, istemci kimliğini ve istemci gizli dizisini geçiren bir ClientSecretCredential nesne oluşturun.
  5. ClientSecretCredential nesnesini Azure SDK istemci nesnesi oluşturucusna geçirin.

Bu yaklaşımın bir örneği aşağıdaki kod kesiminde gösterilmiştir.

import os
from azure.identity import ClientSecretCredential
from azure.storage.blob import BlobServiceClient

tenant_id = os.environ.get("AZURE_TENANT_ID")
client_id = os.environ.get("AZURE_CLIENT_ID")
client_secret = os.environ.get("AZURE_CLIENT_SECRET")

credential = ClientSecretCredential(tenant_id, client_id, client_secret)

blob_service_client = BlobServiceClient(
    account_url="https://<my_account_name>.blob.core.windows.net",
    credential=credential)