Share via


Modern olvasó-erőforrás létrehozása és a Microsoft Entra-hitelesítés konfigurálása

Ez a cikk bemutatja, hogyan hozhat létre Modern olvasó erőforrást a megadott szkript használatával. Ez a szkript a Microsoft Entra-hitelesítést is konfigurálja. Minden alkalommal, amikor létrejön egy Modern olvasó erőforrás, akár ezzel a szkripttel, akár a portálon, Microsoft Entra-engedélyekkel kell konfigurálni.

A szkript létrehozza és konfigurálja az összes szükséges Modern olvasó és Microsoft Entra-erőforrást. A Microsoft Entra-hitelesítést azonban konfigurálhatja egy meglévő Modern olvasó-erőforráshoz is, ha már létrehozott egyet az Azure Portalon. A szkript először megkeresi az előfizetés meglévő Modern olvasó és Microsoft Entra-erőforrásait, és csak akkor hozza létre őket, ha még nem léteznek.

Egyes ügyfelek esetében előfordulhat, hogy több Modern olvasó erőforrást kell létrehozni a fejlesztéshez és az éles környezethez, vagy esetleg olyan régiókhoz, ahol a szolgáltatás üzembe van helyezve. Ezekben az esetekben többször is visszatérhet és használhatja a szkriptet, hogy különböző Modern olvasó erőforrásokat hozzon létre, és Microsoft Entra-engedélyekkel konfigurálja őket.

Jogosultságok

Az Azure-előfizetés felsorolt tulajdonosa rendelkezik az összes szükséges engedéllyel egy Modern olvasó erőforrás létrehozásához és a Microsoft Entra-hitelesítés konfigurálásához.

Ha ön nem tulajdonos, a következő hatókör-specifikus engedélyekre van szükség:

  • Közreműködő. Az Azure-előfizetéshez legalább közreműködői szerepkörrel kell rendelkeznie:

    Screenshot of contributor built-in role description.

  • Alkalmazásfejlesztő. Legalább egy alkalmazásfejlesztői szerepkört kell hozzárendelnie a Microsoft Entra-azonosítóhoz:

    Screenshot of the developer built-in role description.

További információért lásd: Microsoft Entra beépített szerepkörök.

