Share via


Azure Database for PostgreSQL を Service Connector と統合する

このページでは、サポートされている認証方法とクライアントを示し、Service Connector を使用して Azure Database for PostgreSQL を他のクラウド サービスに接続するために使用できるサンプル コードを示します。 Service Connector を使用しなくても、他のプログラミング言語内で Azure Database for PostgreSQL に引き続き接続できる場合があります。 このページには、サービス接続を作成するときに取得する既定の環境変数の名前と値 (つまり、Spring Boot 構成) も示されています。

サポートされているコンピューティング サービス

Service Connector を使用して、次のコンピューティング サービスを Azure Database for PostgreSQL に接続できます。

  • Azure App Service
  • Azure Functions
  • Azure App Configuration
  • Azure Spring Apps

サポートされている認証の種類とクライアントの種類

次の表は、Service Connector を使用してコンピューティング サービスを Azure Database for PostgreSQL に接続するためにサポートされている認証方法とクライアントの組み合わせを示しています。 "はい" は組み合わせがサポートされていることを示し、"いいえ" はサポートされていないことを示します。

クライアント タイプ システム割り当てマネージド ID ユーザー割り当てマネージド ID シークレット/接続文字列 サービス プリンシパル
.NET はい イエス イエス はい
Go (pg) はい イエス イエス はい
Java (JDBC) はい イエス イエス はい
Java - Spring Boot (JDBC) はい イエス イエス はい
Node.js (pg) はい イエス イエス はい
PHP (ネイティブ) はい イエス イエス はい
Python (psycopg2) はい イエス イエス はい
Python-Django はい イエス イエス はい
Ruby (ruby-pg) はい イエス イエス はい
なし 有効 イエス イエス はい

この表は、表内のクライアント・タイプと認証方法のすべての組み合わせがサポートされていることを示しています。 すべてのクライアントの種類では、任意の認証方法を使用して、Service Connector を使用して Azure Database for PostgreSQL に接続できます。

Note

システム割り当てマネージド ID、ユーザー割り当てマネージド ID、サービス プリンシパルのみが Azure CLI でサポートされています。

既定の環境変数名またはアプリケーション プロパティとサンプル コード

コンピューティング サービスを Azure Database for PostgreSQL に接続するには、接続の認証の種類とクライアントの種類に従って、次の表にある接続の詳細とサンプル コードを参照してください。 名前付け規則の詳細については、Service Connector の内部の記事を参照してください。

システム割り当てマネージド ID

既定の環境変数名 説明 例値
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL 接続文字列 Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

サンプル コード

システム割り当てマネージド ID を使用して Azure Database for PostgreSQL に接続するには、以下の手順とコードを参照してください。

.NET の場合、パスワードレス接続をサポートするためのプラグインやライブラリはありません。 Azure.Identity のようなクライアント ライブラリを使って、マネージド ID またはサービス プリンシパルのアクセス トークンを取得できます。 次に、アクセス トークンをパスワードとして使用してデータベースに接続できます。 次のコードを使用する場合は、使用する認証型のコード スニペットの一部をコメント解除します。

using Azure.Identity;
using Azure.Core;
using Npgsql;

// Uncomment the following lines according to the authentication type.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();

// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
//     }
// );

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);

// Acquire the access token. 
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
    new TokenRequestContext(scopes: new string[]
    {
        "https://ossrdbms-aad.database.windows.net/.default"
    }));

// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
    $"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";

// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
    Console.WriteLine("Opening connection using access token...");
    connection.Open();
}

次に、Service Connector を使用する前に PostgreSQL フレキシブル サーバーでテーブルとシーケンスを作成している場合、所有者として接続し、Service Connector によって作成された <aad-username> にアクセス許可を付与する必要があります。 Service Connector によって設定された接続文字列または構成からのユーザー名は aad_<connection name> のようになるはずです。 Azure portal を使用する場合、Service Type 列の横にある展開ボタンを選択し、値を取得します。 Azure CLI を使用する場合、CLI コマンドの出力の configurations をチェックします。

次に、クエリを実行してアクセス許可を付与します

az extension add --name rdbms-connect

az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"

<owner-username><owner-password> は、他のユーザーにアクセス許可を付与できる既存のテーブルの所有者です。 <aad-username> は、サービス コネクタによって作成されたユーザーです。 これらを実際の値に置き換えます。

次のコマンドを使用して結果を検証します。

az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table

ユーザー割り当てマネージド ID

既定の環境変数名 説明 例値
AZURE_POSTGRESQL_CLIENTID クライアント ID <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL 接続文字列 Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

