Csatlakozás felügyelt identitással az Azure Database for MySQL-hez
A következőkre vonatkozik: Azure Database for MySQL – Önálló kiszolgáló
Fontos
Az önálló Azure Database for MySQL-kiszolgáló a kivonási útvonalon van. Határozottan javasoljuk, hogy frissítsen rugalmas Azure Database for MySQL-kiszolgálóra. További információ a rugalmas Azure Database for MySQL-kiszolgálóra való migrálásról: Mi történik az önálló Azure Database for MySQL-kiszolgálóval?
Ez a cikk bemutatja, hogyan használhat felhasználó által hozzárendelt identitást egy Azure-beli virtuális géphez (VM) egy Azure Database for MySQL-kiszolgáló eléréséhez. A felügyelt szolgáltatásidentitásokat az Azure automatikusan felügyeli, és lehetővé teszi a Microsoft Entra-hitelesítést támogató szolgáltatások hitelesítését anélkül, hogy hitelesítő adatokat kellene beszúrnia a kódba.
Az alábbiak végrehajtásának módját ismerheti meg:
- Virtuális gép hozzáférésének biztosítása egy Azure Database for MySQL-kiszolgálóhoz
- Hozzon létre egy felhasználót az adatbázisban, amely a virtuális gép felhasználó által hozzárendelt identitását jelöli
- Hozzáférési jogkivonat lekérése a virtuálisgép-identitással, és annak használata egy Azure Database for MySQL-kiszolgáló lekérdezéséhez
- A jogkivonat lekérésének implementálása egy C# példaalkalmazásban
Fontos
A felügyelt identitással való csatlakozás csak a MySQL 5.7-hez és az újabb verzióhoz érhető el.
Előfeltételek
- Ha még nem ismeri az Azure-erőforrások felügyelt identitására vonatkozó funkciót, tekintse meg ezt az áttekintést. Ha még nincs Azure-fiókja, a folytatás előtt regisztráljon egy ingyenes fiókra.
- A szükséges erőforrás-létrehozás és szerepkör-kezelés végrehajtásához a fióknak "Tulajdonos" engedélyre van szüksége a megfelelő hatókörben (az előfizetésben vagy az erőforráscsoportban). Ha segítségre van szüksége a szerepkör-hozzárendeléssel kapcsolatban, olvassa el az Azure-szerepkörök hozzárendelése az Azure-előfizetés erőforrásaihoz való hozzáférés kezeléséhez című témakört.
- Szüksége van egy Azure-beli virtuális gépre (például Ubuntu Linux futtatására), amelyet használni szeretne az adatbázis felügyelt identitással való eléréséhez
- Olyan Azure Database for MySQL-adatbáziskiszolgálóra van szüksége, amely konfigurálta a Microsoft Entra-hitelesítést
- A C#-példa követéséhez először végezze el az útmutatót a C használatával történő csatlakozáshoz #
Felhasználó által hozzárendelt felügyelt identitás létrehozása a virtuális géphez
Hozzon létre egy identitást az előfizetésben az az identity create paranccsal. Használhatja ugyanazt az erőforráscsoportot, amelyben a virtuális gép fut, vagy egy másikat.
az identity create --resource-group myResourceGroup --name myManagedIdentity
Az identitás a következő lépésekben való konfigurálásához használja az az identity show parancsot az identitás erőforrás-azonosítójának és ügyfélazonosítójának változókban való tárolásához.
# Get resource ID of the user-assigned identity
RESOURCE_ID=$(az identity show --resource-group myResourceGroup --name myManagedIdentity --query id --output tsv)
# Get client ID of the user-assigned identity
CLIENT_ID=$(az identity show --resource-group myResourceGroup --name myManagedIdentity --query clientId --output tsv)
Mostantól hozzárendelhetjük a felhasználó által hozzárendelt identitást a virtuális géphez az az vm identity assign paranccsal:
az vm identity assign --resource-group myResourceGroup --name myVM --identities $RESOURCE_ID
A telepítés befejezéséhez jelenítse meg az ügyfélazonosító értékét, amelyre a következő néhány lépésben szüksége lesz:
echo $CLIENT_ID
MySQL-felhasználó létrehozása a felügyelt identitáshoz
Most csatlakozzon Microsoft Entra rendszergazdai felhasználóként a MySQL-adatbázishoz, és futtassa a következő SQL-utasításokat:
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER 'myuser' IDENTIFIED BY 'CLIENT_ID';
A felügyelt identitás mostantól hozzáféréssel rendelkezik a felhasználónévvel myuser
való hitelesítéskor (cserélje le a választott névre).
A hozzáférési jogkivonat lekérése az Azure Instance Metadata szolgáltatásból
Az alkalmazás mostantól lekérhet egy hozzáférési jogkivonatot az Azure Instance Metadata szolgáltatásból, és használhatja az adatbázissal való hitelesítéshez.
Ez a jogkivonat-lekérés egy HTTP-kérés http://169.254.169.254/metadata/identity/oauth2/token
elküldésével és a következő paraméterek átadásával történik:
api-version
=2018-02-01
resource
=https://ossrdbms-aad.database.windows.net
client_id
=CLIENT_ID
(amelyet korábban lekért)
Egy mezőt tartalmazó access_token
JSON-eredményt kap vissza – ez a hosszú szöveges érték a felügyelt identitás hozzáférési jogkivonata, amelyet jelszóként kell használnia az adatbázishoz való csatlakozáskor.
Tesztelési célokra a következő parancsokat futtathatja a rendszerhéjban. Vegye figyelembe, hogy a szükséges , jq
és az mysql
ügyfél telepítve vancurl
.
# Retrieve the access token
ACCESS_TOKEN=$(curl -s 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fossrdbms-aad.database.windows.net&client_id=CLIENT_ID' -H Metadata:true | jq -r .access_token)
# Connect to the database
mysql -h SERVER --user USER@SERVER --enable-cleartext-plugin --password=$accessToken
Most már csatlakozik a korábban konfigurált adatbázishoz.
Csatlakozás felügyelt identitással a C-ben#
Ez a szakasz bemutatja, hogyan szerezhet be hozzáférési jogkivonatot a virtuális gép felhasználó által hozzárendelt felügyelt identitásával, és hogyan hívhatja meg az Azure Database for MySQL-t. Az Azure Database for MySQL natív módon támogatja a Microsoft Entra-hitelesítést, így közvetlenül elfogadhatja az Azure-erőforrások felügyelt identitásával beszerzett hozzáférési jogkivonatokat. A MySQL-kapcsolat létrehozásakor a hozzáférési jogkivonatot a jelszó mezőben adja át.
Íme egy .NET-kód példa a MySQL-kapcsolat hozzáférési jogkivonattal való megnyitására. Ennek a kódnak a virtuális gépen kell futnia a virtuális gép felhasználó által hozzárendelt felügyelt identitásának végpontjához való hozzáféréshez. .NET-keretrendszer 4.6-os vagy újabb vagy .NET Core 2.2 vagy újabb verzió szükséges a hozzáférési jogkivonat-módszer használatához. Cserélje le a HOST, a USER, a DATABASE és a CLIENT_ID értékét.
using System;
using System.Net;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace Driver
{
class Script
{
// Obtain connection string information from the portal
//
private static string Host = "HOST";
private static string User = "USER";
private static string Database = "DATABASE";
private static string ClientId = "CLIENT_ID";
static async Task Main(string[] args)
{
//
// Get an access token for MySQL.
//
Console.Out.WriteLine("Getting access token from Azure Instance Metadata service...");
// Azure AD resource ID for Azure Database for MySQL is https://ossrdbms-aad.database.windows.net/
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fossrdbms-aad.database.windows.net&client_id=" + ClientId);
request.Headers["Metadata"] = "true";
request.Method = "GET";
string accessToken = null;
try
{
// Call managed identities for Azure resources endpoint.
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Pipe response Stream to a StreamReader and extract access token.
StreamReader streamResponse = new StreamReader(response.GetResponseStream());
string stringResponse = streamResponse.ReadToEnd();
var list = JsonSerializer.Deserialize<Dictionary<string, string>>(stringResponse);
accessToken = list["access_token"];
}
catch (Exception e)
{
Console.Out.WriteLine("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
System.Environment.Exit(1);
}
//
// Open a connection to the MySQL server using the access token.
//
var builder = new MySqlConnectionStringBuilder
{
Server = Host,
Database = Database,
UserID = User,
Password = accessToken,
SslMode = MySqlSslMode.Required,
};
using (var conn = new MySqlConnection(builder.ConnectionString))
{
Console.Out.WriteLine("Opening connection using access token...");
await conn.OpenAsync();
using (var command = conn.CreateCommand())
{
command.CommandText = "SELECT VERSION()";
using (var reader = await command.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
Console.WriteLine("\nConnected!\n\nMySQL version: {0}", reader.GetString(0));
}
}
}
}
}
}
}
Futtatáskor ez a parancs a következőhöz hasonló kimenetet ad:
Getting access token from Azure Instance Metadata service...
Opening connection using access token...
Connected!
MySQL version: 5.7.27
Következő lépések
- A Microsoft Entra-hitelesítés és az Azure Database for MySQL általános fogalmainak áttekintése