Python için Azure SDK ile Azure'da barındırılan uygulamaların Azure kaynaklarına kimliğini doğrulama
Azure'da bir uygulamayı Azure Uygulaması Hizmeti, Azure Sanal Makineler veya Azure Container Instances gibi hizmetleri kullanarak barındırdığınızda, azure kaynaklarına yönelik bir uygulamanın kimliğini doğrulamak için önerilen yaklaşım yönetilen kimliktir.
Yönetilen kimlik, gizli anahtar veya başka bir uygulama gizli dizisi kullanmaya gerek kalmadan diğer Azure kaynaklarına bağlanabilecek şekilde uygulamanız için bir kimlik sağlar. Azure, uygulamanızın kimliğini ve bağlanmasına izin verilen kaynakları dahili olarak bilir. Azure, uygulama gizli dizilerini yönetmek zorunda kalmadan uygulamanın diğer Azure kaynaklarına bağlanmasına izin vermek üzere otomatik olarak Microsoft Entra belirteçlerini almak için bu bilgileri kullanır.
Not
Azure Kubernetes Service (AKS) üzerinde çalışan uygulamalar, Azure kaynaklarıyla kimlik doğrulaması yapmak için bir iş yükü kimliği kullanabilir. AKS'de iş yükü kimliği, yönetilen kimlik ile Kubernetes hizmet hesabı arasındaki güven ilişkisini temsil eder. AKS'ye dağıtılan bir uygulama böyle bir ilişkide Kubernetes hizmet hesabıyla yapılandırılırsa, DefaultAzureCredential
yönetilen kimliği kullanarak uygulamanın Kimliğini Azure'da doğrular. İş yükü kimliği kullanarak kimlik doğrulaması, Azure Kubernetes Service ile Microsoft Entra İş Yükü Kimliği kullanma bölümünde ele alınmaktadır. İş yükü kimliğini yapılandırma adımları için bkz . Azure Kubernetes Service (AKS) kümesinde iş yükü kimliğini dağıtma ve yapılandırma.
Yönetilen kimlik türleri
İki tür yönetilen kimlik vardır:
- Sistem tarafından atanan yönetilen kimlikler - Bu tür yönetilen kimlikler tarafından sağlanır ve doğrudan bir Azure kaynağına bağlanır. Bir Azure kaynağında yönetilen kimliği etkinleştirdiğinizde, bu kaynak için sistem tarafından atanan bir yönetilen kimlik alırsınız. Sistem tarafından atanan yönetilen kimlik, ilişkili olduğu Azure kaynağının yaşam döngüsüne bağlıdır. Kaynak silindiğinde Azure sizin için kimliği otomatik olarak siler. Tek yapmanız gereken kodunuzu barındıran Azure kaynağı için yönetilen kimliği etkinleştirmek olduğundan, bu yaklaşım en kolay yönetilen kimlik türüdür.
- Kullanıcı tarafından atanan yönetilen kimlikler - Yönetilen kimliği tek başına Azure kaynağı olarak da oluşturabilirsiniz. Bu yaklaşım en sık çözümünüzde aynı kimliği ve aynı izinleri paylaşması gereken birden çok Azure kaynağı üzerinde çalışan birden çok iş yükü olduğunda kullanılır. Örneğin, çözümünüzde aynı Azure kaynakları kümesine erişmesi gereken birden çok App Service ve sanal makine örneğinde çalışan bileşenler varsa, bu kaynaklar arasında kullanılan kullanıcı tarafından atanan yönetilen kimlik mantıklıdır.
Bu makale, bir uygulama için sistem tarafından atanan yönetilen kimliği etkinleştirme ve kullanma adımlarını kapsar. Kullanıcı tarafından atanan yönetilen kimlik kullanmanız gerekiyorsa, kullanıcı tarafından atanan yönetilen kimliğin nasıl oluşturulacağını görmek için Kullanıcı tarafından atanan yönetilen kimlikleri yönetme makalesine bakın.
1 - Uygulamayı barındıran Azure kaynağında yönetilen kimliği etkinleştirme
İlk adım, uygulamanızı barındıran Azure kaynağında yönetilen kimliği etkinleştirmektir. Örneğin, Azure Uygulaması Hizmeti'ni kullanarak bir Django uygulaması barındırılıyorsa, uygulamanızı barındıran App Service web uygulaması için yönetilen kimliği etkinleştirmeniz gerekir. Uygulamanızı barındırmak için bir sanal makine kullanıyorsanız VM'nizin yönetilen kimliği kullanmasını sağlayabilirsiniz.
Yönetilen kimliğin Azure portalı veya Azure CLI kullanarak Bir Azure kaynağı için kullanılmasını etkinleştirebilirsiniz.
Azure CLI komutları Azure Cloud Shell'de veya Azure CLI yüklü bir iş istasyonunda çalıştırılabilir.
Bir Azure kaynağı için yönetilen kimliği etkinleştirmek için kullanılan Azure CLI komutları biçimindedir az <command-group> identity --resource-group <resource-group-name> --name <resource-name>
. Popüler Azure hizmetleri için belirli komutlar aşağıda gösterilmiştir.
az webapp identity assign --resource-group <resource-group-name> -name <web-app-name>
Çıkış aşağıdaki gibi görünür.
{
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned",
"userAssignedIdentities": null
}
principalId
Değer, yönetilen kimliğin benzersiz kimliğidir. Sonraki adımda bu değerlere ihtiyaç duyacağınız için bu çıkışın bir kopyasını saklayın.
2 - Yönetilen kimliğe rol atama
Ardından, uygulamanızın hangi rollere (izinlere) ihtiyacı olduğunu belirlemeniz ve yönetilen kimliği Azure'daki bu rollere atamanız gerekir. Yönetilen kimliğe kaynak, kaynak grubu veya abonelik kapsamında roller 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.
Azure'da az role assignment create komutu kullanılarak yönetilen kimliğe bir rol atanır. Atanan için, 1. adımda kopyaladığınız öğesini kullanın principalId
.
az role assignment create --assignee <managedIdentityprincipalId> \
--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, kimliği olan 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 kimliğine aaaaaaaa-bbbb-cccc-1111-222222222222
sahip aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
yönetilen kimliğe izin vermek için aşağıdaki komutu kullanarak uygulama hizmet sorumlusunu Depolama Blobu Veri Katkıda Bulunanı rolüne atayabilirsiniz.
az role assignment create --assignee aaaaaaaa-bbbb-cccc-1111-222222222222 \
--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 - Uygulamanızda DefaultAzureCredential uygulama
Kodunuz Azure'da çalıştırıldığında ve uygulamanızı barındıran Azure kaynağında yönetilen kimlik etkinleştirildiğinde, DefaultAzureCredential
aşağıdaki sırayla kullanılacak kimlik bilgilerini belirler:
- , ve
AZURE_CLIENT_SECRET
veya veyaAZURE_CLIENT_CERTIFICATE_PATH
(isteğe bağlı)AZURE_CLIENT_CERTIFICATE_PASSWORD
ortam değişkenleriAZURE_CLIENT_ID
AZURE_TENANT_ID
tarafından tanımlanan hizmet sorumlusunun ortamını denetleyin. - Kullanıcı tarafından atanan yönetilen kimlik için anahtar sözcük parametrelerini denetleyin. Kullanıcı tarafından atanan yönetilen kimliği parametresinde
managed_identity_client_id
istemci kimliğini belirterek geçirebilirsiniz. AZURE_CLIENT_ID
Kullanıcı tarafından atanan yönetilen kimliğin istemci kimliği için ortam değişkenini denetleyin.- Azure kaynağı etkinse sistem tarafından atanan yönetilen kimliği kullanın.
anahtar sözcük parametresini True
ayarlayarak yönetilen kimlikleri exclude_managed_identity_credential
kimlik bilgilerinin dışında tutabilirsiniz.
Bu makalede, bir Azure Uygulaması Hizmeti web uygulaması için sistem tarafından atanan yönetilen kimliği kullanıyoruz, bu nedenle ortamda yönetilen kimlik yapılandırmamız veya bunu parametre olarak geçirmemiz gerekmez. Aşağıdaki adımlarda nasıl kullanılacağı gösterilmektedir DefaultAzureCredential
.
İlk olarak paketi uygulamanıza ekleyin azure.identity
.
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.
Aşağıdaki kod kesiminde bu adımlara bir örnek 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)
Python için Azure SDK kimlik doğrulamasına genel bakış makalesinde açıklandığı gibi, DefaultAzureCredential
birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında kullanılan kimlik doğrulama yöntemini belirler. Bu yaklaşımın avantajı, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda farklı kimlik doğrulama yöntemleri kullanabilmesidir. Yerel geliştirme sırasında iş istasyonunuzda yukarıdaki kod çalıştırıldığında, DefaultAzureCredential
ortam ayarları tarafından belirlenen bir uygulama hizmet sorumlusu veya diğer Azure kaynaklarıyla kimlik doğrulaması yapmak için geliştirici aracı kimlik bilgileri kullanılır. Bu nedenle, hem yerel geliştirme sırasında hem de Azure'a dağıtıldığında uygulamanızın Kimliğini Azure kaynaklarına doğrulamak için aynı kod kullanılabilir.