Megosztás a következőn keresztül:


Felügyelt identitáshoz való hozzáférés hozzárendelése egy alkalmazásszerepkörhöz

Az Azure-erőforrások felügyelt identitásai identitást biztosítanak az Azure-szolgáltatások számára a Microsoft Entra ID-ban. Anélkül működnek, hogy hitelesítő adatokra van szükségük a kódban. Az Azure-szolgáltatások ezt az identitást használják a Microsoft Entra-hitelesítést támogató szolgáltatások hitelesítésére. Az alkalmazásszerepkörök a szerepköralapú hozzáférés-vezérlés egy formáját biztosítják, és lehetővé teszik, hogy egy szolgáltatás engedélyezési szabályokat implementáljon.

Feljegyzés

Az alkalmazás által kapott jogkivonatokat a mögöttes infrastruktúra gyorsítótárazza. Ez azt jelenti, hogy a felügyelt identitás szerepköreinek bármilyen módosítása jelentős időt vehet igénybe a feldolgozáshoz. További információ: A felügyelt identitások hitelesítéshez való használatának korlátozása.

Ebből a cikkből megtudhatja, hogyan rendelhet hozzá felügyelt identitást egy másik alkalmazás által közzétett alkalmazásszerepkörhöz a Microsoft Graph PowerShell SDK használatával.

Előfeltételek

Felügyelt identitáshozzáférés hozzárendelése egy másik alkalmazás alkalmazásszerepköréhez a PowerShell használatával

