PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Dapatkan Token Akses untuk koneksi ke PostgreSQL di Azure Functions

Jika Anda ingin menghubungkan database Postgres dengan autentikasi Azure AD di fungsi Azure, kita dapat menggunakan Azure Managed Identity untuk melakukan autentikasi Azure AD kemudian mendapatkan token akses Azure AD dan menghubungkan database.

Langkah-langkah detailnya seperti di bawah ini

  1. Aktifkan Azure MSI dari aplikasi fungsi Azure Anda

  2. Dapatkan id klien MSI

az login
az ad sp show --id <the object id of the msi> --query appId --output tsv
  1. Konfigurasikan admin Azure AD di database Postgres

  2. Gunakan admin Azure AD untuk menyambungkan database. (Saya menggunakan PgAdmin untuk terhubung)

SET aad_validate_oids_in_tenant = off;
CREATE ROLE <userName> WITH LOGIN PASSWORD '<the appid of the MSI>' IN ROLE azure_ad_user;
  1. Konfigurasikan firewall server Postgres. Harap tambahkan alamat IP keluar aplikasi fungsi Azure di firewall. Mengenai cara mendapatkan alamat IP keluar aplikasi fungsi Azure dan mengkonfigurasi firewall server Postgres, silakan merujuk ke di sini dan di sini

  2. Jika Anda mengaktifkan SSL, harap unduh sertifikat SSL melalui tautan

  3. Fungsi. (Saya menggunakan .net core untuk menulis sampel)

sebuah. 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. tambahkan sertifikat SSL di atas dalam proyek. Misalnya, saya membuat folder cert di proyek saya dan simpan sertifikat di folder

c. kode


        [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);

        }

Untuk detail selengkapnya, lihat di sini




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sistem file Linux dan tolok ukur pos pemeriksaan PostgreSQL

  2. Isi beberapa tabel dari satu objek JSON dengan json_populate_recordset

  3. pelanggaran isolasi transaksi yang jelas di postgresql

  4. Bisakah saya menggunakan perintah \copy ke dalam fungsi postgresql?

  5. Operator Postgres untuk tipe data JSON menggunakan Rails 4