PowerShell kullanarak uygulama rolüne yönetilen kimlik erişimi atama
Azure kaynakları için yönetilen kimlikler, Azure hizmetlerine Microsoft Entra Id'de bir kimlik sağlar. Kodunuzda kimlik bilgilerine gerek kalmadan çalışır. Azure hizmetleri, Microsoft Entra kimlik doğrulamasını destekleyen hizmetlerde kimlik doğrulaması yapmak için bu kimliği kullanır. Uygulama rolleri bir rol tabanlı erişim denetimi biçimi sağlar ve bir hizmetin yetkilendirme kuralları uygulamasına izin verir.
Dekont
Uygulamanızın aldığı belirteçler, temel alınan altyapı tarafından önbelleğe alınır; başka bir deyişle yönetilen kimliğin rollerinde yapılan tüm değişikliklerin etkili olması önemli ölçüde zaman alabilir. Daha fazla bilgi için bkz . Yetkilendirme için yönetilen kimlikleri kullanma sınırlaması.
Bu makalede, Microsoft Graph PowerShell SDK'sını kullanarak başka bir uygulama tarafından kullanıma sunulan bir uygulama rolüne yönetilen kimlik atamayı öğreneceksiniz.
Önkoşullar
- Azure kaynakları için yönetilen kimlikleri bilmiyorsanız genel bakış bölümüne göz atın. Sistem tarafından atanan ve kullanıcı tarafından atanan yönetilen kimlik arasındaki farkı gözden geçirmeyi unutmayın.
- Henüz bir Azure hesabınız yoksa, devam etmeden önce ücretsiz bir hesaba kaydolun.
- Örnek betikleri çalıştırmak için iki seçeneğiniz vardır:
- Kod bloklarının sağ üst köşesindeki Deneyin düğmesini kullanarak açabileceğiniz Azure Cloud Shell'i kullanın.
- Microsoft Graph PowerShell SDK'sının en son sürümünü yükleyerek betikleri yerel olarak çalıştırın.
Başka bir uygulamanın uygulama rolüne yönetilen kimlik erişimi atama
Azure VM gibi bir Azure kaynağında yönetilen kimliği etkinleştirin.
Yönetilen kimliğin hizmet sorumlusunun nesne kimliğini bulun.
Sistem tarafından atanan yönetilen kimlik için nesne kimliğini Kaynağın Kimlik sayfasında Azure portalında bulabilirsiniz. Nesne kimliğini bulmak için aşağıdaki PowerShell betiğini de kullanabilirsiniz. 1. adımda oluşturduğunuz kaynağın kaynak kimliğine ihtiyacınız vardır. Bu kimlik, kaynağın Özellikler sayfasındaki Azure portalında sağlanır.
$resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}' (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
Kullanıcı tarafından atanan yönetilen kimlik için yönetilen kimliğin nesne kimliğini Kaynağın Genel Bakış sayfasında Azure portalında bulabilirsiniz. Nesne kimliğini bulmak için aşağıdaki PowerShell betiğini de kullanabilirsiniz. Kullanıcı tarafından atanan yönetilen kimliğin kaynak kimliği gerekir.
$userManagedIdentityResourceId = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}' (Get-AzResource -ResourceId $userManagedIdentityResourceId).Properties.PrincipalId
Yönetilen kimliğinizin istek göndereceği hizmeti temsil etmek için yeni bir uygulama kaydı oluşturun. Yönetilen kimliğe uygulama rolü verme iznini kullanıma sunan API veya hizmetin Microsoft Entra kiracınızda zaten bir hizmet sorumlusu varsa, bu adımı atlayın. Örneğin, yönetilen kimliğe Microsoft Graph API'sine erişim vermek istiyorsanız bu adımı atlayabilirsiniz.
Hizmet uygulamasının hizmet sorumlusunun nesne kimliğini bulun. Bunu Azure portalını kullanarak bulabilirsiniz. Microsoft Entra Id'ye gidin ve Kurumsal uygulamalar sayfasını açın, ardından uygulamayı bulun ve Nesne Kimliği'ni arayın. Aşağıdaki PowerShell betiğini kullanarak hizmet sorumlusunun nesne kimliğini görünen adına göre de bulabilirsiniz:
$serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
Dekont
Uygulamaların görünen adları benzersiz değildir, bu nedenle doğru uygulamanın hizmet sorumlusunu aldığınızı doğrulamanız gerekir.
3. adımda oluşturduğunuz uygulamaya bir uygulama rolü ekleyin. Rolü Azure portalını veya Microsoft Graph'i kullanarak oluşturabilirsiniz. Örneğin, Graph gezgininde aşağıdaki sorguyu çalıştırarak bir uygulama rolü ekleyebilirsiniz:
PATCH /applications/{id}/ { "appRoles": [ { "allowedMemberTypes": [ "User", "Application" ], "description": "Read reports", "id": "1e250995-3081-451e-866c-0f6efef9c638", "displayName": "Report reader", "isEnabled": true, "value": "report.read" } ] }
Yönetilen kimliğe uygulama rolünü atayın. Uygulama rolünü atamak için aşağıdaki bilgilere ihtiyacınız olacaktır:
managedIdentityObjectId
: 2. adımda bulduğunuz yönetilen kimliğin hizmet sorumlusunun nesne kimliği.serverServicePrincipalObjectId
: 4. adımda bulduğunuz sunucu uygulamasının hizmet sorumlusunun nesne kimliği.appRoleId
: 5. adımda oluşturduğunuz sunucu uygulaması tarafından kullanıma sunulan uygulama rolünün kimliğidir. Örnekte, uygulama rolü kimliği şeklindedir0566419e-bb95-4d9d-a4f8-ed9a0f147fa6
.
Rol atamasını eklemek için aşağıdaki PowerShell komutunu yürütür:
New-MgServicePrincipalAppRoleAssignment ` -ServicePrincipalId $serverServicePrincipalObjectId ` -PrincipalId $managedIdentityObjectId ` -ResourceId $serverServicePrincipalObjectId ` -AppRoleId $appRoleId
Betiğin tamamı
Bu örnek betik, bir Azure web uygulamasının yönetilen kimliğini uygulama rolüne atamayı gösterir.
# Install the module.
# Install-Module Microsoft.Graph -Scope CurrentUser
# Your tenant ID (in the Azure portal, under Azure Active Directory > Overview).
$tenantID = '<tenant-id>'
# The name of your web app, which has a managed identity that should be assigned to the server app's app role.
$webAppName = '<web-app-name>'
$resourceGroupName = '<resource-group-name-containing-web-app>'
# The name of the server app that exposes the app role.
$serverApplicationName = '<server-application-name>' # For example, MyApi
# The name of the app role that the managed identity should be assigned to.
$appRoleName = '<app-role-name>' # For example, MyApi.Read.All
# Look up the web app's managed identity's object ID.
$managedIdentityObjectId = (Get-AzWebApp -ResourceGroupName $resourceGroupName -Name $webAppName).identity.principalid
Connect-MgGraph -TenantId $tenantId -Scopes 'Application.Read.All','Application.ReadWrite.All','AppRoleAssignment.ReadWrite.All','Directory.AccessAsUser.All','Directory.Read.All','Directory.ReadWrite.All'
# Look up the details about the server app's service principal and app role.
$serverServicePrincipal = (Get-MgServicePrincipal -Filter "DisplayName eq '$serverApplicationName'")
$serverServicePrincipalObjectId = $serverServicePrincipal.Id
$appRoleId = ($serverServicePrincipal.AppRoles | Where-Object {$_.Value -eq $appRoleName }).Id
# Assign the managed identity access to the app role.
New-MgServicePrincipalAppRoleAssignment `
-ServicePrincipalId $serverServicePrincipalObjectId `
-PrincipalId $managedIdentityObjectId `
-ResourceId $serverServicePrincipalObjectId `
-AppRoleId $appRoleId
Sonraki adımlar
- Azure kaynakları için yönetilen kimliğe genel bakış
- Azure VM'de yönetilen kimliği etkinleştirmek için bkz . PowerShell kullanarak Azure VM'de Azure kaynakları için yönetilen kimlikleri yapılandırma.