यदि आप Azure फ़ंक्शन में Azure AD प्रमाणन के साथ Postgres डेटाबेस को कनेक्ट करना चाहते हैं, तो हम Azure AD प्रमाणीकरण करने के लिए Azure प्रबंधित पहचान कर सकते हैं और फिर Azure AD एक्सेस टोकन प्राप्त कर सकते हैं और डेटाबेस कनेक्ट कर सकते हैं।
विस्तृत चरण नीचे दिए गए हैं
az login
az ad sp show --id <the object id of the msi> --query appId --output tsv
-
डेटाबेस को जोड़ने के लिए Azure AD व्यवस्थापक का उपयोग करें। (मैं कनेक्ट करने के लिए PgAdmin का उपयोग करता हूं)
SET aad_validate_oids_in_tenant = off;
CREATE ROLE <userName> WITH LOGIN PASSWORD '<the appid of the MSI>' IN ROLE azure_ad_user;
-
पोस्टग्रेज़ सर्वर फ़ायरवॉल कॉन्फ़िगर करें। कृपया फ़ायरवॉल में Azure फ़ंक्शन ऐप आउटबाउंड IP पते जोड़ें। Azure फ़ंक्शन ऐप आउटबाउंड IP पते कैसे प्राप्त करें और Postgres सर्वर फ़ायरवॉल को कॉन्फ़िगर करने के तरीके के बारे में, कृपया यहां और यहां
-
अगर आप एसएसएल को सक्षम करते हैं, तो कृपया SSL प्रमाणपत्रडाउनलोड करें। ए> लिंक के ज़रिए
-
समारोह। (मैं नमूना लिखने के लिए .net कोर का उपयोग करता हूं)
एक। एसडीके
<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" />
बी। प्रोजेक्ट में एसएसएल प्रमाणपत्र के ऊपर जोड़ें। उदाहरण के लिए, मैं एक फ़ोल्डर बनाता हूं cert
मेरे प्रोजेक्ट में और फोल्डर में सर्टिफिकेट सेव करें
सी। कोड
[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);
}
अधिक विवरण के लिए, कृपया यहां देखेंए>