Aracılığıyla paylaş


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.

Not

Uygulamanızın aldığı belirteçler, temel alınan altyapı tarafından önbelleğe alınır. Bu, yönetilen kimliğin rollerinde yapılan tüm değişikliklerin işlenmesinin önemli ölçüde zaman alabildiği anlamına gelir. 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

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

Örnek betikleri çalıştırmak için iki seçeneğiniz vardır:

  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öndermesini istediğiniz hizmeti temsil eden 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.
  4. Hizmet uygulamasının hizmet sorumlusunun nesne kimliğini bulun. Bunu Azure portalını kullanarak bulabilirsiniz.

    • Örneğin, 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
    

    Not

    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. Önceki adımda oluşturduğunuz uygulamaya bir uygulama rolü ekleyin. Ardından rolü Azure portalını veya Microsoft Graph'ı 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: Önceki 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 00000000-0000-0000-0000-000000000000.
    • 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
    

Tam örnek betik

Bu örnek betik, bir Azure web uygulamasının yönetilen kimliğini uygulama rolüne nasıl atayabileceğinizi 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

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

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

  1. Azure sanal makineleri 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 betiği de kullanabilirsiniz. Önceki adımda oluşturduğunuz kaynağın kaynak kimliğine ihtiyacınız olacaktır. Bu kimlik, kaynağın Özellikler sayfasındaki Azure portalında kullanılabilir.
    resourceIdWithManagedIdentity="/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}"
    
    oidForMI=$(az resource show --ids $resourceIdWithManagedIdentity --query "identity.principalId" -o tsv | tr -d '[:space:]')
    echo "object id for managed identity is: $oidForMI"
    
    • 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 betiği 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}"
    
    oidForMI=$(az resource show --id $userManagedIdentityResourceId --query "properties.principalId" -o tsv | tr -d '[:space:]')
    echo "object id for managed identity is: $oidForMI"
    
  3. Yönetilen kimliğinizin istek gönderdiği hizmeti temsil eden 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.
  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 betiği kullanarak hizmet sorumlusunun nesne kimliğini görünen adına göre de bulabilirsiniz:
    appName="{name for your application}"
    serverSPOID=$(az ad sp list --filter "displayName eq '$appName'" --query '[0].id' -o tsv | tr -d '[:space:]')
    echo "object id for server service principal is: $serverSPOID"
    

    Not

    Uygulamaların görünen adları benzersiz değildir, bu nedenle doğru uygulamanın hizmet sorumlusunu aldığınızı doğrulamanız gerekir.

    Veya nesne kimliğini, uygulama kaydınızın benzersiz Uygulama Kimliğine göre bulabilirsiniz:

    appID="{application id for your application}"
    serverSPOID=$(az ad sp list --filter "appId eq '$appID'" --query '[0].id' -o tsv | tr -d '[:space:]')
    echo "object id for server service principal is: $serverSPOID"
    
  5. Önceki adımda oluşturduğunuz uygulamaya bir uygulama rolü ekleyin. Rolü Azure portalını veya Microsoft Graph'i kullanarak oluşturabilirsiniz. Örneğin, aşağıdaki gibi bir uygulama rolü ekleyebilirsiniz:

    {
        "allowedMemberTypes": [
            "Application"
        ],
        "displayName": "Read data from MyApi",
        "id": "0566419e-bb95-4d9d-a4f8-ed9a0f147fa6",
        "isEnabled": true,
        "description": "Allow the application to read data as itself.",
        "value": "MyApi.Read.All"
    }
    
  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 00000000-0000-0000-0000-000000000000.
  7. Rol atamasını eklemek için aşağıdaki betiği yürütür. Bu işlev Azure CLI'da doğrudan kullanıma sunulmaz ve bunun yerine burada bir REST komutu kullanılır:

    roleguid="00000000-0000-0000-0000-000000000000"
    az rest -m POST -u https://graph.microsoft.com/v1.0/servicePrincipals/$oidForMI/appRoleAssignments -b "{\"principalId\": \"$oidForMI\", \"resourceId\": \"$serverSPOID\",\"appRoleId\": \"$roleguid\"}"
    

Sonraki adımlar