Sdílet prostřednictvím


Kurz: Vytvoření připojení bez hesla k databázové službě prostřednictvím konektoru Service Connector

Připojení bez hesla používají spravované identity pro přístup ke službám Azure. Díky tomuto přístupu nemusíte ručně sledovat a spravovat tajné kódy pro spravované identity. Tyto úlohy jsou bezpečně zpracovávány interně v Azure.

Service Connector umožňuje spravované identity v hostitelských službách aplikací, jako jsou Azure Spring Apps, Aplikace Azure Service a Azure Container Apps. Konektor služby také konfiguruje databázové služby, jako jsou Azure Database for PostgreSQL, Azure Database for MySQL, Azure SQL Database a DATABÁZE SQL v Microsoft Fabric, tak, aby přijímaly spravované identity.

V tomto kurzu pomocí Azure CLI provedete následující úlohy:

  • Zkontrolujte počáteční prostředí pomocí Azure CLI.
  • Vytvořte připojení bez hesla pomocí konektoru Service Connector.
  • Pro přístup k databázové službě použijte proměnné prostředí nebo konfigurace vygenerované konektorem služby Service Connector.

Požadavky

Jak začít používat Azure CLI:

Nainstalujte rozšíření konektoru služby bez hesla

Nainstalujte nejnovější rozšíření bez hesla konektoru Service Connector pro Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

Poznámka:

Spuštěním příkazu az version zkontrolujte, jestli je verze serviceconnector-passwordless verze 2.0.2 nebo vyšší. Abyste mohli upgradovat verzi rozšíření, možná budete muset nejprve upgradovat Azure CLI.

Vytvoření připojení bez hesla

Dále jako příklad použijeme službu Aplikace Azure Service k vytvoření připojení pomocí spravované identity.

Pokud používáte:

Poznámka:

Pokud používáte Azure Portal, přejděte do okna Konektor službyazure App Service, Azure Spring Apps nebo Azure Container Apps a vyberte Vytvořit a vytvořte připojení. Azure Portal automaticky vytvoří příkaz za vás a aktivuje spuštění příkazu v Cloud Shellu.

Následující příkaz Azure CLI používá --client-type parametr, může to být java, dotnet, python atd. Spusťte az webapp connection create postgres-flexible -h příkaz pro získání podporovaných typů klientů a zvolte ten, který odpovídá vaší aplikaci.

az webapp connection create postgres-flexible \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $POSTGRESQL_HOST \
    --database $DATABASE_NAME \
    --user-identity client-id=XX subs-id=XX \
    --client-type $CLIENT_TYPE

Flexibilní server Azure Database for MySQL vyžaduje spravovanou identitu přiřazenou uživatelem, aby bylo možné povolit ověřování Microsoft Entra. Další informace najdete v tématu Nastavení ověřování Microsoft Entra pro flexibilní server Azure Database for MySQL. K vytvoření spravované identity přiřazené uživatelem můžete použít následující příkaz:

USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGED_IDENTITY_NAME>
IDENTITY_RESOURCE_ID=$(az identity create \
    --name $USER_IDENTITY_NAME \
    --resource-group $RESOURCE_GROUP \
    --query id \
    --output tsv)

Důležité

Po vytvoření spravované identity přiřazené uživatelem požádejte globálního správce nebo správce privilegovaných rolí, aby této identitě udělil následující oprávnění:

  • User.Read.All
  • GroupMember.Read.All
  • Application.Read.All

Další informace najdete v části Oprávnění ověřováníslužby Active Directory .

Pak aplikaci připojte k databázi MySQL pomocí spravované identity přiřazené systémem pomocí konektoru služby.

Následující příkaz Azure CLI používá --client-type parametr. Spusťte příkaz pro az webapp connection create mysql-flexible -h získání podporovaných typů klientů a zvolte ten, který odpovídá vaší aplikaci.

az webapp connection create mysql-flexible \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $MYSQL_HOST \
    --database $DATABASE_NAME \
    --user-identity client-id=XX subs-id=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
    --client-type java

