sql >> データベース >  >> RDS >> PostgreSQL

AzureFunctionsでPostgreSQLに接続するためのアクセストークンを取得する

    PostgresデータベースをAzure関数のAzureAD認証に接続する場合は、Azure ManagedIdentityでAzureAD認証を実行してから、AzureADアクセストークンを取得してデータベースに接続できます。

    詳細な手順は次のとおりです

    1. Azure関数アプリからAzureMSIを有効にします

    2. MSIのクライアントIDを取得する

    az login
    az ad sp show --id <the object id of the msi> --query appId --output tsv
    
    1. PostgresデータベースでAzureAD管理者を構成する

    2. AzureAD管理者を使用してデータベースに接続します。 (私はPgAdminを使用して接続します)

    SET aad_validate_oids_in_tenant = off;
    CREATE ROLE <userName> WITH LOGIN PASSWORD '<the appid of the MSI>' IN ROLE azure_ad_user;
    
    1. Postgresサーバーファイアウォールを構成します。 AzureFunctionアプリのアウトバウンドIPアドレスをファイアウォールに追加してください。 Azure関数アプリのアウトバウンドIPアドレスを取得し、Postgresサーバーファイアウォールを構成する方法については、ここ およびこちら

    2. SSLを有効にする場合は、SSL証明書 リンク 経由

    3. 関数。 (サンプルの作成には.netコアを使用しています)

    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。上記のSSL証明書をプロジェクトに追加します。たとえば、フォルダcertを作成します 私のプロジェクトで証明書をフォルダに保存します

    c。コード

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

    詳細については、こちら<を参照してください。 / a>




    1. SQLServerでのメモリ設定の重要性を理解する

    2. SCUMMダッシュボードを使用したMySQLの効果的な監視:パート3

    3. OracleでのDapperQueryMultipleの使用

    4. MySQLにはどのPython3ライブラリを使用する必要がありますか?