Migrace aplikace pro použití bez hesel s Využitím služby Azure Cosmos DB for NoSQL

Žádosti o aplikace do služby Azure Cosmos DB for NoSQL musí být ověřeny. I když existuje několik možností ověřování ve službě Azure Cosmos DB, měli byste v aplikacích určit prioritu připojení bez hesla, pokud je to možné. Tradiční metody ověřování, které používají připojovací řetězec s hesly nebo tajnými klíči, vytvářejí bezpečnostní rizika a komplikace. Další informace o výhodách přechodu na připojení bez hesla najdete v centru služeb Azure.

Následující kurz vysvětluje, jak migrovat existující aplikaci pro připojení ke službě Azure Cosmos DB for NoSQL pomocí připojení bez hesel místo řešení založeného na klíči.

Konfigurace rolí a uživatelů pro místní ověřování vývoje

Při vývoji místně s ověřováním bez hesla se ujistěte, že uživatelský účet, který se připojuje ke službě Cosmos DB, má přiřazenou roli se správnými oprávněními k provádění operací s daty. Azure Cosmos DB for NoSQL v současné době nezahrnuje předdefinované role pro operace s daty, ale můžete si vytvořit vlastní pomocí Azure CLI nebo PowerShellu.

Role se skládají z kolekce oprávnění nebo akcí, které může uživatel provádět, například čtení, zápis a odstranění. Další informace o konfiguraci řízení přístupu na základě role (RBAC) najdete v dokumentaci ke konfiguraci zabezpečení služby Cosmos DB.

Vytvoření vlastní role

  1. Vytvořte roli pomocí az role definition create příkazu. Předejte název účtu služby Cosmos DB a skupinu prostředků následovanou textem JSON, který definuje vlastní roli. Následující příklad vytvoří roli PasswordlessReadWrite s oprávněními ke čtení a zápisu položek v kontejnerech Cosmos DB. Role je také vymezena na úroveň účtu pomocí /.

    az cosmosdb sql role definition create \
        --account-name <cosmosdb-account-name> \
        --resource-group  <resource-group-name> \
        --body '{
        "RoleName": "PasswordlessReadWrite",
        "Type": "CustomRole",
        "AssignableScopes": ["/"],
        "Permissions": [{
            "DataActions": [
                "Microsoft.DocumentDB/databaseAccounts/readMetadata",
                "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*",
                "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*"
            ]
        }]
    }'
    
  2. Po dokončení příkazu zkopírujte hodnotu ID z name pole a vložte ji někam pro pozdější použití.

  3. Přiřaďte roli, kterou jste vytvořili, k uživatelskému účtu nebo instančnímu objektu, který se připojí ke službě Cosmos DB. Během místního vývoje to bude váš vlastní účet, který se přihlašuje k vývojovému nástroji, jako je Visual Studio nebo Azure CLI. Pomocí příkazu načtěte az ad user podrobnosti o svém účtu.

    az ad user show --id "<your-email-address>"
    
  4. Zkopírujte hodnotu id vlastnosti z výsledků a vložte ji někam pro pozdější použití.

  5. Pomocí příkazu a ID, které jste zkopírovali dříve, přiřaďte vlastní roli, kterou jste vytvořili k uživatelskému účtu az cosmosdb sql role assignment create .

    az cosmosdb sql role assignment create \
        --account-name <cosmosdb-account-name> \
        --resource-group  <resource-group-name> \
        --scope "/" \
        --principal-id <your-user-id> \
        --role-definition-id <your-custom-role-id> 
    

Místní přihlášení k Azure

V případě místního vývoje se ujistěte, že jste ověřeni pomocí stejného účtu Microsoft Entra, ke kterému jste přiřadili roli. Ověřování můžete provést prostřednictvím oblíbených vývojových nástrojů, jako je Azure CLI nebo Azure PowerShell. Vývojové nástroje, pomocí kterých se můžete ověřovat, se liší v různých jazycích.

Přihlaste se k Azure přes Azure CLI pomocí následujícího příkazu:

az login

Migrace kódu aplikace pro použití připojení bez hesla

  1. Pokud chcete použít DefaultAzureCredential v aplikaci .NET, nainstalujte Azure.Identity balíček:

    dotnet add package Azure.Identity
    
  2. Do horní části souboru přidejte následující kód:

    using Azure.Identity;
    
  3. Identifikujte umístění v kódu, která vytvoří CosmosClient objekt pro připojení ke službě Azure Cosmos DB. Aktualizujte kód tak, aby odpovídal následujícímu příkladu.

    DefaultAzureCredential credential = new();
    
    using CosmosClient client = new(
        accountEndpoint: Environment.GetEnvironmentVariable("COSMOS_ENDPOINT"),
        tokenCredential: credential
    );
    

Místní spuštění aplikace

Po provedení těchto změn kódu spusťte aplikaci místně. Nová konfigurace by měla vyzvednout vaše místní přihlašovací údaje, jako je Azure CLI, Visual Studio nebo IntelliJ. Role, které jste přiřadili místnímu vývojovému uživateli v Azure, umožňují vaší aplikaci připojit se ke službě Azure místně.

Konfigurace hostitelského prostředí Azure