A példaszkriptek futtatásához két lehetősége van:

  1. Felügyelt identitás engedélyezése Azure-erőforráson, például Azure-beli virtuális gépen.

  2. Keresse meg a felügyelt identitás szolgáltatásnév objektumazonosítóját.

    A rendszer által hozzárendelt felügyelt identitások esetében az objektumazonosító az Azure Portalon található az erőforrás Identitás lapján. Az objektumazonosítót a következő PowerShell-szkripttel is megkeresheti. Szüksége lesz az 1. lépésben létrehozott erőforrás erőforrás-azonosítójára, amely az Azure Portalon érhető el az erőforrás Tulajdonságok lapján.

    $resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}'
    (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
    

    Felhasználó által hozzárendelt felügyelt identitás esetén a felügyelt identitás objektumazonosítóját az Azure Portalon találja az erőforrás Áttekintés lapján. Az objektumazonosítót a következő PowerShell-szkripttel is megkeresheti. Szüksége lesz a felhasználó által hozzárendelt felügyelt identitás erőforrás-azonosítójára.

    $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. Hozzon létre egy új alkalmazásregisztrációt annak a szolgáltatásnak a megjelenítéséhez, amelybe a felügyelt identitás kérést küld.

    • Ha az alkalmazásszerepkör-támogatást a felügyelt identitásnak elérhetővé tevő API vagy szolgáltatás már rendelkezik szolgáltatásnévvel a Microsoft Entra-bérlőben, hagyja ki ezt a lépést. Például abban az esetben, ha hozzáférést szeretne adni a felügyelt identitásnak a Microsoft Graph API-hoz.
  4. Keresse meg a szolgáltatásalkalmazás szolgáltatásnév objektumazonosítóját. Ezt az Azure Portalon találja.

    • Nyissa meg például a Microsoft Entra-azonosítót, és nyissa meg a Nagyvállalati alkalmazások lapot. Ezután keresse meg az alkalmazást, és keresse meg az objektumazonosítót.
    • A szolgáltatásnév objektumazonosítóját megjelenítendő neve alapján is megtalálhatja a következő PowerShell-szkripttel:
    $serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
    

    Feljegyzés

    Az alkalmazások megjelenítendő nevei nem egyediek, ezért ellenőriznie kell, hogy a megfelelő alkalmazás szolgáltatásnevet szerezte-e be.

  5. Adjon hozzá egy alkalmazásszerepkört az előző lépésben létrehozott alkalmazáshoz. Ezután létrehozhatja a szerepkört az Azure Portalon vagy a Microsoft Graph használatával.

    • Hozzáadhat például egy alkalmazásszerepkört a következő lekérdezés futtatásával a Graph Explorerben:
    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. Rendelje hozzá az alkalmazásszerepkört a felügyelt identitáshoz. Az alkalmazásszerepkör hozzárendeléséhez a következő információkra lesz szüksége:

    • managedIdentityObjectId: a felügyelt identitás szolgáltatásnévének objektumazonosítója, amelyet az előző lépésben talált.
    • serverServicePrincipalObjectId: a kiszolgálóalkalmazás szolgáltatásnévének objektumazonosítója, amelyet a 4. lépésben talált.
    • appRoleId: a kiszolgálóalkalmazás által közzétett alkalmazásszerepkör azonosítója, amelyet az 5. lépésben hozott létre – a példában az alkalmazásszerepkör azonosítója.00000000-0000-0000-0000-000000000000
    • A szerepkör-hozzárendelés hozzáadásához hajtsa végre a következő PowerShell-parancsot:
    New-MgServicePrincipalAppRoleAssignment `
        -ServicePrincipalId $serverServicePrincipalObjectId `
        -PrincipalId $managedIdentityObjectId `
        -ResourceId $serverServicePrincipalObjectId `
        -AppRoleId $appRoleId
    

Példaszkript befejezése

Ez a példaszkript bemutatja, hogyan rendelhet hozzá egy Azure-webalkalmazás felügyelt identitását egy alkalmazásszerepkörhöz.

# 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

Felügyelt identitáshoz való hozzáférés hozzárendelése egy másik alkalmazás alkalmazásszerepköréhez a parancssori felület használatával

  1. Felügyelt identitás engedélyezése Azure-erőforrásokon, például Azure-beli virtuális gépeken.

  2. Keresse meg a felügyelt identitás szolgáltatásnév objektumazonosítóját.

    • A rendszer által hozzárendelt felügyelt identitások esetében az objektumazonosító az Azure Portalon található az erőforrás Identitás lapján.
    • Az objektumazonosítót az alábbi szkripttel is megkeresheti. Szüksége lesz az előző lépésben létrehozott erőforrás erőforrás-azonosítójára, amely az Azure Portalon érhető el az erőforrás Tulajdonságok lapján.
    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"
    
    • Felhasználó által hozzárendelt felügyelt identitás esetén a felügyelt identitás objektumazonosítóját az Azure Portalon találja az erőforrás Áttekintés lapján. Az objektumazonosítót az alábbi szkripttel is megkeresheti. Szüksége lesz a felhasználó által hozzárendelt felügyelt identitás erőforrás-azonosítójára.
    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. Hozzon létre egy új alkalmazásregisztrációt annak a szolgáltatásnak a megjelenítéséhez, amelyhez a felügyelt identitás kérést küld.

    • Ha az alkalmazásszerepkör-támogatást a felügyelt identitásnak elérhetővé tevő API vagy szolgáltatás már rendelkezik szolgáltatásnévvel a Microsoft Entra-bérlőben, hagyja ki ezt a lépést.
  4. Keresse meg a szolgáltatásalkalmazás szolgáltatásnév objektumazonosítóját. Ezt az Azure Portalon találja.

    • Nyissa meg a Microsoft Entra-azonosítót, és nyissa meg a Vállalati alkalmazások lapot, majd keresse meg az alkalmazást, és keresse meg az objektumazonosítót.
    • A szolgáltatásnév objektumazonosítóját a megjelenítendő név alapján is megtalálhatja a következő szkripttel:
    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"
    

    Feljegyzés

    Az alkalmazások megjelenítendő nevei nem egyediek, ezért ellenőriznie kell, hogy a megfelelő alkalmazás szolgáltatásnevet szerezte-e be.

    Az objektumazonosítót az alkalmazásregisztráció egyedi alkalmazásazonosítójával is megtalálhatja:

    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. Adjon hozzá egy alkalmazásszerepkört az előző lépésben létrehozott alkalmazáshoz. A szerepkört az Azure Portalon vagy a Microsoft Graph használatával hozhatja létre. Hozzáadhat például egy ilyen alkalmazásszerepkört:

    {
        "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. Rendelje hozzá az alkalmazásszerepkört a felügyelt identitáshoz. Az alkalmazásszerepkör hozzárendeléséhez a következő információkra lesz szüksége:

    • managedIdentityObjectId: a felügyelt identitás szolgáltatásnévének objektumazonosítója, amelyet a 2. lépésben talált.
    • serverServicePrincipalObjectId: a kiszolgálóalkalmazás szolgáltatásnévének objektumazonosítója, amelyet a 4. lépésben talált.
    • appRoleId: a kiszolgálóalkalmazás által közzétett alkalmazásszerepkör azonosítója, amelyet az 5. lépésben hozott létre – a példában az alkalmazásszerepkör azonosítója.00000000-0000-0000-0000-000000000000
  7. A szerepkör-hozzárendelés hozzáadásához hajtsa végre a következő szkriptet. Ez a funkció nem érhető el közvetlenül az Azure CLI-n, és itt egy REST-parancsot használ:

    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\"}"
    

Következő lépések