Öğretici: Gizli diziler yerine kimlikleri kullanarak Azure hizmetlerine bağlanan bir işlev uygulaması oluşturma
Bu öğreticide, mümkün olduğunca gizli diziler veya bağlantı dizesi'ler yerine Microsoft Entra kimliklerini kullanarak bir işlev uygulamasının nasıl yapılandırıldığı gösterilmektedir. Kimlikleri kullanmak, hassas gizli dizilerin yanlışlıkla sızmasını önlemenize yardımcı olur ve verilere nasıl erişildiğinde daha iyi görünürlük sağlayabilir. Kimlik tabanlı bağlantılar hakkında daha fazla bilgi edinmek için bkz . Kimlik tabanlı bağlantı yapılandırma.
Gösterilen yordamlar genel olarak tüm diller için işe yarasa da, bu öğretici şu anda özellikle Windows'ta C# sınıf kitaplığı işlevlerini destekler.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- ARM şablonu kullanarak Azure'da işlev uygulaması oluşturma
- İşlev uygulamasında hem sistem tarafından atanan hem de kullanıcı tarafından atanan yönetilen kimlikleri etkinleştirme
- Diğer kaynaklara izin veren rol atamaları oluşturma
- Kimliklerle değiştirilemeyen gizli dizileri Azure Key Vault'a taşıma
- Yönetilen kimliğini kullanarak bir uygulamayı varsayılan konak depolamaya bağlanacak şekilde yapılandırma
Bu öğreticiyi tamamladıktan sonra, [tetikleyiciler ve bağlamalarla gizli diziler yerine kimlik tabanlı bağlantıları kullanma] adımlarını gösteren sonraki öğreticiyi tamamlamanız gerekir.
Önkoşullar
Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
Azure İşlevleri Core Tools sürüm 4.x.
Kimlik neden kullanılır?
Gizli dizileri ve kimlik bilgilerini yönetmek, her büyüklükteki ekipler için yaygın bir zorluktır. Gizli dizilerin hırsızlık veya yanlışlıkla açığa çıkmasına karşı korunması ve bunların düzenli aralıklarla döndürülmeleri gerekebilir. Birçok Azure hizmeti, istemcilerin kimliğini doğrulamak ve hızlı bir şekilde değiştirilebilen ve iptal edilebilen izinlere karşı denetim yapmak için bunun yerine Microsoft Entra Id'de bir kimlik kullanmanıza olanak tanır. Bunun yapılması, daha az işlem yüküyle uygulama güvenliği üzerinde daha fazla denetime olanak tanır. Kimlik, bir uygulamanın geliştiricisi gibi bir insan kullanıcı veya yönetilen kimlikle Azure'da çalışan bir uygulama olabilir.
Bazı hizmetler Microsoft Entra kimlik doğrulamayı desteklemediğinden, uygulamalarınız bazı durumlarda gizli dizi gerektirebilir. Ancak bu gizli diziler Azure Key Vault'ta depolanabilir ve bu da gizli dizilerinizin yönetim yaşam döngüsünü basitleştirmeye yardımcı olur. Anahtar kasasına erişim de kimliklerle denetlenilir.
Kullanabildiğiniz zaman gizli diziler yerine kimlikleri kullanmayı ve kullanamıyorsanız Key Vault'un nasıl kullanılacağını anlayarak riski azaltır, işlem yükünü azaltır ve uygulamalarınız için genel olarak güvenlik duruşunu geliştirirsiniz.
Gerekli gizli diziler için Key Vault kullanan bir işlev uygulaması oluşturma
Azure Dosyalar, Sunucu İleti Bloğu (SMB) dosya paylaşımları için Microsoft Entra kimlik doğrulamasını henüz desteklemeyen bir hizmet örneğidir. Azure Dosyalar, Premium ve Tüketim planlarında Windows dağıtımları için varsayılan dosya sistemidir. Azure Dosyalar tamamen kaldırabilsek de bunu yapmak istemediğiniz sınırlamaları ortaya çıkarır. Bunun yerine, Azure Dosyalar bağlantı dizesi Azure Key Vault'a taşırsınız. Bu şekilde, erişim kimlik tarafından denetlenerek merkezi olarak yönetilir.
Azure Key Vault oluşturma
İlk olarak gizli dizileri depolamak için bir anahtar kasasına ihtiyacınız vardır. Kasadan gizli dizileri kimlerin okuyabileceğini belirlemek için Azure rol tabanlı erişim denetimini (RBAC) kullanacak şekilde yapılandırırsınız.
Kaynak oluştur sayfasında Güvenlik>Anahtarı Kasası'nı seçin.
Temel Bilgiler sayfasında, anahtar kasasını yapılandırmak için aşağıdaki tabloyu kullanın.
Seçenek Önerilen değer Açıklama Abonelik Aboneliğiniz Bu yeni işlev uygulamasının oluşturulduğu abonelik. Kaynak Grubu myResourceGroup İşlev uygulamanızı oluşturduğunuz yeni kaynak grubunun adı. Anahtar kasası adı Genel olarak benzersiz bir ad Yeni anahtar kasanızı tanımlayan ad. Kasa adı yalnızca alfasayısal karakterler ve tireler içermelidir ve bir sayı ile başlayamaz. Fiyatlandırma Katmanı Standart Faturalama seçenekleri. Standart bu öğretici için yeterlidir. Bölge Tercih edilen bölge Size yakın veya işlevlerinizin eriştirileceği diğer hizmetlere yakın bir bölge seçin. "Kurtarma seçenekleri" bölümleri için varsayılan seçimleri kullanın.
Daha sonra kullanmak üzere kullandığınız adı not edin.
Erişim İlkesi sekmesine gitmek için İleri: Erişim İlkesi'ni seçin.
İzin modeli'nin altında Azure rol tabanlı erişim denetimi'ni seçin
Gözden geçir ve oluştur’u seçin. Yapılandırmayı gözden geçirin ve Oluştur'u seçin.
Uygulama için kimlik ve izin ayarlama
Azure Key Vault'un kullanılabilmesi için uygulamanızın gizli dizileri okuma izni verilebilen bir kimliğe sahip olması gerekir. Bu uygulama, uygulama oluşturulmadan önce izinlerin ayarlanabilmesi için kullanıcı tarafından atanan bir kimlik kullanır. Azure İşlevleri için yönetilen kimlikler hakkında daha fazla bilgi için bkz. Azure İşlevleri yönetilen kimlikleri kullanma.
Kaynak oluştur sayfasında Kimlik>Kullanıcı Tarafından Atanan Yönetilen Kimlik'i seçin.
Temel Bilgiler sayfasında, kimliği yapılandırmak için aşağıdaki tabloyu kullanın.
Seçenek Önerilen değer Açıklama Abonelik Aboneliğiniz Bu yeni işlev uygulamasının oluşturulduğu abonelik. Kaynak Grubu myResourceGroup İşlev uygulamanızı oluşturduğunuz yeni kaynak grubunun adı. Bölge Tercih edilen bölge Size yakın veya işlevlerinizin eriştirileceği diğer hizmetlere yakın bir bölge seçin. Ad Genel olarak benzersiz bir ad Kullanıcı tarafından atanan yeni kimliğinizi tanımlayan ad. Gözden geçir ve oluştur’u seçin. Yapılandırmayı gözden geçirin ve Oluştur'u seçin.
Kimlik oluşturulduğunda portalda bu kimliğe gidin. Özellikler'i seçin ve daha sonra kullanmak üzere Kaynak Kimliğini not edin.
Azure Rol Atamaları'nın ardından Rol ataması ekle (Önizleme) seçeneğini belirleyin.
Rol ataması ekle (Önizleme) sayfasında, aşağıdaki tabloda gösterildiği gibi seçenekleri kullanın.
Seçenek Önerilen değer Açıklama Scope Key Vault Kapsam, rol atamasının uygulandığı bir kaynak kümesidir. Kapsam, daha düşük düzeylerde devralınan düzeylere sahiptir. Örneğin, bir abonelik kapsamı seçerseniz rol ataması abonelikteki tüm kaynak gruplarına ve kaynaklara uygulanır. Abonelik Aboneliğiniz Bu yeni işlev uygulamasının oluşturulduğu abonelik. Kaynak Anahtar kasanız Daha önce oluşturduğunuz anahtar kasası. Rol Key Vault Gizli Dizi Kullanıcısı Rol, verilen izinlerden oluşan bir koleksiyondur. Key Vault Gizli Dizileri Kullanıcısı, kimliğin kasadan gizli dizi değerlerini okumasına izin verir. Kaydet'i seçin. Kimliğin rol atamaları listesini yenilediğinizde rolün gösterilmesi bir veya iki dakika sürebilir.
Kimlik artık anahtar kasasında depolanan gizli dizileri okuyabilir. Öğreticinin ilerleyen bölümlerinde farklı amaçlar için ek rol atamaları eklersiniz.
İşlev uygulaması oluşturmak için şablon oluşturma
İşlev uygulaması oluşturmaya yönelik portal deneyimi Azure Key Vault ile etkileşim kurmadığından, Azure Resource Manager şablonu oluşturup düzenlemeniz gerekir. Ardından bu şablonu kullanarak anahtar kasanızdan Azure Dosyalar bağlantı dizesi başvuran işlev uygulamanızı oluşturabilirsiniz.
Önemli
ARM şablonunu düzenlemeden önce işlev uygulamasını oluşturmayın. Azure Dosyalar yapılandırmasının uygulama oluşturma zamanında ayarlanması gerekir.
Kaynak oluştur sayfasında İşlem>İşlevi Uygulaması'nı seçin.
Temel Bilgiler sayfasında, işlev uygulamasını yapılandırmak için aşağıdaki tabloyu kullanın.
Seçenek Önerilen değer Açıklama Abonelik Aboneliğiniz Bu yeni işlev uygulamasının oluşturulduğu abonelik. Kaynak Grubu myResourceGroup İşlev uygulamanızı oluşturduğunuz yeni kaynak grubunun adı. İşlev Uygulamasının adı Genel olarak benzersiz bir ad Yeni işlev uygulamanızı tanımlayan ad. Geçerli karakterler şunlardır: a-z
(büyük/küçük harf duyarsız),0-9
ve-
.Yayınla Kod Kod dosyalarını veya Docker kapsayıcısını yayımlamayı seçin. Çalışma zamanı yığını .NET Bu öğreticide .NET kullanılır. Bölge Tercih edilen bölge Size yakın veya işlevlerinizin eriştirileceği diğer hizmetlere yakın bir bölge seçin. Gözden geçir ve oluştur’u seçin. Uygulamanız Barındırma ve İzleme sayfasındaki varsayılan değerleri kullanır. Oluşturduğunuz ARM şablonuna dahil edilen varsayılan seçenekleri gözden geçirin.
İşlev uygulamanızı burada oluşturmak yerine İleri düğmesinin sağ tarafındaki Otomasyon için şablon indir'i seçin.
Şablon sayfasında Dağıt'ı ve ardından Özel dağıtım sayfasında Şablonu düzenle'yi seçin.
Şablonu düzenleme
Şimdi Azure Dosyalar bağlantı dizesi Key Vault'ta depolamak ve işlev uygulamanızın buna başvurmasına izin vermek için şablonu düzenleyebilirsiniz. Devam etmeden önce önceki bölümlerde yer alan aşağıdaki değerlere sahip olduğunuzdan emin olun:
- Kullanıcı tarafından atanan kimliğin kaynak kimliği
- Anahtar kasanızın adı
Not
Otomasyon için tam bir şablon oluşturacaksanız, kimlik ve rol atama kaynakları için tanımları uygun dependsOn
yan tümcelerle birlikte eklemek isteyebilirsiniz. Bu, portalı kullanan önceki adımların yerini alır. Azure Resource Manager kılavuzuna ve her hizmetin belgelerine başvurun.
Düzenleyicide dizinin nerede
resources
başladığını bulun. İşlev uygulaması tanımından önce, Azure Dosyalar bağlantı dizesi Key Vault'a yerleştiren aşağıdaki bölümü ekleyin. "VAULT_NAME" yerine anahtar kasanızın adını yazın.{ "type": "Microsoft.KeyVault/vaults/secrets", "apiVersion": "2016-10-01", "name": "VAULT_NAME/azurefilesconnectionstring", "properties": { "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]" }, "dependsOn": [ "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]" ] },
İşlev uygulaması kaynağının tanımına (olarak ayarlanmıştır
type
Microsoft.Web/sites
) diziyedependsOn
ekleyinMicrosoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring
. "VAULT_NAME" yerine anahtar kasanızın adını yazın. Bunu yaptığınızda gizli dizi tanımlanmadan önce uygulamanızın oluşturulması engellenir. DizidependsOn
aşağıdaki örnekteki gibi görünmelidir:{ "type": "Microsoft.Web/sites", "apiVersion": "2018-11-01", "name": "[parameters('name')]", "location": "[parameters('location')]", "tags": null, "dependsOn": [ "microsoft.insights/components/idcxntut", "Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring", "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]", "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]" ], // ... }
Aşağıdaki örnekteki
identity
bloğu işlev uygulaması kaynağınızın tanımına ekleyin. Kullanıcı tarafından atanan kimliğinizin kaynak kimliği yerine "IDENTITY_RESOURCE_ID" yazın.{ "apiVersion": "2018-11-01", "name": "[parameters('name')]", "type": "Microsoft.Web/sites", "kind": "functionapp", "location": "[parameters('location')]", "identity": { "type": "SystemAssigned,UserAssigned", "userAssignedIdentities": { "IDENTITY_RESOURCE_ID": {} } }, "tags": null, // ... }
Bu
identity
blok, bu öğreticinin devamında kullanacağınız sistem tarafından atanan bir kimlik de ayarlar.keyVaultReferenceIdentity
Aşağıdaki örnekte olduğu gibi özelliğiniproperties
işlev uygulamasının nesnesine ekleyin. Kullanıcı tarafından atanan kimliğinizin kaynak kimliği yerine "IDENTITY_RESOURCE_ID" yazın.{ // ... "properties": { "name": "[parameters('name')]", "keyVaultReferenceIdentity": "IDENTITY_RESOURCE_ID", // ... } }
Bir uygulamada kullanıcı tarafından atanan birden çok kimlik yapılandırıldığından bu yapılandırmaya ihtiyacınız vardır. Kullanıcı tarafından atanan bir kimliği kullanmak istediğinizde, bunu bir kimlikle belirtmeniz gerekir. Bir uygulamada yalnızca bir tane olabileceği için sistem tarafından atanan kimliklerin bu şekilde belirtilmesi gerekmez. Yönetilen kimlik kullanan birçok özellik, sistem tarafından atananı varsayılan olarak kullanması gerektiğini varsayar.
Aşağıdaki örneğe benzemesi gereken uygulama ayarını tanımlayan
WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
JSON nesnelerini bulun:{ "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING", "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]" },
value
alanını, aşağıdaki örnekte gösterildiği gibi gizli diziye bir başvuruyla değiştirin. "VAULT_NAME" yerine anahtar kasanızın adını yazın.{ "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING", "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', 'VAULT_NAME', 'azurefilesconnectionstring')).secretUri, ')')]" },
Güncelleştirilmiş ARM şablonunu kaydetmek için Kaydet'i seçin.
Değiştirilen şablonu dağıtma
Kaynak Grubu da dahil olmak üzere oluşturma seçeneklerinizin hala doğru olduğundan emin olun ve Gözden geçir ve oluştur'u seçin.
Şablonunuz doğrulandıktan sonra bu hesabı daha sonra kullanacağınız için Depolama Hesabı Adınızı not edin. Son olarak Oluştur'u seçerek Azure kaynaklarınızı oluşturun ve kodunuzu işlev uygulamasına dağıtın.
Dağıtım tamamlandıktan sonra Kaynak grubuna git'i ve ardından yeni işlev uygulamasını seçin.
Tebrikler! Azure Key Vault'tan Azure Dosyalar bağlantı dizesi başvurmak için işlev uygulamanızı başarıyla oluşturdunuz.
Uygulamanızın gizli diziye bir başvuru eklemesi gerektiğinde, Key Vault'ta depolanan değere işaret eden yeni bir uygulama ayarı tanımlamanız yeterlidir. Daha fazla bilgi için bkz. Azure İşlevleri için Key Vault başvuruları.
İpucu
Application Insights bağlantı dizesi ve içerdiği izleme anahtarı gizli dizi olarak kabul edilmez ve Okuyucu izinleri kullanılarak App Insights'tan alınabilir. Bunları Key Vault'a taşımanız gerekmez, ancak kesinlikle taşıyabilirsiniz.
AzureWebJobsStorage için yönetilen kimliği kullanma
Ardından, bağlantı için AzureWebJobsStorage
önceki adımlarda yapılandırdığınız sistem tarafından atanan kimliği kullanacaksınız. AzureWebJobsStorage
, İşlevler çalışma zamanı tarafından ve birden çok çalışan örnek arasında koordinasyon sağlamak için çeşitli tetikleyiciler ve bağlamalar tarafından kullanılır. İşlev uygulamanızın çalışması ve Azure Dosyalar gibi yeni bir işlev uygulaması oluşturduğunuzda varsayılan olarak bir bağlantı dizesi ile yapılandırılması gerekir.
Depolama hesabına sistem tarafından atanan kimliğe erişim izni verme
Daha önce kullanıcı tarafından atanan kimlik ve anahtar kasanızla izlediğiniz adımlara benzer şekilde, artık depolama hesabınıza sistem tarafından atanan kimlik erişimi veren bir rol ataması oluşturursunuz.
Azure portalında, daha önce işlev uygulamanızla oluşturulan depolama hesabına gidin.
Erişim Denetimi (IAM) öğesini seçin. Bu sayfa, kaynağa erişimi olan kişileri görüntüleyebileceğiniz ve yapılandırabileceğiniz yerdir.
Ekle'yi ve rol ataması ekle'yi seçin.
Depolama Blobu Veri Sahibini arayın, seçin ve İleri'yi seçin
Üyeler sekmesindeki Erişim ata'nın altında Yönetilen Kimlik'i seçin
Üyeleri seç'i seçerek Yönetilen kimlikleri seçin panelini açın.
Abonelik'in, kaynakları daha önce oluşturduğunuz abonelik olduğunu onaylayın.
Yönetilen kimlik seçicisinde Sistem tarafından atanan yönetilen kimlik kategorisinde İşlev Uygulaması'nı seçin. İşlev Uygulaması etiketinin yanında, sistem tarafından atanan kimliklere sahip abonelikteki uygulama sayısını gösteren parantez içinde bir sayı olabilir.
Uygulamanız giriş alanlarının altındaki bir listede görünmelidir. Bunu görmüyorsanız, sonuçları uygulamanızın adıyla filtrelemek için Seç kutusunu kullanabilirsiniz.
Uygulamanızı seçin. Seçili üyeler bölümüne inmelidir. Seç'i seçin.
Rol ataması ekle ekranında Gözden geçir ve ata'yı seçin. Yapılandırmayı gözden geçirin ve gözden geçir ve ata'yı seçin.
İpucu
İşlev uygulamasını blob ile tetiklenen bir işlev için kullanmayı planlıyorsanız, AzureWebJobsStorage tarafından kullanılan hesap üzerinden Depolama Hesabı Katkıda Bulunanı ve Depolama Kuyruğu Veri Katkıda Bulunanı rolleri için bu adımları yinelemeniz gerekir. Daha fazla bilgi edinmek için bkz . Blob tetikleyicisi kimlik tabanlı bağlantılar.
AzureWebJobsStorage yapılandırmasını düzenleme
Ardından işlev uygulamanızı, konak depolaması için blob hizmetini kullanırken sistem tarafından atanan kimliğini kullanacak şekilde güncelleştirin.
Önemli
Yapılandırma AzureWebJobsStorage
bazı tetikleyiciler ve bağlamalar tarafından kullanılır ve bu uzantıların da kimlik tabanlı bağlantıları kullanabilmesi gerekir. Blob tetikleyicileri veya olay hub'ı tetikleyicileri kullanan uygulamaların bu uzantıları güncelleştirmesi gerekebilir. Bu uygulama için hiçbir işlev tanımlanmadığından, henüz bir sorun yoktur. Bu gereksinim hakkında daha fazla bilgi edinmek için bkz . Kimlikle konak depolamaya bağlanma.
Benzer şekilde, AzureWebJobsStorage
Linux Tüketiminde sunucu tarafı derleme kullanılırken dağıtım yapıtları için kullanılır. Linux Tüketiminde için AzureWebJobsStorage
kimlik tabanlı bağlantıları etkinleştirdiğinizde, bir dış dağıtım paketi aracılığıyla dağıtmanız gerekir.
İşlev uygulamanızda Ayarlar'ı genişletin ve ortam değişkenleri'ne tıklayın.
Uygulama ayarları sekmesinde AzureWebJobsStorage uygulama ayarını seçin ve aşağıdaki tabloya göre düzenleyin:
Seçenek Önerilen değer Veri Akışı Açıklaması Adı AzureWebJobsStorage__accountName AzureWebJobsStorage adını tam adıyla AzureWebJobsStorage__accountName
değiştirin. Bu ayar, konağa depolanan gizli dizi aramak yerine kimliği kullanmasını emreder. Yeni ayar, uygulama ayarlarında özel bir karakter olan çift alt çizgi ()__
kullanır.Value Hesap adınız bağlantı dizesi adını yalnızca StorageAccountName'inize güncelleştirin. Bu yapılandırma sisteme kaynağa bağlanmak için bir kimlik kullanmasını bildirir.
Uygula'yı ve ardından Uygula ve Onayla'yı seçerek değişikliklerinizi kaydedin ve uygulama işlevini yeniden başlatın.
Artık uygulamanızı yönetilen kimlikleri kullanarak bloblara bağlanacak şekilde yapılandırarak AzureWebJobsStorage için depolama bağlantı dizesi gereksinimini kaldırdınız.
Not
Söz __accountName
dizimi AzureWebJobsStorage bağlantısına özgüdür ve diğer depolama bağlantıları için kullanılamaz. Diğer bağlantıları tanımlamayı öğrenmek için, uygulamanızın kullandığı her tetikleyicinin ve bağlamanın başvurularını denetleyin.
Sonraki adımlar
Bu öğreticide, yapılandırmasında gizli dizileri depolamadan bir işlev uygulamasının nasıl oluşturulacağı gösterildi.
Tetikleyici ve bağlama bağlantılarında kimlikleri kullanmayı öğrenmek için sonraki öğreticiye ilerleyin.