PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Uzyskaj token dostępu do połączenia z PostgreSQL w Azure Functions

Jeśli chcesz połączyć bazę danych Postgres z uwierzytelnianiem Azure AD w funkcji Azure, możemy Azure Managed Identity wykonać uwierzytelnianie Azure AD, a następnie uzyskać token dostępu Azure AD i połączyć bazę danych.

Szczegółowe kroki są jak poniżej

  1. Włącz Azure MSI w swojej aplikacji funkcji platformy Azure

  2. Uzyskaj identyfikator klienta MSI

az login
az ad sp show --id <the object id of the msi> --query appId --output tsv
  1. Konfiguruj administratora Azure AD w bazie danych Postgres

  2. Użyj administratora usługi Azure AD, aby połączyć bazę danych. (Używam PgAdmin do połączenia)

SET aad_validate_oids_in_tenant = off;
CREATE ROLE <userName> WITH LOGIN PASSWORD '<the appid of the MSI>' IN ROLE azure_ad_user;
  1. Skonfiguruj zaporę serwera Postgres. Dodaj wychodzące adresy IP aplikacji funkcji platformy Azure w zaporze. Informacje na temat uzyskiwania wychodzących adresów IP aplikacji funkcji platformy Azure i konfigurowania zapory serwera Postgres można znaleźć w artykule tutaj i tutaj

  2. Jeśli włączysz SSL, pobierz certyfikat SSL przez link

  3. Funkcjonować. (Używam .net core do napisania próbki)

a. SDK

 <PackageReference Include="Microsoft.Azure.Services.AppAuthentication" Version="1.5.0" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.8" />
    <PackageReference Include="Npgsql" Version="4.1.3.1" />

b. dodaj powyższy certyfikat SSL w projekcie. Na przykład tworzę folder cert w moim projekcie i zapisz certyfikat w folderze

c. kod


        [FunctionName("Http")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log, ExecutionContext context)
        {

            var azureServiceTokenProvider = new AzureServiceTokenProvider();
            string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://ossrdbms-aad.database.windows.net");
         
            string Host = "test05.postgres.database.azure.com";
            string User = "[email protected]";
            string Database = "postgres";
            string connString =
                String.Format(
                    "Server={0}; User Id={1}; Database={2}; Port={3}; Password={4};SSLMode=Require",
                    Host,
                    User,
                    Database,
                    5432,
                    accessToken);
            string result = string.Empty;
            using (var conn = new NpgsqlConnection(connString))
            {
                ProvideClientCertificatesCallback provideClientCertificates = clientCerts =>
                {
                    string clientCertPath = context.FunctionAppDirectory + "\\cert\\BaltimoreCyberTrustRoot.crt.pem";
                    var cert = new X509Certificate2(clientCertPath);
                    clientCerts.Add(cert);
                };
                conn.ProvideClientCertificatesCallback += provideClientCertificates;
                Console.Out.WriteLine("Opening connection using access token...");
                conn.Open();

                using (var command = new NpgsqlCommand("SELECT version()", conn))
                {

                    var reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        Console.WriteLine("\nConnected!\n\nPostgres version: {0}", reader.GetString(0));
                        result = reader.GetString(0);
                    }
                }
            }
            return new OkObjectResult(result);

        }

Aby uzyskać więcej informacji, zapoznaj się z tutaj




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pandy zapisują ramkę danych do innego schematu postgresql

  2. NodeJS i Express:Błąd:samopodpisany certyfikat

  3. Sterownik JDBC PostgreSQL z systemem Android

  4. Gdzie umieścić zależność c3p0 w kontenerze Tomcat

  5. Integracja PostgreSQL z systemami uwierzytelniania