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


Oktatóanyag: Jelszó nélküli kapcsolat létrehozása adatbázis-szolgáltatással a Service Csatlakozás oron keresztül

A jelszó nélküli kapcsolatok felügyelt identitásokat használnak az Azure-szolgáltatások eléréséhez. Ezzel a módszerrel nem kell manuálisan nyomon követnie és kezelnie a felügyelt identitások titkos kulcsát. Ezeket a feladatokat az Azure belsőleg kezeli biztonságosan.

A service Csatlakozás or lehetővé teszi a felügyelt identitásokat az olyan alkalmazás-üzemeltetési szolgáltatásokban, mint az Azure Spring Apps, a Azure-alkalmazás Service és az Azure Container Apps. A Service Csatlakozás or emellett konfigurálja az adatbázis-szolgáltatásokat, például az Azure Database for PostgreSQL-t, az Azure Database for MySQL-t és az Azure SQL Database-t a felügyelt identitások elfogadásához.

Ebben az oktatóanyagban az Azure CLI használatával hajtja végre a következő feladatokat:

  • Ellenőrizze a kezdeti környezetet az Azure CLI-vel.
  • Jelszó nélküli kapcsolat létrehozása a Service Csatlakozás or használatával.
  • Használja a Service Csatlakozás or által létrehozott környezeti változókat vagy konfigurációkat egy adatbázis-szolgáltatás eléréséhez.

Előfeltételek

Saját környezet beállítása

Számla

Jelentkezzen be az Azure CLI-vel a következővel: az login. Ha az Azure Cloud Shellt használja, vagy már bejelentkezett, erősítse meg hitelesített fiókját a következővel az account show: .

A Service Csatlakozás or jelszó nélküli bővítmény telepítése

Telepítse a legújabb service Csatlakozás or jelszó nélküli bővítményt az Azure CLI-hez:

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

Feljegyzés

Futtassa a "serviceconnector-passwordless" bővítmény "2.0.2" vagy újabb az versionverzióját. Előfordulhat, hogy előbb frissítenie kell az Azure CLI-t a bővítményverzió frissítéséhez.

Jelszó nélküli kapcsolat létrehozása

A következő lépésben a Azure-alkalmazás Szolgáltatást használjuk példaként egy felügyelt identitással való kapcsolat létrehozásához.

Ha a következőt használja:

Feljegyzés

Ha az Azure Portalt használja, lépjen Azure-alkalmazás Szolgáltatás, Azure Spring Apps vagy Azure Container Apps Szolgáltatás Csatlakozás or paneljére, és válassza a Létrehozás lehetőséget a kapcsolat létrehozásához. Az Azure Portal automatikusan meg fogja írni a parancsot, és elindítja a parancs végrehajtását a Cloud Shellben.

A következő Azure CLI-parancs egy paramétert --client-type használ, amely lehet java, dotnet, python stb. A támogatott ügyféltípusok lekéréséhez futtassa a az webapp connection create postgres-flexible -h parancsot, és válassza ki az alkalmazásnak megfelelőt.

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

A Rugalmas Azure Database for MySQL-kiszolgálóhoz felhasználó által hozzárendelt felügyelt identitás szükséges a Microsoft Entra-hitelesítés engedélyezéséhez. További információ: Microsoft Entra-hitelesítés beállítása rugalmas Azure Database for MySQL-kiszolgálóhoz. A következő paranccsal hozhat létre felhasználó által hozzárendelt felügyelt identitást:

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

Fontos

A felhasználó által hozzárendelt felügyelt identitás létrehozása után kérje meg a globális Rendszergazda istratort vagy a Privileged Role Rendszergazda istratort, hogy adja meg az alábbi engedélyeket ehhez az identitáshoz:

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

További információ: Az Active Directory-hitelesítés Engedélyek szakasza.

Ezután csatlakoztassa az alkalmazást egy MySQL-adatbázishoz egy rendszer által hozzárendelt felügyelt identitással a Service Csatlakozás or használatával.