Následující příkaz Azure CLI používá --client-type parametr. Spusťte příkaz pro az webapp connection create sql -h získání podporovaných typů klientů a zvolte ten, který odpovídá vaší aplikaci.

az webapp connection create sql \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $SQL_HOST \
    --database $DATABASE_NAME \
    --user-identity client-id=XX subs-id=XX \
    --client-type dotnet

Následující příkaz Azure CLI používá --client-type parametr. Spusťte příkaz pro az webapp connection create fabricsql -h získání podporovaných typů klientů a zvolte ten, který odpovídá vaší aplikaci.

Důležité

K dokončení onboardingu se v současné době vyžaduje sdílení ručního přístupu. Viz Sdílení přístupu k databázi SQL ve Fabric.

az webapp connection create fabricsql \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --fabric-workspace-uuid $FABRIC_WORKSPACE_UUID \
    --fabric-sql-db-uuid $FABRIC_SQL_DB_UUID \
    --user-identity client-id=XX subs-id=XX \
    --client-type dotnet

Tento příkaz služby konektoru dokončí na pozadí následující úlohy:

  • Povolte spravovanou identitu přiřazenou systémem nebo přiřaďte identitu uživatele pro aplikaci $APPSERVICE_NAME hostované službou Aplikace Azure Service, Azure Spring Apps nebo Azure Container Apps.
  • Povolte ověřování Microsoft Entra pro databázový server, pokud ještě není povoleno.
  • Nastavte správce Microsoft Entra na aktuálně přihlášeného uživatele.
  • Přidejte uživatele databáze pro spravovanou identitu přiřazenou systémem, spravovanou identitu přiřazenou uživatelem nebo instanční objekt. Udělte tomuto uživateli všechna oprávnění databáze $DATABASE_NAME . Uživatelské jméno najdete v připojovací řetězec v předchozím výstupu příkazu.
  • Nastavte konfigurace s názvem AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING, AZURE_SQL_CONNECTIONSTRINGnebo FABRIC_SQL_CONNECTIONSTRING na prostředek Azure na základě typu databáze.
    • V případě služby App Service se konfigurace nastaví v okně Nastavení aplikace .
    • Pro Spring Apps se konfigurace nastaví při spuštění aplikace.
    • Pro Container Apps jsou konfigurace nastavené na proměnné prostředí. Všechny konfigurace a jejich hodnoty můžete získat v okně Konektor služby na webu Azure Portal.

Service Connector uživateli přiřadí následující oprávnění, můžete je odvolat a upravit podle svých požadavků.

GRANT ALL PRIVILEGES ON DATABASE "$DATABASE_NAME" TO "username"; 

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "username"; 

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO "username"; 

GRANT ALL PRIVILEGES ON $DATABASE_NAME.* TO 'username'@'%'; 
GRANT CONTROL ON DATABASE::"$DATABASE_NAME" TO "username";
ALTER ROLE db_datareader ADD MEMBER "username"
ALTER ROLE db_datawriter ADD MEMBER "username"
ALTER ROLE db_ddladmin ADD MEMBER "username"

Připojení k databázi pomocí ověřování Microsoft Entra

Po vytvoření připojení můžete ve své aplikaci použít připojovací řetězec k připojení k databázi s ověřováním Microsoft Entra. K připojení k databázi pomocí ověřování Microsoft Entra můžete použít například následující řešení.

Pro .NET neexistuje modul plug-in ani knihovna, které podporují připojení bez hesla. Přístupový token pro spravovanou identitu nebo instanční objekt můžete získat pomocí klientské knihovny, jako je Azure.Identity. Přístupový token pak můžete použít jako heslo pro připojení k databázi. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.

using Azure.Identity;
using Azure.Core;
using Npgsql;

// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();

// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
//     }
// );

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);

// Acquire the access token. 
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
    new TokenRequestContext(scopes: new string[]
    {
        "https://ossrdbms-aad.database.windows.net/.default"
    }));

// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
    $"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";

// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
    Console.WriteLine("Opening connection using access token...");
    connection.Open();
}

Pokud jste vytvořili tabulky a sekvence na flexibilním serveru PostgreSQL před použitím konektoru služby, musíte se připojit jako vlastník a udělit oprávnění k <aad-username> vytvořeným konektorem služby. Uživatelské jméno z připojovací řetězec nebo konfigurace nastavené konektorem služby by mělo vypadat taktoaad_<connection name>. Pokud používáte Azure portal, vyberte tlačítko rozbalit vedle sloupce Service Type a získejte hodnotu. Pokud používáte Azure CLI, zkontrolujte configurations výstup příkazu CLI.

Pak spusťte dotaz, který udělí oprávnění.

az extension add --name rdbms-connect

az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"

<owner-username> a <owner-password> je vlastníkem existující tabulky, který může udělit oprávnění ostatním. <aad-username> je uživatel vytvořený Service Connectoru. Nahraďte je skutečnou hodnotou.

Pomocí příkazu ověřte výsledek:

az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table

Pro .NET neexistuje modul plug-in ani knihovna, které podporují připojení bez hesla. Přístupový token pro spravovanou identitu nebo instanční objekt můžete získat pomocí klientské knihovny, jako je Azure.Identity. Přístupový token pak můžete použít jako heslo pro připojení k databázi. Při použití následujícího kódu odkomentujte část fragmentu kódu pro typ ověřování, který chcete použít.

using Azure.Core;
using Azure.Identity;
using MySqlConnector;

// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned managed identity.
// var credential = new DefaultAzureCredential();

// For user-assigned managed identity.
// var credential = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
//     });

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_MYSQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTSECRET");
// var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

var tokenRequestContext = new TokenRequestContext(
    new[] { "https://ossrdbms-aad.database.windows.net/.default" });
AccessToken accessToken = await credential.GetTokenAsync(tokenRequestContext);
// Open a connection to the MySQL server using the access token.
string connectionString =
    $"{Environment.GetEnvironmentVariable("AZURE_MYSQL_CONNECTIONSTRING")};Password={accessToken.Token}";

using var connection = new MySqlConnection(connectionString);
Console.WriteLine("Opening connection using access token...");
await connection.OpenAsync();

// do something

Další ukázky kódu najdete v tématu Připojení k databázím Azure ze služby App Service bez tajných kódů pomocí spravované identity.

  1. Nainstalujte závislosti.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Získejte připojovací řetězec Azure SQL Database z proměnné prostředí přidané konektorem služby.

    using Microsoft.Data.SqlClient;
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Další informace najdete v tématu Použití ověřování spravované identity služby Active Directory.

Další informace naleznete v tématu Domovská stránka pro programování klientů na Microsoft SQL Server.

  1. Nainstalujte závislosti.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Načtěte databázi SQL v připojovacím řetězci Microsoft Fabric z proměnné prostředí přidané konektorem služby.

    using Microsoft.Data.SqlClient;
    
    string connectionString = 
        Environment.GetEnvironmentVariable("FABRIC_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Další informace najdete v tématu Použití ověřování spravované identity služby Active Directory.

Další informace najdete v tématu Připojení k databázi SQL v Microsoft Fabric.

Nasazení aplikace do hostitelské služby Azure

  1. Nasaďte aplikaci do hostitelské služby Azure. Další informace o nasazení těchto prostředků najdete v následujících příručkách.

  2. Zkontrolujte protokol nebo zavolejte aplikaci, abyste zjistili, jestli se může úspěšně připojit k databázi Azure.

Řešení problému

Dovolení

Pokud dojde k nějakým chybám souvisejícím s oprávněními, pomocí příkazu az account showpotvrďte přihlášeného uživatele Azure CLI . Ujistěte se, že se přihlašujete pomocí správného účtu. Dále ověřte, že máte následující oprávnění, která můžou být nutná k vytvoření připojení bez hesla ke konektoru Service Connector.

Oprávnění Operace
Microsoft.DBforPostgreSQL/flexibleServers/read Vyžadováno pro získání informací o databázovém serveru
Microsoft.DBforPostgreSQL/flexibleServers/write Vyžadováno pro povolení ověřování Microsoft Entra pro databázový server
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write Je nutné vytvořit pravidlo brány firewall, pokud je místní IP adresa blokována.
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/delete Je třeba vrátit pravidlo brány firewall vytvořené konektorem služby, aby se zabránilo problému se zabezpečením.
Microsoft.DBforPostgreSQL/flexibleServers/administrators/read Je požadováno zkontrolovat, zda je přihlašovací uživatel Azure CLI správcem na databázovém serveru Microsoft Entra.
Microsoft.DBforPostgreSQL/flexibleServers/administrators/write Je nutné přidat uživatele přihlášeného pomocí Azure CLI jako administrátora serveru databáze Microsoft Entra.
Oprávnění Operace
Microsoft.DBforMySQL/flexibleServers/read Vyžadováno pro získání informací o databázovém serveru
Microsoft.DBforMySQL/flexibleServers/write Vyžaduje se přidání poskytnuté spravované identity přiřazené uživatelem na databázový server.
Microsoft.DBforMySQL/flexibleServers/firewallRules/write Je nutné vytvořit pravidlo brány firewall, pokud je místní IP adresa blokována.
Microsoft.DBforMySQL/flexibleServers/firewallRules/delete Je třeba vrátit pravidlo brány firewall vytvořené konektorem služby, aby se zabránilo problému se zabezpečením.
Microsoft.DBforMySQL/flexibleServers/administrators/read Je požadováno zkontrolovat, zda je přihlašovací uživatel Azure CLI správcem na databázovém serveru Microsoft Entra.
Microsoft.DBforMySQL/flexibleServers/administrators/write Je nutné přidat uživatele přihlášeného pomocí Azure CLI jako administrátora serveru databáze Microsoft Entra.
Oprávnění Operace
Microsoft.Sql/servers/read Vyžadováno pro získání informací o databázovém serveru
Microsoft.Sql/servers/firewallRules/write Je nutné vytvořit pravidlo brány firewall, pokud je místní IP adresa blokována.
Microsoft.Sql/servers/firewallRules/delete Je třeba vrátit pravidlo brány firewall vytvořené konektorem služby, aby se zabránilo problému se zabezpečením.
Microsoft.Sql/servers/administrators/read Je požadováno zkontrolovat, zda je přihlašovací uživatel Azure CLI správcem na databázovém serveru Microsoft Entra.
Microsoft.Sql/servers/administrators/write Je nutné přidat uživatele přihlášeného pomocí Azure CLI jako administrátora serveru databáze Microsoft Entra.

V některých případech nejsou oprávnění vyžadována. Pokud je například uživatel ověřený rozhraním příkazového řádku Azure už na SQL Serveru správcem služby Active Directory, nemusíte mít Microsoft.Sql/servers/administrators/write oprávnění.

Microsoft Entra ID

Pokud se zobrazí chyba ERROR: AADSTS530003: Your device is required to be managed to access this resource., požádejte oddělení IT o pomoc s připojením tohoto zařízení k Microsoft Entra ID. Další informace najdete v tématu Zařízení připojená k Microsoft Entra.

Service Connector potřebuje přístup k Microsoft Entra ID, aby získal informace o vašem účtu a spravované identitě hostitelské služby. Pomocí následujícího příkazu můžete zkontrolovat, jestli má vaše zařízení přístup k Microsoft Entra ID:

az ad signed-in-user show

Pokud se nepřihlásíte interaktivně, může se zobrazit také chyba a Interactive authentication is needed. Pokud chcete chybu vyřešit, přihlaste se pomocí az login příkazu.

Připojení k síti

Pokud je váš databázový server ve virtuální síti, ujistěte se, že vaše prostředí, na kterém běží příkaz Azure CLI, má přístup k serveru ve virtuální síti.

Pokud je váš databázový server ve virtuální síti, ujistěte se, že vaše prostředí, na kterém běží příkaz Azure CLI, má přístup k serveru ve virtuální síti.

Pokud databázový server nepovoluje veřejný přístup, ujistěte se, že vaše prostředí, na kterém běží příkaz Azure CLI, má přístup k serveru prostřednictvím privátního koncového bodu.

Další kroky

Další informace o konektoru Service Connector a připojeních bez hesel najdete v následujících zdrojích informací: