Azure CLI ile Azure hizmet sorumlusu oluşturma

Azure hizmetlerini kullanan otomatikleştirilmiş araçlar her zaman kısıtlı erişime sahip olmalıdır. Azure, uygulamaların tam ayrıcalığa sahip kullanıcılar olarak oturum açmasına izin vermek yerine hizmet sorumlularını sunuyor.

Azure hizmet sorumlusu nedir?

Azure hizmet sorumlusu, Azure kaynaklarına erişen uygulamalar, barındırılan hizmetler ve otomatikleştirilmiş araçlar ile kullanılmak için oluşturulan bir kimliktir. Bu erişim, hizmet sorumlusuna atanan roller tarafından kısıtlanır ve hangi kaynaklara hangi düzeyde erişilebileceğini kontrol edebilirsiniz. Güvenlik nedeniyle, otomatikleştirilmiş araçların kullanıcı kimliği ile oturum açmalarına izin vermek yerine her zaman hizmet sorumlularını kullanmanız önerilir.

Bu makalede, Azure CLI ile bir Azure hizmet sorumlusu oluşturma, bu konuda bilgi alma ve sıfırlama adımları gösterilmektedir.

1. Hizmet sorumlusu oluşturma

az ad sp create-for-rbac komutuyla bir Azure hizmet sorumlusu oluşturun.

appId ve tenant anahtarları çıktısında az ad sp create-for-rbac görünür ve hizmet sorumlusu kimlik doğrulamasında kullanılır. Değerlerini kaydedin, ancak az ad sp list ile herhangi bir noktada alınabilirler.

Hizmet sorumlusu oluştururken, kullanacağınız oturum açma kimlik doğrulaması türünü seçebilirsiniz. Azure hizmet sorumluları için iki tür kimlik doğrulaması sağlanır: parola tabanlı kimlik doğrulaması ve sertifika tabanlı kimlik doğrulaması.

Uyarı

komutunu kullanarak az ad sp create-for-rbac bir Azure hizmet sorumlusu oluşturduğunuzda çıkış, korumanız gereken kimlik bilgilerini içerir. Bu kimlik bilgilerini kodunuza eklemediğinizden emin olun veya kaynak denetiminizdeki kimlik bilgilerini denetleyin. Alternatif olarak, kimlik bilgilerini kullanma gereksinimini önlemek için varsa yönetilen kimlikleri kullanmayı göz önünde bulundurun.

Güvenliği aşılmış bir hizmet sorumlusu riskini azaltmak için daha belirli bir rol atayın ve kapsamları bir kaynak veya kaynak grubuna daraltın. Daha fazla bilgi için bkz. Rol ataması ekleme adımları.

Parola tabanlı kimlik doğrulaması

Parola tabanlı kimlik doğrulaması ile sizin için rastgele bir parola oluşturulur. Parametre --name değeri belirtmezseniz, sizin için zaman damgası içeren bir ad oluşturulur. Bu değerin varsayılan değeri olmadığından belirtmelisiniz --scopes . İsterseniz rol atamasını daha sonra az role assignment create komutunu kullanarak ayarlayabilirsiniz.

# Create a service principal with required parameter
az ad sp create-for-rbac --scopes /subscriptions/mySubscriptionID

# Create a service principal for a resource group using a preferred name and role
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role reader \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName

Değişkenleri kullanarak bir hizmet sorumlusu da oluşturabilirsiniz.

let "randomIdentifier=$RANDOM*$RANDOM"  
servicePrincipalName="msdocs-sp-$randomIdentifier"
roleName="azureRoleName"
subscriptionID=$(az account show --query id -o tsv)
# Verify the ID of the active subscription
echo "Using subscription ID $subscriptionID"
resourceGroup="myResourceGroupName"

echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup"
az ad sp create-for-rbac --name $servicePrincipalName --role $roleName --scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup

Parola kimlik doğrulamasına sahip bir hizmet sorumlusunun çıktısı password anahtarı içerir. Bu değeri kopyaladığınızdan emin olun ; alınamıyor. Parolayı kaybederseniz hizmet sorumlusu kimlik bilgilerini sıfırlayın.

Sertifika tabanlı kimlik doğrulaması

Sertifika tabanlı kimlik doğrulaması için parametresini --cert kullanın. Bu parametre, var olan bir sertifikayı tutmanızı gerektirir. Bu hizmet sorumlusunu kullanan tüm araçların sertifikanın özel anahtarına erişimi olduğundan emin olun. Sertifikalar PEM, CER veya DER gibi bir ASCII biçiminde olmalıdır. Sertifikayı dize olarak geçirin veya dosyadan sertifikayı yüklemek için biçimini kullanın @path .

Not

PEM dosyası kullanılırken, CERTIFICATE dosyasının içindeki ÖZEL ANAHTARa eklenmelidir.

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert "-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----"
az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert @/path/to/cert.pem

Parametresi, --keyvault Azure Key Vault bir sertifika kullanmak için eklenebilir. Bu durumda, --cert değer sertifikanın adıdır.

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --cert certificateName \
                         --keyvault vaultName

Kimlik doğrulaması için otomatik olarak imzalanan bir sertifika oluşturmak için parametresini --create-cert kullanın:

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --create-cert

Konsol çıkışı:

Creating a role assignment under the scopes of "/subscriptions/myId"
Please copy C:\myPath\myNewFile.pem to a safe place.
When you run 'az login', provide the file path in the --password parameter
{
  "appId": "myAppId",
  "displayName": "myDisplayName",
  "fileWithCertAndPrivateKey": "C:\\myPath\\myNewFile.pem",
  "name": "http://myName",
  "password": null,
  "tenant": "myTenantId"
}

Yeni PEM dosyasının içeriği:

-----BEGIN PRIVATE KEY-----
myPrivateKeyValue
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
myCertificateValue
-----END CERTIFICATE-----

Not

az ad sp create-for-rbac --create-cert komutu, hizmet sorumlusunu ve bir PEM dosyasını oluşturur. PEM dosyası doğru biçimlendirilmiş bir ÖZEL ANAHTAR ve SERTIFIKA içeriyor.

Parametresi, --keyvault sertifikayı Azure Key Vault depolamak için eklenebilir. kullanırken --keyvault``--cert parametresi gereklidir.

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role roleName \
                         --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName \
                         --create-cert \
                         --cert certificateName \
                         --keyvault vaultName

Sertifikayı Key Vault depolamadığınız sürece çıkış anahtarı içerirfileWithCertAndPrivateKey. Bu anahtarın değeri, oluşturulan sertifikanın nerede depolandığını belirtir. Sertifikayı güvenli bir konuma kopyaladığınızdan emin olun veya bu hizmet sorumlusuyla oturum açamazsınız.

Sertifikanın özel anahtarına erişimi kaybederseniz hizmet sorumlusu kimlik bilgilerini sıfırlayın.

Key Vault'dan sertifika alma

Key Vault'de depolanan sertifika için az keyvault secret show ile özel anahtarıyla sertifikayı alın ve pem dosyasına dönüştürün. Key Vault, sertifikanın gizli dizisinin adı sertifika adıyla aynıdır.

az keyvault secret download --file /path/to/cert.pfx --vault-name VaultName --name CertName --encoding base64
openssl pkcs12 -in cert.pfx -passin pass: -out cert.pem -nodes

2. Mevcut hizmet sorumlusunu alma

Kiracıdaki hizmet sorumlularının listesi az ad sp list ile alınabilir. Varsayılan olarak bu komut kiracınız için ilk 100 hizmet sorumlusunu döndürür. Kiracının hizmet sorumlularının tümünü almak için parametresini --all kullanın. Bu listeyi almak uzun sürebilir, bu nedenle listeyi aşağıdaki parametrelerden biriyle filtrelemeniz önerilir:

  • --display-name sağlanan adla eşleşen bir ön eke sahip hizmet sorumlularına istekte bulunur. Hizmet sorumlusunun görünen adı, oluşturma sırasında parametresiyle --name ayarlanan değerdir. Hizmet sorumlusu oluşturma sırasında ayarlamadıysanız --name , ad ön eki olur azure-cli-.
  • --spn tam hizmet sorumlusu adı eşleştirmesi filtrelerini kullanın. Hizmet asıl adı her zaman ile https://başlar. kullandığınız --name değer bir URI değilse, bu değerin https:// ardından görünen ad eklenir.
  • --show-mine yalnızca oturum açmış kullanıcı tarafından oluşturulan hizmet sorumlularını istemektedir.
  • --filter bir OData filtresi alır ve sunucu tarafı filtreleme gerçekleştirir. Bu yöntem, CLI --query parametresiyle istemci tarafı filtrelemesi üzerinden önerilir. OData filtreleri hakkında bilgi edinmek için bkz. Filtreler için OData ifadesi söz dizimi.

Hizmet sorumlusu nesneleri için döndürülen bilgiler ayrıntılıdır. Yalnızca oturum açma için gerekli bilgileri almak için sorgu dizesini [].{id:appId, tenant:appOwnerTenantId}kullanın. Örneğin, şu anda oturum açmış olan kullanıcı tarafından oluşturulan tüm hizmet sorumlularının oturum açma bilgilerini almak için:

az ad sp list --show-mine --query "[].{id:appId, tenant:appOwnerTenantId}"

Önemli

az ad sp list veya az ad sp show kullanıcı ve kiracıyı alır, ancak herhangi bir kimlik doğrulama gizli dizisini veya kimlik doğrulama yöntemini alamaz. Key Vault içindeki sertifikaların gizli dizileri az keyvault secret show ile alınabilir, ancak varsayılan olarak başka hiçbir gizli dizi depolanmaz. Kimlik doğrulama yöntemini veya gizli diziyi unutursanız hizmet sorumlusu kimlik bilgilerini sıfırlayın.

3. Hizmet sorumlusu rollerini yönetme

Azure CLI rol atamalarını yönetmek için aşağıdaki komutlara sahiptir:

Katkıda Bulunan rolü, bir Azure hesabını okumak ve bu hesaba yazmak için tam izinlere sahiptir. Okuyucu rolü daha kısıtlayıcıdır, yalnızca salt okunur erişime sahiptir. Rol Tabanlı Erişim Denetimi (RBAC) ve roller hakkında daha fazla bilgi için bkz. RBAC: Yerleşik roller.

Bu örnek Okuyucu rolünü ekler ve Katkıda Bulunan rolünü kaldırır:

az role assignment create --assignee appID \
                          --role Reader \
                          --scope /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName

az role assignment delete --assignee appID \
                          --role Contributor \
                          --scope /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName

Bir rol eklendiğinde, önceden atanmış izinler kısıtlanmaz. Hizmet sorumlusunun izinlerini kısıtlarken, daha önce atanmışsa Katkıda Bulunan rolü kaldırılmalıdır.

Atanan roller listelenerek değişiklikler doğrulanabilir:

az role assignment list --assignee appID

4. Hizmet sorumlusu kullanarak oturum açma

Oturum açarak yeni hizmet sorumlusunun kimlik bilgilerini ve izinlerini test edin. Hizmet sorumlusuyla oturum açmak için , tenantve kimlik bilgilerine ihtiyacınız vardırappId.

Hizmet sorumlusunda parola kullanarak oturum açmak için:

az login --service-principal --username appID --password PASSWORD --tenant tenantID

Sertifikayla oturum açmak için, sertifikanın ASCII biçiminde yerel olarak PEM veya DER dosyası olarak kullanılabilir olması gerekir. PEM dosyası kullanılırken , ÖZEL ANAHTAR ve SERTİFİkA dosyasının içinde birlikte eklenmelidir.

az login --service-principal --username appID --tenant tenantID --password /path/to/cert

Hizmet sorumlusuyla oturum açma hakkında daha fazla bilgi edinmek için bkz. Azure CLI ile oturum açma.

5. Hizmet sorumlusu kullanarak kaynak oluşturma

Aşağıdaki bölümde, aşağıdaki komutları kullanarak hizmet sorumlusuyla Azure Depolama için kaynak oluşturma örneği verilmiştir:

Bir hizmet sorumlusuyla oturum açmak için, appIDhizmet sorumlunuzu oluştururken yanıt olarak , tenantIDve password döndürmelisiniz.

  1. Hizmet sorumlusu olarak oturum açın.

    az login --service-principal --username appID --password PASSWORD --tenant tenantID
    
  2. Aynı hızlı başlangıç, öğretici veya geliştirme projesi için kullanılan tüm kaynakları barındıracak bir kaynak grubu oluşturun.

    az group create --location westus --name myResourceGroupName
    
  3. Depolama hesabı oluşturma.

    Azure Depolama için parametresi için <KIND> geçerli değerler şunlardır:

    • BlobStorage
    • BlockBlobStorage
    • FileStorage
    • Depolama
    • StorageV2
    az storage account create --name myStorageAccountName --resource-group myResourceGroupName --kind <KIND> --sku F0 --location westus --yes
    
  4. Azure depolama hesabında kimlik doğrulaması yapmak için kodunuzda kullandığınız kaynak anahtarlarını alın.

    az storage account keys list --name myStorageAccountName --resource-group myResourceGroupName
    

6. Kimlik bilgilerini sıfırlama

Hizmet sorumlusunun kimlik bilgilerini kaybederseniz az ad sp credential reset komutunu kullanın. Reset komutu ile aynı parametreleri az ad sp create-for-rbacalır.

az ad sp credential reset --name myServicePrincipal_appID_or_name

7. Sorun giderme

Yetersiz ayrıcalıklar

Hesabınız hizmet sorumlusu oluşturma iznine sahip değilse az ad sp create-for-rbac, “İşlemi tamamlamak için yeterli ayrıcalık yok” iletisini içeren bir hata döndürür. Hizmet sorumlusu oluşturmak için Azure Active Directory yöneticinizle iletişime geçin.

Geçersiz kiracı

Geçersiz bir abonelik kimliği belirttiyseniz "İsteğin aboneliği veya geçerli bir kiracı düzeyi kaynak sağlayıcısı yoktu" hata iletisini görürsünüz. Değişkenleri kullanıyorsanız, bash komutunu kullanarak echo başvuru komutuna geçirilen değeri görün. Aboneliğinizi değiştirmek için az account set komutunu kullanın veya Azure CLI ile Azure aboneliklerini yönetme hakkında bilgi edinin.

Kaynak grubu bulunamadı

Geçersiz bir kaynak grubu adı belirttiyseniz, "Kaynak grubu 'ad' bulunamadı" hata iletisini görürsünüz. Değişkenleri kullanıyorsanız, hem aboneliğe hem de başvuru komutlarına geçirilen değeri görmek için Bash echo komutunu kullanın. Geçerli aboneliğin kaynak gruplarını görmek için az group list komutunu kullanın veya Azure CLI ile Azure kaynak gruplarını yönetmeyi öğrenin.

Eylem gerçekleştirmek için yetkilendirme

Hesabınızın rol atama izni yoksa, hesabınızın “'Microsoft.Authorization/roleAssignments/write' eylemini gerçekleştirme yetkisi olmadığını” belirten bir hata iletisiyle karşılaşırsınız. Rolleri yönetmek için Azure Active Directory yöneticinizle iletişime geçin.

Ayrıca bkz.