Az alábbi Azure CLI-parancs egy paramétert --client-type használ. Futtassa a az webapp connection create mysql-flexible -h támogatott ügyféltípusokat, és válassza ki az alkalmazásnak megfelelőt.

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

Az alábbi Azure CLI-parancs egy paramétert --client-type használ. Futtassa a az webapp connection create sql -h támogatott ügyféltípusokat, és válassza ki az alkalmazásnak megfelelőt.

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

Ez a Szolgáltatás Csatlakozás or parancs a következő feladatokat hajtja végre a háttérben:

  • Engedélyezze a rendszer által hozzárendelt felügyelt identitást, vagy rendeljen hozzá egy felhasználói identitást a Azure-alkalmazás Service/Azure Spring Apps/Azure Container Apps által üzemeltetett alkalmazáshoz$APPSERVICE_NAME.
  • Ha korábban még nincs engedélyezve, engedélyezze a Microsoft Entra-hitelesítést az adatbázis-kiszolgálóhoz.
  • Állítsa a Microsoft Entra rendszergazdát az aktuális bejelentkezett felhasználóra.
  • Adjon hozzá adatbázis-felhasználót a rendszer által hozzárendelt felügyelt identitáshoz, felhasználó által hozzárendelt felügyelt identitáshoz vagy szolgáltatásnévhez. Adja meg az adatbázis $DATABASE_NAME összes jogosultságát ennek a felhasználónak. A felhasználónév az előző parancskimenet kapcsolati sztring található.
  • Állítsa be a névvel ellátott AZURE_MYSQL_CONNECTIONSTRINGAZURE_POSTGRESQL_CONNECTIONSTRINGkonfigurációkat vagy AZURE_SQL_CONNECTIONSTRING az Azure-erőforrást az adatbázis típusa alapján.
    • Az App Service esetében a konfigurációk az App Gépház panelen vannak beállítva.
    • A Spring Apps esetében a konfigurációk az alkalmazás indításakor vannak beállítva.
    • A Container Apps esetében a konfigurációk a környezeti változókra vannak állítva. Az összes konfigurációt és azok értékeit az Azure Portal Szolgáltatás Csatlakozás or paneljén szerezheti be.

A Service Csatlakozás or a következő jogosultságokat rendeli a felhasználóhoz, visszavonhatja őket, és a követelményeknek megfelelően módosíthatja a jogosultságokat.

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";

Csatlakozás adatbázisba Microsoft Entra-hitelesítéssel

A kapcsolat létrehozása után az alkalmazásban található kapcsolati sztring használatával Microsoft Entra-hitelesítéssel csatlakozhat az adatbázishoz. Az alábbi megoldásokkal például Microsoft Entra-hitelesítéssel csatlakozhat az adatbázishoz.

A .NET esetében nincs beépülő modul vagy tár a jelszó nélküli kapcsolatok támogatásához. A felügyelt identitáshoz vagy szolgáltatásnévhez hozzáférési jogkivonatot kérhet le az olyan ügyfélkódtárak használatával, mint az Azure.Identity. Ezután jelszóként használhatja a hozzáférési jogkivonatot az adatbázishoz való csatlakozáshoz. Az alábbi kód használatakor bontsa ki a kódrészlet azon részét, amely a használni kívánt hitelesítési típushoz tartozik.

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

// Uncomment the following lines according to the authentication type.
// 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();
}

Ezután, ha a Service Csatlakozás or használata előtt táblákat és sorozatokat hozott létre a Rugalmas PostgreSQL-kiszolgálón, tulajdonosként kell csatlakoznia, és engedélyt kell adnia a Service Csatlakozás or általi létrehozásra<aad-username>. A Service Csatlakozás or által beállított kapcsolati sztring vagy konfigurációból származó felhasználónévnek így kell kinéznieaad_<connection name>. Ha az Azure Portalt használja, válassza az oszlop melletti Service Type kibontás gombot, és kérje le az értéket. Ha az Azure CLI-t használja, ellenőrizze configurations a PARANCSSOR parancs kimenetét.

