Nếu bạn muốn kết nối cơ sở dữ liệu Postgres với Azure AD auth trong chức năng Azure, chúng ta có thể Azure Managed Identity để thực hiện Azure AD auth, sau đó lấy mã truy cập Azure AD và kết nối cơ sở dữ liệu.
Các bước chi tiết như bên dưới
az login
az ad sp show --id <the object id of the msi> --query appId --output tsv
-
Định cấu hình quản trị Azure AD trong cơ sở dữ liệu Postgres
-
Sử dụng quản trị viên Azure AD để kết nối cơ sở dữ liệu. (Tôi sử dụng PgAdmin để kết nối)
SET aad_validate_oids_in_tenant = off;
CREATE ROLE <userName> WITH LOGIN PASSWORD '<the appid of the MSI>' IN ROLE azure_ad_user;
-
Định cấu hình tường lửa máy chủ Postgres. Vui lòng thêm địa chỉ IP gửi đi của ứng dụng chức năng Azure trong tường lửa. Về cách lấy địa chỉ IP gửi đi của ứng dụng hàm Azure và định cấu hình tường lửa máy chủ Postgres, vui lòng tham khảo tại đây và tại đây
-
Nếu bạn bật SSL, vui lòng tải xuống chứng chỉ SSL qua liên kết
-
Hàm số. (Tôi sử dụng lõi .net để viết mẫu)
một. 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. thêm chứng chỉ SSL ở trên trong dự án. Ví dụ:tôi tạo một thư mục cert
trong dự án của tôi và lưu chứng chỉ trong thư mục
c. mã
[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);
}
Để biết thêm chi tiết, vui lòng tham khảo tại đây