Jakmile je vaše aplikace nakonfigurovaná tak, aby používala připojení bez hesla a běží místně, může se stejný kód po nasazení do Azure ověřit ve službách Azure. Následující části vysvětlují, jak nakonfigurovat nasazenou aplikaci pro připojení ke službě Azure Cosmos DB pomocí spravované identity.

Vytvoření spravované identity

Spravovanou identitu přiřazenou uživatelem můžete vytvořit pomocí webu Azure Portal nebo Azure CLI. Vaše aplikace používá identitu k ověření v jiných službách.

  1. V horní části webu Azure Portal vyhledejte spravované identity. Vyberte výsledek spravovaných identit.
  2. V horní části stránky přehledu spravovaných identit vyberte + Vytvořit.
  3. Na kartě Základy zadejte následující hodnoty:
    • Předplatné: Vyberte požadované předplatné.
    • Skupina prostředků: Vyberte požadovanou skupinu prostředků.
    • Oblast: Vyberte oblast blízko vaší polohy.
    • Název: Zadejte rozpoznatelný název vaší identity, například MigrationIdentity.
  4. Vyberte Zkontrolovat a vytvořit v dolní části stránky.
  5. Po dokončení ověření vyberte Vytvořit. Azure vytvoří novou identitu přiřazenou uživatelem.

Po vytvoření prostředku vyberte Přejít k prostředku a zobrazte podrobnosti o spravované identitě.

A screenshot showing how to create a user assigned managed identity.

Přidružení spravované identity k webové aplikaci

Musíte nakonfigurovat webovou aplikaci tak, aby používala spravovanou identitu, kterou jste vytvořili. Přiřaďte identitu k aplikaci pomocí webu Azure Portal nebo Azure CLI.

Pomocí následujících kroků na webu Azure Portal přidružte identitu k vaší aplikaci. Stejný postup platí pro následující služby Azure:

  • Azure Spring Apps
  • Azure Container Apps
  • Virtuální počítače Azure
  • Azure Kubernetes Service
  1. Přejděte na stránku přehledu vaší webové aplikace.

  2. V levém navigačním panelu vyberte Identitu .

  3. Na stránce Identita přepněte na kartu Přiřazené uživatelem.

  4. Výběrem + Přidat otevřete informační nabídku Přidat spravovanou identitu přiřazenou uživatelem.

  5. Vyberte předplatné, které jste použili dříve k vytvoření identity.

  6. Vyhledejte migrationIdentity podle názvu a vyberte ji z výsledků hledání.

  7. Vyberte Přidat a přidružte identitu k vaší aplikaci.

    Screenshot showing how to create a user assigned identity.

Přiřazení rolí ke spravované identitě

Udělte spravovanou identitu oprávnění tím, že jí přiřadíte vlastní roli, kterou jste vytvořili, stejně jako jste to udělali u místního vývojového uživatele.

Pokud chcete přiřadit roli na úrovni prostředku pomocí Azure CLI, musíte nejprve načíst ID prostředku pomocí příkazu az cosmosdb show . Výstupní vlastnosti můžete filtrovat pomocí parametru --query .

az cosmosdb show \
    --resource-group '<resource-group-name>' \
    --name '<cosmosdb-name>' \
    --query id

Zkopírujte ID výstupu z předchozího příkazu. Role pak můžete přiřadit pomocí příkazu az role assignment v Azure CLI.

az role assignment create \
    --assignee "<your-managed-identity-name>" \
    --role "PasswordlessReadWrite" \
    --scope "<cosmosdb-resource-id>"

Aktualizace kódu aplikace

Musíte nakonfigurovat kód aplikace tak, aby hledal konkrétní spravovanou identitu, kterou jste vytvořili při nasazení do Azure. V některých scénářích explicitně nastavíte spravovanou identitu aplikace, aby se zabránilo náhodnému zjištění a použití jiných identit prostředí.

  1. Na stránce přehledu spravované identity zkopírujte hodnotu ID klienta do schránky.

  2. Použijte následující změny specifické pro jazyk:

    Vytvořte DefaultAzureCredentialOptions objekt a předejte ho .DefaultAzureCredential Nastavte vlastnost ManagedIdentityClientId na ID klienta.

    DefaultAzureCredential credential = new(
        new DefaultAzureCredentialOptions
        {
            ManagedIdentityClientId = managedIdentityClientId
        });
    
  3. Po provedení této změny znovu nasaďte kód do Azure, aby se aktualizace konfigurace použily.

Otestování aplikace

Po nasazení aktualizovaného kódu přejděte do hostované aplikace v prohlížeči. Vaše aplikace by se měla úspěšně připojit ke službě Cosmos DB. Mějte na paměti, že rozšíření přiřazení rolí v prostředí Azure může trvat několik minut. Vaše aplikace je teď nakonfigurovaná tak, aby běžela místně i v produkčním prostředí, aniž by vývojáři museli spravovat tajné kódy v samotné aplikaci.

Další kroky

V tomto kurzu jste zjistili, jak migrovat aplikaci na připojení bez hesla.

Podrobnější informace o konceptech probíraných v tomto článku najdete v následujících zdrojích informací: