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çerir
fileWithCertAndPrivateKey. 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-namesağ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
--nameayarlanan değerdir. Hizmet sorumlusu oluşturma sırasında ayarlamadıysanız
--name, ad ön eki olur
azure-cli-.
--spntam hizmet sorumlusu adı eşleştirmesi filtrelerini kullanın. Hizmet asıl adı her zaman ile
https://başlar. kullandığınız
--namedeğer bir URI değilse, bu değerin
https://ardından görünen ad eklenir.
--show-mineyalnızca oturum açmış kullanıcı tarafından oluşturulan hizmet sorumlularını istemektedir.
--filterbir OData filtresi alır ve sunucu tarafı filtreleme gerçekleştirir. Bu yöntem, CLI
--queryparametresiyle 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ır
appId.
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.
Hizmet sorumlusu olarak oturum açın.
az login --service-principal --username appID --password PASSWORD --tenant tenantID
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
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
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.