サンプル コード

ユーザー割り当てマネージド ID を使用して Azure Database for PostgreSQL に接続するには、以下の手順とコードを参照してください。

.NET の場合、パスワードレス接続をサポートするためのプラグインやライブラリはありません。 Azure.Identity のようなクライアント ライブラリを使って、マネージド ID またはサービス プリンシパルのアクセス トークンを取得できます。 次に、アクセス トークンをパスワードとして使用してデータベースに接続できます。 次のコードを使用する場合は、使用する認証型のコード スニペットの一部をコメント解除します。

using Azure.Identity;
using Azure.Core;
using Npgsql;

// Uncomment the following lines according to the authentication type.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();

// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
//     }
// );

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);

// Acquire the access token. 
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
    new TokenRequestContext(scopes: new string[]
    {
        "https://ossrdbms-aad.database.windows.net/.default"
    }));

// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
    $"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";

// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
    Console.WriteLine("Opening connection using access token...");
    connection.Open();
}

次に、Service Connector を使用する前に PostgreSQL フレキシブル サーバーでテーブルとシーケンスを作成している場合、所有者として接続し、Service Connector によって作成された <aad-username> にアクセス許可を付与する必要があります。 Service Connector によって設定された接続文字列または構成からのユーザー名は aad_<connection name> のようになるはずです。 Azure portal を使用する場合、Service Type 列の横にある展開ボタンを選択し、値を取得します。 Azure CLI を使用する場合、CLI コマンドの出力の configurations をチェックします。

次に、クエリを実行してアクセス許可を付与します

az extension add --name rdbms-connect

az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"

<owner-username><owner-password> は、他のユーザーにアクセス許可を付与できる既存のテーブルの所有者です。 <aad-username> は、サービス コネクタによって作成されたユーザーです。 これらを実際の値に置き換えます。

次のコマンドを使用して結果を検証します。

az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table

Connection String

既定の環境変数名 説明 例値
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL 接続文字列 Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

サンプル コード

接続文字列を使用して Azure Database for PostgreSQL に接続するには、以下の手順とコードを参照してください。

  1. 依存関係をインストールします。 ガイダンスに従って Npgsql をインストールします
  2. コードでは、Service Connector サービスによって追加された環境変数から PostgreSQL 接続文字列を取得します。 PostgreSQL サーバーの TSL 構成を設定するには、これらの手順を参照してください。
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

サービス プリンシパル

既定の環境変数名 説明 例値
AZURE_POSTGRESQL_CLIENTID クライアント ID <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET クライアント シークレット <client-secret>
AZURE_POSTGRESQL_TENANTID テナント ID <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL 接続文字列 Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

サンプル コード

サービス プリンシパルを使用して Azure Database for PostgreSQL に接続するには、以下の手順とコードを参照してください。

.NET の場合、パスワードレス接続をサポートするためのプラグインやライブラリはありません。 Azure.Identity のようなクライアント ライブラリを使って、マネージド ID またはサービス プリンシパルのアクセス トークンを取得できます。 次に、アクセス トークンをパスワードとして使用してデータベースに接続できます。 次のコードを使用する場合は、使用する認証型のコード スニペットの一部をコメント解除します。

using Azure.Identity;
using Azure.Core;
using Npgsql;

// Uncomment the following lines according to the authentication type.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();

// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
//     }
// );

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);

// Acquire the access token. 
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
    new TokenRequestContext(scopes: new string[]
    {
        "https://ossrdbms-aad.database.windows.net/.default"
    }));

// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
    $"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";

// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
    Console.WriteLine("Opening connection using access token...");
    connection.Open();
}

次に、Service Connector を使用する前に PostgreSQL フレキシブル サーバーでテーブルとシーケンスを作成している場合、所有者として接続し、Service Connector によって作成された <aad-username> にアクセス許可を付与する必要があります。 Service Connector によって設定された接続文字列または構成からのユーザー名は aad_<connection name> のようになるはずです。 Azure portal を使用する場合、Service Type 列の横にある展開ボタンを選択し、値を取得します。 Azure CLI を使用する場合、CLI コマンドの出力の configurations をチェックします。

次に、クエリを実行してアクセス許可を付与します

az extension add --name rdbms-connect

az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"

<owner-username><owner-password> は、他のユーザーにアクセス許可を付与できる既存のテーブルの所有者です。 <aad-username> は、サービス コネクタによって作成されたユーザーです。 これらを実際の値に置き換えます。

次のコマンドを使用して結果を検証します。

az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table

次のステップ

Service Connector の詳細については、以下のチュートリアルに従ってください。