Ş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": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "msdocs-python-sdk-auth-prod",
"password": "Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6",
"tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
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, kimlikli aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
abonelikteki msdocs-python-sdk-auth-example kaynak grubundaki tüm depolama hesaplarındaki Azure Depolama blob kapsayıcılarına ve verilerine okuma, yazma ve silme appId 00001111-aaaa-2222-bbbb-3333cccc4444
değeriyle hizmet sorumlusuna izin vermek için aşağıdaki komutu kullanarak uygulama hizmet sorumlusunu Depolama Blob Verileri Katkıda Bulunanı rolüne atayabilirsiniz.
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 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_ID
ve AZURE_CLIENT_SECRET
ortam değişkenlerini ayarlamanız AZURE_CLIENT_ID
gerekir. 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 DefaultAzureCredential
azure.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:
- sınıfını
DefaultAzureCredential
modülden içeri aktarınazure.identity
. - Bir
DefaultAzureCredential
nesne oluşturun. 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_ID
ve AZURE_CLIENT_SECRET
ortam değişkenlerini AZURE_TENANT_ID
okur.