Hizmet sorumlularını kullanarak yerel geliştirme sırasında Azure hizmetlerinde JavaScript uygulamalarının kimliğini doğrulama
Bulut uygulamaları oluşturduğunuzda 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.
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 yöntem, 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 yöntem, 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 gereğini ö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. Azure portalını veya Azure CLI'yi kullanarak hizmet sorumluları oluşturabilirsiniz.
Azure portalında oturum açın ve şu adımları izleyin.
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.
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 atandığı gösterilmektedir.
4 - Yerel geliştirme ortamı değişkenlerini ayarlama
nesnesi, DefaultAzureCredential
ç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=00001111-aaaa-2222-bbbb-3333cccc4444
AZURE_TENANT_ID=ffffaaaa-5555-bbbb-6666-cccc7777dddd
AZURE_CLIENT_SECRET=Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2
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ğlanacak uygulama hizmeti sorumlusu bilgilerini almak için , AZURE_TENANT_ID
ve AZURE_CLIENT_SECRET
ortam AZURE_CLIENT_ID
değişkenlerini algılar ve bu değişkenleri ayarlar ve 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:
- sınıfını
DefaultAzureCredential
modülden içeri aktarın@azure/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.
// 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e',
subscriptionId: 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e',
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.