App Service ve Azure İşlevleri için yönetilen kimlikleri kullanma
Makale
Not
1 Haziran 2024'den itibaren, yeni oluşturulan tüm App Service uygulamaları adlandırma kuralını <app-name>-<random-hash>.<region>.azurewebsites.netkullanarak benzersiz bir varsayılan ana bilgisayar adı oluşturma seçeneğine sahip olacaktır. Mevcut uygulama adları değişmeden kalır.
Bu makalede, App Service ve Azure İşlevleri uygulamaları için yönetilen kimlik oluşturma ve bunu diğer kaynaklara erişmek için kullanma adımları gösterilmektedir.
Microsoft Entra Id'den yönetilen kimlik, uygulamanızın Azure Key Vault gibi diğer Microsoft Entra korumalı kaynaklara kolayca erişmesini sağlar. Kimlik Azure platformu tarafından yönetilir ve herhangi bir gizli dizi sağlamanızı veya döndürmenizi gerektirmez. Microsoft Entra Id'deki yönetilen kimlikler hakkında daha fazla bilgi için bkz . Azure kaynakları için yönetilen kimlikler.
Uygulamanız için iki tür kimlik verilebilir:
Sistem tarafından atanan bir kimlik uygulamaya bağlıdır ve uygulama silinirse silinir. Bir uygulama sistem tarafından atanan yalnızca bir kimliğe sahip olabilir.
Kullanıcı tarafından atanan kimlik ise uygulamanıza atanabilen tek başına bir Azure kaynağıdır. Bir uygulamada birden çok kullanıcı tarafından atanan kimlik olabilir ve iki App Service uygulaması gibi birden çok Azure kaynağına kullanıcı tarafından atanan bir kimlik atanabilir.
Yönetilen kimlik yapılandırması yuvaya özgüdür. Portalda bir dağıtım yuvası için yönetilen kimlik yapılandırmak için önce yuvaya gidin. Azure portalından Microsoft Entra kiracınızda web uygulamanızın veya dağıtım yuvanızın yönetilen kimliğini bulmak için, bunu doğrudan kiracınızın Genel Bakış sayfasından arayın. Genellikle yuva adı ile <app-name>/slots/<slot-name>benzerdir.
Bu videoda, App Service için yönetilen kimliklerin nasıl kullanılacağı gösterilmektedir.
Videodaki adımlar aşağıdaki bölümlerde de açıklanmıştır.
Azure Kaynak Yöneticisi şablonu, Azure kaynaklarınızın dağıtımını otomatikleştirmek için kullanılabilir. App Service ve İşlevler'e dağıtma hakkında daha fazla bilgi edinmek için bkz. App Service'te kaynak dağıtımlarını otomatikleştirme ve Azure İşlevleri kaynak dağıtımlarını otomatikleştirme.
Türdeki Microsoft.Web/sites herhangi bir kaynak, kaynak tanımına aşağıdaki özellik dahil edilerek bir kimlikle oluşturulabilir:
"identity": {
"type": "SystemAssigned"
}
Sistem tarafından atanan türü eklemek, Azure'a uygulamanız için kimlik oluşturmasını ve yönetmesini söyler.
Örneğin, bir web uygulamasının şablonu aşağıdaki JSON gibi görünebilir:
tenantId özelliği, kimliğin hangi Microsoft Entra kiracısına ait olduğunu tanımlar. principalId, uygulamanın yeni kimliği için benzersiz bir tanımlayıcıdır. Microsoft Entra Id içinde hizmet sorumlusu, App Service'inize veya Azure İşlevleri örneğine vermiş olduğunuz adla aynı ada sahiptir.
Şablonun sonraki bir aşamasında bu özelliklere başvurmanız gerekiyorsa, bu örnekte olduğu gibi bayrağıyla 'Full' şablon işlevi aracılığıyla reference() bunu yapabilirsiniz:
Kullanıcı tarafından atanan kimlikle uygulama oluşturmak için, kimliği oluşturmanız ve ardından kaynak tanımlayıcısını uygulama yapılandırmanıza eklemeniz gerekir.
Azure Kaynak Yöneticisi şablonu, Azure kaynaklarınızın dağıtımını otomatikleştirmek için kullanılabilir. App Service ve İşlevler'e dağıtma hakkında daha fazla bilgi edinmek için bkz. App Service'te kaynak dağıtımlarını otomatikleştirme ve Azure İşlevleri kaynak dağıtımlarını otomatikleştirme.
Kaynak tanımına aşağıdaki bloğu ekleyerek türündeki Microsoft.Web/sites herhangi bir kaynak bir kimlikle oluşturulabilir ve yerine <resource-id> istenen kimliğin kaynak kimliği eklenebilir:
Bir uygulama hem sistem tarafından atanan hem de kullanıcı tarafından atanan kimliklere aynı anda sahip olabilir. Bu durumda özelliği type şu şekilde olur: SystemAssigned,UserAssigned
Kullanıcı tarafından atanan türün eklenmesi, Azure'a uygulamanız için belirtilen kullanıcı tarafından atanan kimliği kullanmasını bildirir.
Örneğin, bir web uygulamasının şablonu aşağıdaki JSON gibi görünebilir:
principalId, Microsoft Entra yönetimi için kullanılan kimliğin benzersiz tanımlayıcısıdır. clientId, uygulamanın çalışma zamanı çağrıları sırasında hangi kimliğin kullanılacağını belirtmek için kullanılan yeni kimliği için benzersiz bir tanımlayıcıdır.
Hedef kaynağı yapılandırma
Uygulama veya işlevinizden erişime izin vermek için hedef kaynağı yapılandırmanız gerekebilir. Örneğin, Key Vault'a erişmek için bir belirteç isterseniz, uygulamanızın veya işlevinizin yönetilen kimliğini içeren bir erişim ilkesi de eklemeniz gerekir. Aksi takdirde, geçerli bir belirteç kullansanız bile Key Vault'a yaptığınız çağrılar reddedilir. Aynı durum Azure SQL Veritabanı için de geçerlidir. Microsoft Entra belirteçlerini destekleyen kaynaklar hakkında daha fazla bilgi edinmek için bkz . Microsoft Entra kimlik doğrulamasını destekleyen Azure hizmetleri.
Önemli
Yönetilen kimlikler için arka uç hizmetleri, yaklaşık 24 saat boyunca kaynak URI'sine göre bir önbellek tutar. Bu, yönetilen kimliğin grubundaki veya rol üyeliğindeki değişikliklerin etkili olması birkaç saat sürebileceği anlamına gelir. Bugün, yönetilen kimliğin belirtecini süresi dolmadan önce yenilenmeye zorlamak mümkün değildir. İzin eklemek veya kaldırmak için yönetilen kimliğin grup veya rol üyeliğini değiştirirseniz, bu nedenle kimliği kullanan Azure kaynağının doğru erişime sahip olması için birkaç saat beklemeniz gerekebilir. Grupların veya rol üyeliklerinin alternatifleri için bkz . Yetkilendirme için yönetilen kimlikleri kullanma sınırlaması.
Uygulama kodunda Azure hizmetlerine bağlanma
Yönetilen kimliğiyle, bir uygulama Azure SQL Veritabanı, Azure Key Vault ve Azure Depolama gibi Microsoft Entra Id ile korunan Azure kaynakları için belirteçler alabilir. Bu belirteçler kaynağa erişen uygulamayı temsil eder ve uygulamanın belirli bir kullanıcısını temsil eder.
App Service ve Azure İşlevleri, belirteç alma için dahili olarak erişilebilir bir REST uç noktası sağlar. REST uç noktasına, her dilde genel bir HTTP istemcisiyle uygulanabilen standart bir HTTP GET ile uygulamanın içinden erişilebilir. .NET, JavaScript, Java ve Python için Azure Identity istemci kitaplığı bu REST uç noktası üzerinde bir soyutlama sağlar ve geliştirme deneyimini basitleştirir. Diğer Azure hizmetlerine bağlanmak, hizmete özgü istemciye kimlik bilgisi nesnesi eklemek kadar kolaydır.
Bağlantılı örneklerde kullanılır DefaultAzureCredential. Senaryoların çoğu için kullanışlıdır çünkü aynı desen Azure'da (yönetilen kimliklerle) ve yerel makinenizde (yönetilen kimlikler olmadan) çalışır.
Bağlantılı örneklerde kullanılır DefaultAzureCredential. Senaryoların çoğu için kullanışlıdır çünkü aynı desen Azure'da (yönetilen kimliklerle) ve yerel makinenizde (yönetilen kimlikler olmadan) çalışır.
JavaScript için Azure Identity istemci kitaplığına ilişkin daha fazla kod örneği için bkz . Azure Kimlik örnekleri.
Bağlantılı örneklerde kullanılır DefaultAzureCredential. Senaryoların çoğu için kullanışlıdır çünkü aynı desen Azure'da (yönetilen kimliklerle) ve yerel makinenizde (yönetilen kimlikler olmadan) çalışır.
Bağlantılı örneklerde kullanılır DefaultAzureCredential. Senaryoların çoğu için kullanışlıdır çünkü aynı desen Azure'da (yönetilen kimliklerle) ve yerel makinenizde (yönetilen kimlikler olmadan) çalışır.
Java için Azure Identity istemci kitaplığına ilişkin daha fazla kod örneği için bkz . Azure Kimlik Örnekleri.
Azure hizmetinin kaynak URI'sini belirterek yerel uç noktadan belirteç almak için aşağıdaki betiği kullanın:
Sistem tarafından atanan bir kimliği kaldırdığınızda, bu kimlik Microsoft Entra Id'den silinir. Uygulama kaynağını sildiğinizde sistem tarafından atanan kimlikler de Microsoft Entra Id'den otomatik olarak kaldırılır.
Uygulamanızın sayfasının sol gezinti bölmesinde aşağı kaydırarak Ayarlar grubuna gelin.
Kimlik öğesini seçin. Ardından kimlik türüne göre adımları izleyin:
Sistem tarafından atanan kimlik: Sistem tarafından atanan sekmesinde Durum seçeneğini Kapalı olarak değiştirin. Kaydet'e tıklayın.
Kullanıcı tarafından atanan kimlik: Kullanıcı tarafından atanan sekmesini seçin, kimliğin onay kutusunu seçin ve Kaldır'ı seçin. Onaylamak için Evet'i seçin.
Sistem tarafından atanan kimliği kaldırmak için:
az webapp identity remove --name <app-name> --resource-group <group-name>
Kullanıcı tarafından atanan bir veya daha fazla kimliği kaldırmak için:
Azure PowerShell'deki tüm kimlikleri kaldırmak için (yalnızca Azure İşlevleri):
# Update an existing function app to have IdentityType "None".
Update-AzFunctionApp -Name $functionAppName -ResourceGroupName $resourceGroupName -IdentityType None
ARM şablonundaki tüm kimlikleri kaldırmak için:
"identity": {
"type": "None"
}
Not
Ayrıca, yerel belirteç hizmetini devre dışı bırakabilen WEBSITE_DISABLE_MSI ayarlanabilen bir uygulama ayarı da vardır. Ancak, kimliği yerinde bırakır ve araçlar yönetilen kimliği "açık" veya "etkin" olarak göstermeye devam eder. Sonuç olarak, bu ayarın kullanılması önerilmez.
REST uç nokta başvurusu
Yönetilen kimliğe sahip bir uygulama, iki ortam değişkeni tanımlayarak bu uç noktayı kullanılabilir hale getirir:
IDENTITY_ENDPOINT - yerel belirteç hizmetinin URL'si.
IDENTITY_HEADER - Sunucu tarafı istek sahteciliği (SSRF) saldırılarını azaltmaya yardımcı olmak için kullanılan üst bilgi. Değer platform tarafından döndürülür.
IDENTITY_ENDPOINT, uygulamanızın belirteç isteğinde bulunabileceği yerel bir URL'dir. Bir kaynağın belirtecini almak için aşağıdaki parametreler de dahil olmak üzere bu uç noktaya bir HTTP GET isteği gönderin:
Parametre adı
İçinde
Açıklama
kaynak
Sorgu
Belirtecin alınması gereken kaynağın Microsoft Entra kaynak URI'si. Bu, Microsoft Entra kimlik doğrulamasını veya başka bir kaynak URI'sini destekleyen Azure hizmetlerinden biri olabilir.
IDENTITY_HEADER ortam değişkeninin değeri. Bu üst bilgi, sunucu tarafı istek sahteciliği (SSRF) saldırılarını azaltmaya yardımcı olmak için kullanılır.
client_id
Sorgu
(İsteğe bağlı) Kullanılacak kullanıcı tarafından atanan kimliğin istemci kimliği. , mi_res_idveya object_idiçeren principal_idbir istekte kullanılamaz. Tüm kimlik parametreleri (client_id, principal_id, object_idve mi_res_id) atlanırsa, sistem tarafından atanan kimlik kullanılır.
principal_id
Sorgu
(İsteğe bağlı) Kullanılacak kullanıcı tarafından atanan kimliğin asıl kimliği. object_id bunun yerine kullanılabilecek bir diğer addır. client_id, mi_res_id veya object_id içeren bir istekte kullanılamaz. Tüm kimlik parametreleri (client_id, principal_id, object_idve mi_res_id) atlanırsa, sistem tarafından atanan kimlik kullanılır.
mi_res_id
Sorgu
(İsteğe bağlı) Kullanılacak kullanıcı tarafından atanan kimliğin Azure kaynak kimliği. , client_idveya object_idiçeren principal_idbir istekte kullanılamaz. Tüm kimlik parametreleri (client_id, principal_id, object_idve mi_res_id) atlanırsa, sistem tarafından atanan kimlik kullanılır.
Önemli
Kullanıcı tarafından atanan kimlikler için belirteçleri almayı denerseniz, isteğe bağlı özelliklerden birini eklemeniz gerekir. Aksi takdirde belirteç hizmeti, sistem tarafından atanan bir kimlik için var olabilecek veya varolmayan bir belirteç almayı dener.