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


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