Ezután hajtsa végre a lekérdezést az engedély megadásához

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

A <owner-username> meglévő tábla tulajdonosa, <owner-password> amely engedélyeket adhat másoknak. <aad-username>a Service Csatlakozás or által létrehozott felhasználó. Cserélje le őket a tényleges értékre.

Ellenőrizze az eredményt a következő paranccsal:

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

A .NET esetében nincs beépülő modul vagy tár a jelszó nélküli kapcsolatok támogatásához. A felügyelt identitáshoz vagy szolgáltatásnévhez hozzáférési jogkivonatot kérhet le az olyan ügyfélkódtárak használatával, mint az Azure.Identity. Ezután jelszóként használhatja a hozzáférési jogkivonatot az adatbázishoz való csatlakozáshoz. Az alábbi kód használatakor bontsa ki a kódrészlet azon részét, amely a használni kívánt hitelesítési típushoz tartozik.

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

// Uncomment the following lines according to the authentication type.
// 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

További kódmintákért lásd: Csatlakozás azure-adatbázisokba az App Service-ből titkos kódok nélkül, felügyelt identitás használatával.

  1. Telepítse a függőségeket.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Kérje le az Azure SQL Database kapcsolati sztring a Service Csatlakozás or által hozzáadott környezeti változóból.

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

    További információ: Az Active Directory felügyelt identitás hitelesítésének használata.

További információ: Kezdőlap a Microsoft SQL Server ügyfélprogramozásához.

Az alkalmazás üzembe helyezése azure-beli üzemeltetési szolgáltatásban

Végül helyezze üzembe az alkalmazást egy Azure-beli üzemeltetési szolgáltatásban. Ez a forrásszolgáltatás egy felügyelt identitással csatlakozhat a céladatbázishoz az Azure-ban.

A Azure-alkalmazás Szolgáltatás esetében ellenőrizheti a dokumentumot a telepítés módjának kiválasztásához: Rövid útmutató: ASP.NET-webalkalmazás üzembe helyezése.

Ezután ellenőrizheti a naplót, vagy meghívhatja az alkalmazást, hogy ellenőrizze, sikeresen tud-e csatlakozni az Azure-adatbázishoz.

Hibaelhárítás

Engedély

Ha bármilyen engedélyekkel kapcsolatos hibát tapasztal, erősítse meg az Azure CLI bejelentkezett felhasználót a paranccsal az account show. Győződjön meg arról, hogy a megfelelő fiókkal jelentkezik be. Ezután győződjön meg arról, hogy rendelkezik a következő engedélyekkel, amelyek szükségesek lehetnek egy jelszó nélküli kapcsolat létrehozásához a Service Csatlakozás or használatával.

Engedély Művelet
Microsoft.DBforPostgreSQL/flexibleServers/read Az adatbázis-kiszolgáló adatainak lekéréséhez szükséges
Microsoft.DBforPostgreSQL/flexibleServers/write A Microsoft Entra-hitelesítés adatbázis-kiszolgálóhoz való engedélyezéséhez szükséges
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write Tűzfalszabály létrehozásához szükséges, ha a helyi IP-cím le van tiltva
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/delete A biztonsági probléma elkerülése érdekében a Service Csatlakozás or által létrehozott tűzfalszabály visszaállításához szükséges
Microsoft.DBforPostgreSQL/flexibleServers/administrators/read Annak ellenőrzéséhez szükséges, hogy az Azure CLI bejelentkezési felhasználója adatbázis-kiszolgáló Microsoft Entra-rendszergazda-e
Microsoft.DBforPostgreSQL/flexibleServers/administrators/write Azure CLI bejelentkezési felhasználó hozzáadása adatbázis-kiszolgálóként Microsoft Entra-rendszergazdaként
Engedély Művelet
Microsoft.DBforMySQL/flexibleServers/read Az adatbázis-kiszolgáló adatainak lekéréséhez szükséges
Microsoft.DBforMySQL/flexibleServers/write A megadott felhasználó által hozzárendelt felügyelt identitás adatbázis-kiszolgálóhoz való hozzáadásához szükséges
Microsoft.DBforMySQL/flexibleServers/firewallRules/write Tűzfalszabály létrehozásához szükséges, ha a helyi IP-cím le van tiltva
Microsoft.DBforMySQL/flexibleServers/firewallRules/delete A biztonsági probléma elkerülése érdekében a Service Csatlakozás or által létrehozott tűzfalszabály visszaállításához szükséges
Microsoft.DBforMySQL/flexibleServers/administrators/read Annak ellenőrzéséhez szükséges, hogy az Azure CLI bejelentkezési felhasználója adatbázis-kiszolgáló Microsoft Entra-rendszergazda-e
Microsoft.DBforMySQL/flexibleServers/administrators/write Azure CLI bejelentkezési felhasználó hozzáadása adatbázis-kiszolgálóként Microsoft Entra-rendszergazdaként
Engedély Művelet
Microsoft.Sql/servers/read Az adatbázis-kiszolgáló adatainak lekéréséhez szükséges
Microsoft.Sql/servers/firewallRules/write Tűzfalszabály létrehozásához szükséges, ha a helyi IP-cím le van tiltva
Microsoft.Sql/servers/firewallRules/delete A biztonsági probléma elkerülése érdekében a Service Csatlakozás or által létrehozott tűzfalszabály visszaállításához szükséges
Microsoft.Sql/servers/administrators/read Annak ellenőrzéséhez szükséges, hogy az Azure CLI bejelentkezési felhasználója adatbázis-kiszolgáló Microsoft Entra-rendszergazda-e
Microsoft.Sql/servers/administrators/write Azure CLI bejelentkezési felhasználó hozzáadása adatbázis-kiszolgálóként Microsoft Entra-rendszergazdaként

Bizonyos esetekben az engedélyek nem szükségesek. Ha például az Azure CLI által hitelesített felhasználó már Active Directory-Rendszergazda istrator az SQL Serveren, nincs szükség az Microsoft.Sql/servers/administrators/write engedélyre.

Microsoft Entra ID

Ha hibaüzenetet ERROR: AADSTS530003: Your device is required to be managed to access this resource.kap, kérjen segítséget az informatikai részlegtől az eszköz Microsoft Entra-azonosítóhoz való csatlakoztatásához. További információ: Microsoft Entra csatlakoztatott eszközök.

A szolgáltatás Csatlakozás ornak hozzá kell férnie a Microsoft Entra-azonosítóhoz, hogy információkat kapjon a fiókjáról és a szolgáltatás felügyelt identitásáról. Az alábbi paranccsal ellenőrizheti, hogy az eszköz hozzáfér-e a Microsoft Entra-azonosítóhoz:

az ad signed-in-user show

Ha nem jelentkezik be interaktívan, előfordulhat, hogy a hiba és Interactive authentication is neededa . A hiba elhárításához jelentkezzen be a az login paranccsal.

Hálózati kapcsolat

Ha az adatbázis-kiszolgáló virtuális hálózaton található, győződjön meg arról, hogy az Azure CLI-parancsot futtató környezet hozzáfér a kiszolgálóhoz a virtuális hálózaton.

Ha az adatbázis-kiszolgáló virtuális hálózaton található, győződjön meg arról, hogy az Azure CLI-parancsot futtató környezet hozzáfér a kiszolgálóhoz a virtuális hálózaton.

Ha az adatbázis-kiszolgáló nem engedélyezi a nyilvános hozzáférést, győződjön meg arról, hogy az Azure CLI-parancsot futtató környezet a privát végponton keresztül férhet hozzá a kiszolgálóhoz.

Következő lépések

A Szolgáltatás Csatlakozás orról és a jelszó nélküli kapcsolatokról a következő forrásokban talál további információt: