Share via


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

Başka bir uygulamanın uygulama rolüne yönetilen kimlik erişimi atama

  1. Azure VM gibi bir Azure kaynağında yönetilen kimliği etkinleştirin.

  2. 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
    
  3. 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.

  4. 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.

  5. 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"
            }
        ]
    }
    
  6. 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 şeklindedir 0566419e-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