PowerShell-erőforrások beállítása

  1. Először nyissa meg az Azure Cloud Shellt. Győződjön meg arról, hogy a Cloud Shell PowerShellre van állítva a bal felső legördülő menüben, vagy írja be a kívánt értéketpwsh.

  2. Másolja és illessze be a következő kódrészletet a rendszerhéjba.

    function Create-ImmersiveReaderResource(
        [Parameter(Mandatory=$true, Position=0)] [String] $SubscriptionName,
        [Parameter(Mandatory=$true)] [String] $ResourceName,
        [Parameter(Mandatory=$true)] [String] $ResourceSubdomain,
        [Parameter(Mandatory=$true)] [String] $ResourceSKU,
        [Parameter(Mandatory=$true)] [String] $ResourceLocation,
        [Parameter(Mandatory=$true)] [String] $ResourceGroupName,
        [Parameter(Mandatory=$true)] [String] $ResourceGroupLocation,
        [Parameter(Mandatory=$true)] [String] $AADAppDisplayName,
        [Parameter(Mandatory=$true)] [String] $AADAppIdentifierUri,
        [Parameter(Mandatory=$true)] [String] $AADAppClientSecretExpiration
    )
    {
        $unused = ''
        if (-not [System.Uri]::TryCreate($AADAppIdentifierUri, [System.UriKind]::Absolute, [ref] $unused)) {
            throw "Error: AADAppIdentifierUri must be a valid URI"
        }
    
        Write-Host "Setting the active subscription to '$SubscriptionName'"
        $subscriptionExists = Get-AzSubscription -SubscriptionName $SubscriptionName
        if (-not $subscriptionExists) {
            throw "Error: Subscription does not exist"
        }
        az account set --subscription $SubscriptionName
    
        $resourceGroupExists = az group exists --name $ResourceGroupName
        if ($resourceGroupExists -eq "false") {
            Write-Host "Resource group does not exist. Creating resource group"
            $groupResult = az group create --name $ResourceGroupName --location $ResourceGroupLocation
            if (-not $groupResult) {
                throw "Error: Failed to create resource group"
            }
            Write-Host "Resource group created successfully"
        }
    
        # Create an Immersive Reader resource if it doesn't already exist
        $resourceId = az cognitiveservices account show --resource-group $ResourceGroupName --name $ResourceName --query "id" -o tsv
        if (-not $resourceId) {
            Write-Host "Creating the new Immersive Reader resource '$ResourceName' (SKU '$ResourceSKU') in '$ResourceLocation' with subdomain '$ResourceSubdomain'"
            $resourceId = az cognitiveservices account create `
                            --name $ResourceName `
                            --resource-group $ResourceGroupName `
                            --kind ImmersiveReader `
                            --sku $ResourceSKU `
                            --location $ResourceLocation `
                            --custom-domain $ResourceSubdomain `
                            --query "id" `
                            -o tsv
    
            if (-not $resourceId) {
                throw "Error: Failed to create Immersive Reader resource"
            }
            Write-Host "Immersive Reader resource created successfully"
        }
    
        # Create an Microsoft Entra app if it doesn't already exist
        $clientId = az ad app show --id $AADAppIdentifierUri --query "appId" -o tsv
        if (-not $clientId) {
            Write-Host "Creating new Microsoft Entra app"
            $clientId = az ad app create --display-name $AADAppDisplayName --identifier-uris $AADAppIdentifierUri --query "appId" -o tsv
            if (-not $clientId) {
                throw "Error: Failed to create Microsoft Entra application"
            }
            Write-Host "Microsoft Entra application created successfully."
    
            $clientSecret = az ad app credential reset --id $clientId --end-date "$AADAppClientSecretExpiration" --query "password" | % { $_.Trim('"') }
            if (-not $clientSecret) {
                throw "Error: Failed to create Microsoft Entra application client secret"
            }
            Write-Host "Microsoft Entra application client secret created successfully."
    
            Write-Host "NOTE: To manage your Microsoft Entra application client secrets after this Immersive Reader Resource has been created please visit https://portal.azure.com and go to Home -> Microsoft Entra ID -> App Registrations -> (your app) '$AADAppDisplayName' -> Certificates and Secrets blade -> Client Secrets section" -ForegroundColor Yellow
        }
    
        # Create a service principal if it doesn't already exist
        $principalId = az ad sp show --id $AADAppIdentifierUri --query "id" -o tsv
        if (-not $principalId) {
            Write-Host "Creating new service principal"
            az ad sp create --id $clientId | Out-Null
            $principalId = az ad sp show --id $AADAppIdentifierUri --query "id" -o tsv
    
            if (-not $principalId) {
                throw "Error: Failed to create new service principal"
            }
            Write-Host "New service principal created successfully"
    
            # Sleep for 5 seconds to allow the new service principal to propagate
            Write-Host "Sleeping for 5 seconds"
            Start-Sleep -Seconds 5
        }
    
        Write-Host "Granting service principal access to the newly created Immersive Reader resource"
        $accessResult = az role assignment create --assignee $principalId --scope $resourceId --role "Cognitive Services Immersive Reader User"
        if (-not $accessResult) {
            throw "Error: Failed to grant service principal access"
        }
        Write-Host "Service principal access granted successfully"
    
        # Grab the tenant ID, which is needed when obtaining a Microsoft Entra token
        $tenantId = az account show --query "tenantId" -o tsv
    
        # Collect the information needed to obtain a Microsoft Entra token into one object
        $result = @{}
        $result.TenantId = $tenantId
        $result.ClientId = $clientId
        $result.ClientSecret = $clientSecret
        $result.Subdomain = $ResourceSubdomain
    
        Write-Host "`nSuccess! " -ForegroundColor Green -NoNewline
        Write-Host "Save the following JSON object to a text file for future reference."
        Write-Host "*****"
        if($clientSecret -ne $null) {
    
            Write-Host "This function has created a client secret (password) for you. This secret is used when calling Microsoft Entra to fetch access tokens."
            Write-Host "This is the only time you will ever see the client secret for your Microsoft Entra application, so save it now." -ForegroundColor Yellow
        }
        else{
            Write-Host "You will need to retrieve the ClientSecret from your original run of this function that created it. If you don't have it, you will need to go create a new client secret for your Microsoft Entra application. Please visit https://portal.azure.com and go to Home -> Microsoft Entra ID -> App Registrations -> (your app) '$AADAppDisplayName' -> Certificates and Secrets blade -> Client Secrets section." -ForegroundColor Yellow
        }
        Write-Host "*****`n"
        Write-Output (ConvertTo-Json $result)
    }
    
  3. Futtassa a függvényt Create-ImmersiveReaderResource, és adja meg a "<PARAMETER_VALUES>" helyőrzőket a saját értékeinek megfelelően.

    Create-ImmersiveReaderResource -SubscriptionName '<SUBSCRIPTION_NAME>' -ResourceName '<RESOURCE_NAME>' -ResourceSubdomain '<RESOURCE_SUBDOMAIN>' -ResourceSKU '<RESOURCE_SKU>' -ResourceLocation '<RESOURCE_LOCATION>' -ResourceGroupName '<RESOURCE_GROUP_NAME>' -ResourceGroupLocation '<RESOURCE_GROUP_LOCATION>' -AADAppDisplayName '<MICROSOFT_ENTRA_DISPLAY_NAME>' -AADAppIdentifierUri '<MICROSOFT_ENTRA_IDENTIFIER_URI>' -AADAppClientSecretExpiration '<MICROSOFT_ENTRA_CLIENT_SECRET_EXPIRATION>'
    

    A teljes parancs a következőhöz hasonlóan néz ki. Itt minden paramétert a saját sorába helyezünk az egyértelműség érdekében, így az egész parancs látható. Ne másolja és ne használja a parancsot az eredeti módon. Másolja és használja a parancsot a saját értékeivel. Ez a példa hamis értékeket tartalmaz a <PARAMETER_VALUES>. A sajátjai eltérőek lehetnek, mivel ezekhez az értékekhez saját neveket kell megadnia.

    Create-ImmersiveReaderResource
        -SubscriptionName 'MyOrganizationSubscriptionName'
        -ResourceName 'MyOrganizationImmersiveReader'
        -ResourceSubdomain 'MyOrganizationImmersiveReader'
        -ResourceSKU 'S0'
        -ResourceLocation 'westus2'
        -ResourceGroupName 'MyResourceGroupName'
        -ResourceGroupLocation 'westus2'
        -AADAppDisplayName 'MyOrganizationImmersiveReaderAADApp'
        -AADAppIdentifierUri 'api://MyOrganizationImmersiveReaderAADApp'
        -AADAppClientSecretExpiration '2021-12-31'
    
    Paraméter Megjegyzések
    SubscriptionName A Modern olvasó erőforráshoz használandó Azure-előfizetés neve. Erőforrás létrehozásához előfizetéssel kell rendelkeznie.
    ResourceName nevű erőforrásáról Alfanumerikusnak kell lennie, és tartalmazhat -, ha nem az - első vagy az utolsó karakter. A hossz nem haladhatja meg a 63 karaktert.
    ResourceSubdomain Egyéni altartományra van szükség a Modern olvasó erőforráshoz. Az altartományt az SDK használja, amikor meghívja a Modern olvasó szolgáltatást az Olvasó elindításához. Az altartománynak globálisan egyedinek kell lennie. Az altartománynak alfanumerikusnak kell lennie, és tartalmazhat -, feltéve, hogy nem az - első vagy az utolsó karakter. A hossz nem haladhatja meg a 63 karaktert. Ez a paraméter nem kötelező, ha az erőforrás már létezik.
    ResourceSKU Lehetőségek: S0 (Standard szint) vagy S1 (Oktatási/Nonprofit szervezetek). Ha többet szeretne megtudni az egyes elérhető termékváltozatokról, látogasson el az Azure AI-szolgáltatások díjszabási oldalára. Ez a paraméter nem kötelező, ha az erőforrás már létezik.
    ResourceLocation Beállítások: australiaeast, brazilsouth, canadacentral, centralindia, centralus, eastasiaeastus, eastus2, , francecentraljioindiawestnortheuropesouthcentralusswedencentralsoutheastasiasouthafricanorthnorwayeastnorthcentralusjapaneastjapanwestkoreacentralgermanywestcentral, switzerlandnorth, . switzerlandwestuaenorthuksouthwestcentraluswesteuropewestuswestus2westus3 Ez a paraméter nem kötelező, ha az erőforrás már létezik.
    ResourceGroupName Az erőforrások előfizetéseken belüli erőforráscsoportokban jönnek létre. Adja meg egy meglévő erőforráscsoport nevét. Ha az erőforráscsoport még nem létezik, a rendszer létrehoz egy újat ezzel a névvel.
    ResourceGroupLocation Ha az erőforráscsoport nem létezik, meg kell adnia egy helyet, ahol létre szeretné hozni a csoportot. A helyek listájának megkereséséhez futtassa a parancsot az account list-locations. Használja a visszaadott eredmény névtulajdonságát (szóközök nélkül). Ez a paraméter nem kötelező, ha az erőforráscsoport már létezik.
    AADAppDisplayName A Microsoft Entra alkalmazás megjelenítendő neve. Ha nem található egy meglévő Microsoft Entra-alkalmazás, létrejön egy új, ezzel a névvel ellátott alkalmazás. Ez a paraméter nem kötelező, ha a Microsoft Entra alkalmazás már létezik.
    AADAppIdentifierUri A Microsoft Entra alkalmazás URI-ja. Ha egy meglévő Microsoft Entra-alkalmazás nem található, létrejön egy új, ezzel az URI-val rendelkező alkalmazás. Például: api://MyOrganizationImmersiveReaderAADApp. Itt a Microsoft Entra URI-séma alapértelmezett előtagját api:// használjuk az ellenőrzött tartományok használatára vonatkozó Microsoft Entra-szabályzattal való kompatibilitás érdekében.
    AADAppClientSecretExpiration Az a dátum vagy dátumidő, amely után a Microsoft Entra Application Client Secret (jelszó) lejár (például "2020-12-31T11:59:59+00:00" vagy "2020-12-31"). Ez a függvény létrehoz egy ügyfélkulcsot.

    Ha az erőforrás létrehozása után szeretné kezelni a Microsoft Entra alkalmazás titkos kulcsait, látogasson el az Azure Portalra, és lépjen a Kezdőlapra>Microsoft Entra-azonosító>Alkalmazásregisztrációk –> (az alkalmazás) [AADAppDisplayName]>Tanúsítványok és titkos kódok szakasz –>Ügyfél titkos kulcsok szakaszára.

    Screenshot of the Azure portal Certificates and Secrets pane.

  4. Másolja a JSON-kimenetet egy szövegfájlba későbbi használatra. A kimenetnek az alábbihoz hasonlóan kell kinéznie.

    {
      "TenantId": "...",
      "ClientId": "...",
      "ClientSecret": "...",
      "Subdomain": "..."
    }
    

Következő lépés