Hizmet sorumlularını kullanarak yerel geliştirme sırasında Azure hizmetlerinde JavaScript uygulamalarının kimliğini doğrulama

Bulut uygulamaları oluştururken geliştiricilerin yerel iş istasyonlarında uygulamaların hatalarını ayıklaması ve test etmeleri gerekir. Yerel geliştirme sırasında bir uygulama geliştiricinin iş istasyonunda çalıştırıldığında, yine de uygulama tarafından kullanılan tüm Azure hizmetlerinde kimlik doğrulaması yapması gerekir. Bu makalede, yerel geliştirme sırasında kullanılacak ayrılmış uygulama hizmet sorumlusu nesnelerinin nasıl ayarlanacağı ele alınıyor.

A diagram showing how a JavaScript app during local development will use the developer's credentials to connect to Azure by obtaining those credentials locally installed development tools.

Yerel geliştirme için ayrılmış uygulama hizmet sorumluları, uygulama geliştirme sırasında en az ayrıcalık ilkesini izlemenize olanak sağlar. İzinlerin kapsamı, geliştirme sırasında uygulama için tam olarak gerekenlerle belirlenmiş olduğundan, uygulama kodunun farklı bir uygulama tarafından kullanılmak üzere tasarlanan bir Azure kaynağına yanlışlıkla erişmesi engellenir. Bu, uygulama geliştirme ortamında fazla ayrıcalıklı olduğundan uygulama üretime taşındığında hataların oluşmasını da engeller.

Uygulama Azure'a kaydedildiğinde uygulama için bir uygulama hizmet sorumlusu ayarlanır. Yerel geliştirme için uygulama kaydederken şunların kullanılması önerilir:

  • Uygulama üzerinde çalışan her geliştirici için ayrı uygulama kayıtları oluşturun. Bu, her geliştiricinin yerel geliştirme sırasında kullanması için ayrı uygulama hizmet sorumluları oluşturur ve geliştiricilerin tek bir uygulama hizmet sorumlusu için kimlik bilgilerini paylaşma gereksinimini önler.
  • Uygulama başına ayrı uygulama kayıtları oluşturun. Bu, uygulamanın izinlerini yalnızca uygulama için gerekli olan izinlere göre kapsamlar.

Yerel geliştirme sırasında ortam değişkenleri uygulama hizmeti sorumlusunun kimliğiyle ayarlanır. JavaScript için Azure SDK bu ortam değişkenlerini okur ve uygulamanın kimliğini ihtiyaç duyduğu Azure kaynaklarında doğrulamak için bu bilgileri kullanır.

1 - Uygulamayı Azure'a kaydetme

Uygulama hizmeti sorumlusu nesneleri Azure'da bir uygulama kaydıyla oluşturulur. Bu, Azure portalı veya Azure CLI kullanılarak yapılabilir.

Azure portalında oturum açın ve şu adımları izleyin.

Yönergeler Ekran görüntüsü
Azure portalında:
  1. Azure portalının üst kısmındaki arama çubuğuna uygulama kayıtlarını girin.
  2. Arama çubuğunun altında görüntülenen menüdeki Hizmetler başlığının altında Uygulama kayıtları etiketli öğeyi seçin.
A screenshot showing how to use the top search bar in the Azure portal to find and navigate to the App registrations page.
Uygulama kayıtları sayfasında + Yeni kayıt'ı seçin. A screenshot showing the location of the New registration button in the App registrations page.
Uygulamayı kaydet sayfasında formu aşağıdaki gibi doldurun.
  1. Ad → Azure'da uygulama kaydı için bir ad girin. Bu adın uygulama adını, uygulama kaydının ait olduğu kullanıcıyı ve bu uygulama kaydının yerel geliştirmede kullanılmak üzere olduğunu belirtmek için 'dev' gibi bir tanımlayıcı içermesi önerilir.
  2. Desteklenen hesap türleri yalnızca bu kuruluş dizinindeki Hesaplar →.
Uygulamanızı kaydetmek ve uygulama hizmet sorumlusunu oluşturmak için Kaydet'i seçin.
A screenshot showing how to fill out the Register an application page by giving the app a name and specifying supported account types as accounts in this organizational directory only.
Uygulamanızın Uygulama kaydı sayfasında:
  1. Uygulama (istemci) kimliği → Bu, uygulamanın yerel geliştirme sırasında Azure'a erişmek için kullanacağı uygulama kimliğidir. Bu değeri bir metin düzenleyicisinde geçici bir konuma kopyalayın çünkü sonraki bir adımda ihtiyacınız olacak.
  2. Dizin (kiracı) kimliği → Bu değer, Azure'da kimlik doğrulaması yaparken uygulamanız tarafından da gerekli olacaktır. Bu değeri bir metin düzenleyicisinde geçici bir konuma kopyalayın, gelecekteki bir adımda da gerekli olacaktır.
  3. İstemci kimlik bilgileri → Uygulamanızın Azure'da kimlik doğrulaması yapıp Azure hizmetlerini kullanabilmesi için önce uygulamanın istemci kimlik bilgilerini ayarlamanız gerekir. Uygulamanızın kimlik bilgilerini eklemek için Sertifika veya gizli dizi ekle'yi seçin.
A screenshot after the app registration has been completed with the location of the application ID, tenant ID.
Sertifikalar ve gizli diziler sayfasında + Yeni istemci gizli dizisi'ni seçin. A screenshot showing the location of the link to use to create a new client secret on the certificates and secrets page.
İstemci gizli dizisi ekle iletişim kutusu sayfanın sağ tarafından açılır. Bu iletişim kutusunda:
  1. Açıklama → Geçerli değerini girin.
  2. Süresi doluyor → 24 aylık bir değer seçin.
Gizli diziyi eklemek için Ekle'yi seçin.
A screenshot showing the page where a new client secret is added for the application service principal create by the app registration process.
Sertifikalar ve gizli diziler sayfasında, istemci gizli dizisinin değeri gösterilir.

Bu değeri bir metin düzenleyicisinde geçici bir konuma kopyalayın çünkü sonraki bir adımda ihtiyacınız olacak.

ÖNEMLİ: Bu değeri yalnızca bu kez görürsünüz. Bu sayfadan ayrıldıktan veya sayfayı yeniledikten sonra bu değeri bir daha göremezsiniz. Bu istemci gizli dizisini geçersiz kılınmadan daha fazla istemci gizli dizisi ekleyebilirsiniz, ancak bu değeri bir daha görmezsiniz.
A screenshot showing the page with the generated client secret.

2 - Yerel geliştirme için bir Microsoft Entra güvenlik grubu oluşturma

Genellikle bir uygulama üzerinde çalışan birden çok geliştirici olduğundan, rolleri tek tek hizmet sorumlusu nesnelerine atamak yerine yerel geliştirmede uygulamanın ihtiyaç duyduğu rolleri (izinleri) kapsüllemek için bir Microsoft Entra grubu oluşturmanız önerilir. Bu, aşağıdaki avantajları sunar.

  • Roller grup düzeyinde atandığından her geliştiricinin aynı rollere atandığından emin olur.
  • Uygulama için yeni bir rol gerekiyorsa, yalnızca uygulama için Microsoft Entra grubuna eklenmesi gerekir.
  • Ekibe yeni bir geliştirici katılırsa, geliştirici için yeni bir uygulama hizmet sorumlusu oluşturulur ve gruba eklenir ve geliştiricinin uygulama üzerinde çalışmak için doğru izinlere sahip olması sağlanır.
Yönergeler Ekran görüntüsü
Sayfanın üst kısmındaki arama kutusuna Microsoft Entra Id yazarak ve ardından hizmetler altındaki Microsoft Entra ID'yi seçerek Azure portalında Microsoft Entra Id sayfasına gidin. A screenshot showing how to use the top search bar in the Azure portal to search for and navigate to the Microsoft Entra ID page.
Microsoft Entra Id sayfasında sol taraftaki menüden Gruplar'ı seçin. A screenshot showing the location of the Groups menu item in the left-hand menu of the Microsoft Entra ID Default Directory page.
Tüm gruplar sayfasında Yeni grup'a tıklayın. A screenshot showing the location of the New Group button in the All groups page.
Yeni Grup sayfasında:
  1. Grup türüGüvenlik
  2. Grup adı → Genellikle uygulama adından oluşturulan güvenlik grubu için bir addır. Grubun amacını belirtmek için grubun adına local-dev gibi bir dize eklemek de yararlıdır.
  3. Grup açıklaması → Grubun amacının açıklaması.
  4. Gruba üye eklemek için Üyeler'in altında Üye seçilmedi bağlantısını seçin.
A screenshot showing how to create a new Microsoft Entra group for the application.
Üye ekle iletişim kutusunda:
  1. Listedeki asıl adlar listesine filtre uygulamak için arama kutusunu kullanın.
  2. Bu uygulama için yerel geliştirme için uygulama hizmet sorumlularını seçin. Nesneler seçildikçe gri görünür ve iletişim kutusunun en altındaki Seçili öğeler listesine taşınır.
  3. İşiniz bittiğinde Seç düğmesini seçin.
A screenshot of the Add members dialog box showing how to select application service principals to be included in the group.
Yeni grup sayfasına dönüp Oluştur'u seçerek grubu oluşturun.

Grup oluşturulur ve Tüm gruplar sayfasına geri dönersiniz. Grubun görünmesi 30 saniye kadar sürebilir ve Azure portalında önbelleğe alma nedeniyle sayfayı yenilemeniz gerekebilir.
A screenshot of the New Group page showing how to complete the process by selecting the Create button.

3 - Uygulamaya 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. Bu örnekte roller, 2. adımda oluşturulan Microsoft Entra grubuna atanır. 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 rollerin nasıl atanacağı gösterilir.

Yönergeler Ekran görüntüsü
Azure portalının üst kısmındaki arama kutusunu kullanarak kaynak grubu adını arayarak uygulamanızın kaynak grubunu bulun.

İletişim kutusundaki Kaynak Grupları başlığının altındaki kaynak grubu adını seçerek kaynak grubunuza gidin.
A screenshot showing how to use the top search box in the Azure portal to locate and navigate to the resource group you want to assign roles (permissions) to.
Kaynak grubunun sayfasında sol taraftaki menüden Erişim denetimi (IAM) öğesini seçin. A screenshot of the resource group page showing the location of the Access control (IAM) menu item.
Erişim denetimi (IAM) sayfasında:
  1. Rol atamaları sekmesini seçin.
  2. Üst menüden + Ekle'yi seçin ve ardından açılan menüden Rol ataması ekle'yi seçin.
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
Rol ataması ekle sayfasında, kaynak grubu için atanabilecek tüm roller listelenir.
  1. Listeyi daha yönetilebilir bir boyuta filtrelemek için arama kutusunu kullanın. Bu örnekte, Depolama Blob rolleri için filtreleme gösterilmektedir.
  2. Atamak istediğiniz rolü seçin.
    Sonraki ekrana gitmek için İleri'yi seçin.
A screenshot showing how to filter and select role assignments to be added to the resource group.
Sonraki Rol ataması ekle sayfası, rolü hangi kullanıcıya atayabileceğinizi belirtmenize olanak tanır.
  1. Erişim ata altında Kullanıcı, grup veya hizmet sorumlusu'natıklayın.
  2. Üyeler'in altında + Üyeleri seç'i seçin
Azure portalının sağ tarafında bir iletişim kutusu açılır.
A screenshot showing the radio button to select to assign a role to a Microsoft Entra group and the link used to select the group to assign the role to.
Üye seç iletişim kutusunda:
  1. Seç metin kutusu, aboneliğinizdeki kullanıcı ve grupların listesini filtrelemek için kullanılabilir. Gerekirse, uygulama için oluşturduğunuz yerel geliştirme Microsoft Entra grubunun ilk birkaç karakterini yazın.
  2. Uygulamanızla ilişkili yerel geliştirme Microsoft Entra grubunu seçin.
Devam etmek için iletişim kutusunun alt kısmındaki Seç'i seçin.
A screenshot showing how to filter for and select the Microsoft Entra group for the application in the Select members dialog box.
Microsoft Entra grubu artık Rol ataması ekle ekranında seçili olarak gösterilir.

Son sayfaya gitmek için Gözden geçir + ata'yı seçin ve ardından işlemi tamamlamak için Gözden geçir + yeniden ata'yı seçin.
A screenshot showing the completed Add role assignment page and the location of the Review + assign button used to complete the process.

4 - Yerel geliştirme ortamı değişkenlerini ayarlama

DefaultAzureCredential nesnesi, çalışma zamanında bir dizi ortam değişkeninde hizmet sorumlusu bilgilerini arar. Geliştiricilerin çoğu birden çok uygulama üzerinde çalıştığından, geliştirme sırasında uygulamanın dizininde depolanan bir dosyadan ortama erişmek için dotenv gibi bir .env paket kullanmanız önerilir. Bu, azure'da uygulamanın kimliğini doğrulamak için kullanılan ortam değişkenlerini yalnızca bu uygulama tarafından kullanılabilecek şekilde kapsar.

Dosya .env , Azure için uygulama gizli anahtarı içerdiğinden hiçbir zaman kaynak denetimine iade edilemez. JavaScript için standart .gitignore dosyası, dosyayı otomatik olarak iade işleminin .env dışında tutar.

Paketi kullanmak dotenv için önce paketi uygulamanıza yükleyin.

npm install dotenv

Ardından, uygulama kök dizininizde bir .env dosya oluşturun. Ortam değişkeni değerlerini, uygulama kayıt işleminden alınan değerlerle aşağıdaki gibi ayarlayın:

  • AZURE_CLIENT_ID Uygulama kimliği değerini →.
  • AZURE_TENANT_ID kiracı kimliği değerini →.
  • AZURE_CLIENT_SECRET → Uygulama için oluşturulan parola/kimlik bilgisi.
AZURE_CLIENT_ID=00000000-0000-0000-0000-000000000000
AZURE_TENANT_ID=11111111-1111-1111-1111-111111111111
AZURE_CLIENT_SECRET=abcdefghijklmnopqrstuvwxyz

Son olarak, uygulamanızın başlangıç kodunda dotenv , başlangıçtaki dosyadan .env ortam değişkenlerini okumak için kitaplığını kullanın.

import 'dotenv/config'

5 - Uygulamanızda 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. Bu senaryoda, DefaultAzureCredential ile Azure'a bağlanılacak uygulama hizmeti sorumlusu bilgilerini almak için , AZURE_TENANT_IDve AZURE_CLIENT_SECRET ortam değişkenlerini AZURE_CLIENT_IDalgılar ve bu değişkenleri okur.

uygulamanıza @azure/kimlik paketini ekleyerek başlayın.

npm install @azure/identity

Ardından, uygulamanızda bir Azure SDK istemci nesnesi oluşturan tüm JavaScript kodları için şunları yapmak istersiniz:

  1. sınıfını DefaultAzureCredential modülden içeri aktarın @azure/identity .
  2. Bir DefaultAzureCredential nesne oluşturun.
  3. DefaultAzureCredential Nesnesini Azure SDK istemci nesnesi oluşturucusna geçirin.

Bunun bir örneği aşağıdaki kod kesiminde gösterilmiştir.

// Azure authentication dependency
import { DefaultAzureCredential } from '@azure/identity';

// Azure resource management dependency
import { SubscriptionClient } from "@azure/arm-subscriptions";

// Acquire credential
const tokenCredential = new DefaultAzureCredential();

async function listSubscriptions() {
  try {

    // use credential to authenticate with Azure SDKs
    const client = new SubscriptionClient(tokenCredential);

    // get details of each subscription
    for await (const item of client.subscriptions.list()) {
      const subscriptionDetails = await client.subscriptions.get(
        item.subscriptionId
      );
      /* 
        Each item looks like:
      
        {
          id: '/subscriptions/123456',
          subscriptionId: '123456',
          displayName: 'YOUR-SUBSCRIPTION-NAME',
          state: 'Enabled',
          subscriptionPolicies: {
            locationPlacementId: 'Internal_2014-09-01',
            quotaId: 'Internal_2014-09-01',
            spendingLimit: 'Off'
          },
          authorizationSource: 'RoleBased'
        },
    */
      console.log(subscriptionDetails);
    }
  } catch (err) {
    console.error(JSON.stringify(err));
  }
}

listSubscriptions()
  .then(() => {
    console.log("done");
  })
  .catch((ex) => {
    console.log(ex);
  });

DefaultAzureCredential uygulama için yapılandırılan kimlik doğrulama mekanizmasını otomatik olarak algılar ve uygulamanın Kimliğini Azure'da doğrulamak için gerekli belirteçleri alır. Bir uygulama birden fazla SDK istemcisi kullanıyorsa, her SDK istemci nesnesiyle aynı kimlik bilgisi nesnesi kullanılabilir.