PostgreSQL での認証に Azure Active Directory を使用するUse Azure Active Directory for authenticating with PostgreSQL

この記事では、Azure Database for PostgreSQL を使用して Azure Active Directory アクセスを構成する方法と、Azure AD トークンを使用して接続する方法について説明します。This article will walk you through the steps how to configure Azure Active Directory access with Azure Database for PostgreSQL, and how to connect using an Azure AD token.

重要

Azure Database for PostgreSQL の Azure AD 認証は現在、パブリック プレビュー段階にあります。Azure AD authentication for Azure Database for PostgreSQL is currently in public preview. このプレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。This preview version is provided without a service level agreement, and it's not recommended for production workloads. 特定の機能はサポート対象ではなく、機能が制限されることがあります。Certain features might not be supported or might have constrained capabilities. 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。For more information, see Supplemental Terms of Use for Microsoft Azure Previews.

Azure AD 管理者ユーザーを設定するSetting the Azure AD Admin user

Azure AD ベースの認証用にユーザーを作成/有効化できるのは、Azure AD 管理者ユーザーだけです。Only an Azure AD Admin user can create/enable users for Azure AD-based authentication. Azure AD 管理者ユーザーを作成するには、次の手順に従いますTo create and Azure AD Admin user, please follow the following steps

  1. Azure portal で、Azure AD に対して有効にする Azure Database for PostgreSQL のインスタンスを選択します。In the Azure portal, select the instance of Azure Database for PostgreSQL that you want to enable for Azure AD.
  2. [設定] で、[Active Directory 管理者] を選択します。Under Settings, select Active Directory Admin:

Azure AD 管理者の設定

  1. 顧客テナントで Azure AD 管理者にする有効な Azure AD ユーザーを選択します。Select a valid Azure AD user in the customer tenant to be Azure AD administrator.

重要

管理者を設定すると、管理者の完全なアクセス許可を持つ新しいユーザーが Azure Database for PostgreSQL サーバーに追加されます。When setting the administrator, a new user is added to the Azure Database for PostgreSQL server with full administrator permissions. Azure Database for PostgreSQL の Azure AD 管理者ユーザーは、ロール azure_ad_admin を持ちます。The Azure AD Admin user in Azure Database for PostgreSQL will have the role azure_ad_admin.

作成できる Azure AD 管理者は、PostgreSQL サーバーあたり 1 人だけです。別の管理者を選択すると、そのサーバーに構成されている既存の Azure AD 管理者が上書きされます。Only one Azure AD admin can be created per PostgreSQL server and selection of another one will overwrite the existing Azure AD admin configured for the server. 個々のユーザーではなく、Azure AD グループを指定して、複数の管理者を持つことができます。You can specify an Azure AD group instead of an individual user to have multiple administrators. その後、管理目的には、グループ名を使用してサインインすることに注意してください。Note that you will then sign in with the group name for administration purposes.

Azure Database for PostgreSQL で Azure AD ユーザーを作成するCreating Azure AD users in Azure Database for PostgreSQL

Azure Database for PostgreSQL データベースに Azure AD ユーザーを追加するには、接続後に次の手順を実行します (接続方法については、後述のセクションを参照してください)。To add an Azure AD user to your Azure Database for PostgreSQL database, perform the following steps after connecting (see later section on how to connect):

  1. まず、Azure AD ユーザー <user>@yourtenant.onmicrosoft.com が Azure AD テナントの有効なユーザーであることを確認します。First ensure that the Azure AD user <user>@yourtenant.onmicrosoft.com is a valid user in Azure AD tenant.
  2. Azure AD 管理者ユーザーとして Azure Database for PostgreSQL インスタンスにサインインします。Sign in to your Azure Database for PostgreSQL instance as the Azure AD Admin user.
  3. Azure Database for PostgreSQL でロール <user>@yourtenant.onmicrosoft.com を作成します。Create role <user>@yourtenant.onmicrosoft.com in Azure Database for PostgreSQL.
  4. <user>@yourtenant.onmicrosoft.com をロール azure_ad_user のメンバーにします。Make <user>@yourtenant.onmicrosoft.com a member of role azure_ad_user. これは、Azure AD ユーザーにのみ付与する必要があります。This must only be given to Azure AD users.

例:Example:

CREATE ROLE "user1@yourtenant.onmicrosoft.com" WITH LOGIN IN ROLE azure_ad_user;

注意

Azure AD を通じてユーザーを認証しても、Azure Database for PostgreSQL データベース内のオブジェクトにアクセスするためのアクセス許可はユーザーに付与されません。Authenticating a user through Azure AD does not give the user any permissions to access objects within the Azure Database for PostgreSQL database. 必要なアクセス許可をユーザーに手動で付与する必要があります。You must grant the user the required permissions manually.

Azure Database for PostgreSQL で Azure AD グループを作成するCreating Azure AD groups in Azure Database for PostgreSQL

Azure AD グループがデータベースにアクセスできるようにするには、ユーザーの場合と同じメカニズムを使用しますが、代わりにグループ名を指定します。To enable an Azure AD group for access to your database, use the same mechanism as for users, but instead specify the group name:

例:Example:

CREATE ROLE "Prod DB Readonly" WITH LOGIN IN ROLE azure_ad_user;

ログインするときに、グループのメンバーは自分の個人用アクセス トークンを使用しますが、ユーザー名として指定されたグループ名でサインインします。When logging in, members of the group will use their personal access tokens, but sign with the group name specified as the username.

Azure AD を使用して Azure Database for PostgreSQL に接続するConnecting to Azure Database for PostgreSQL using Azure AD

次の概要図は、Azure Database for PostgreSQL で Azure AD 認証を使用するワークフローをまとめたものです。The following high-level diagram summarizes the workflow of using Azure AD authentication with Azure Database for PostgreSQL:

認証フロー

Azure AD 統合は、psql などの一般的な PostgreSQL ツールと連携するように設計されています。これらのツールは Azure AD 対応ではなく、PostgreSQL に接続するときにユーザー名とパスワードを指定することのみをサポートしています。We’ve designed the Azure AD integration to work with common PostgreSQL tools like psql, which are not Azure AD aware and only support specifying username and password when connecting to PostgreSQL. 上の図に示されているように、Azure AD トークンをパスワードとして渡します。We pass the Azure AD token as the password as shown in the picture above.

現在、次のクライアントがテストされています。We currently have tested the following clients:

  • psql commandline (PGPASSWORD 変数を使用してトークンを渡す。以下を参照)psql commandline (utilize the PGPASSWORD variable to pass the token, see below)
  • Azure Data Studio (PostgreSQL 拡張機能を使用)Azure Data Studio (using the PostgreSQL extension)
  • その他の libpq ベースのクライアント (例: 一般的なアプリケーション フレームワークと ORM)Other libpq based clients (e.g. common application frameworks and ORMs)

注意

pgAdmin には、パスワードに対して 256 文字というハードコーディングの制限があり、Azure AD トークンはこれを超えているため、pgAdmin でこのトークンを使用することは現在サポートされていないことに注意してください。Please be aware that using the Azure AD token with pgAdmin is currently not supported, since it has a hard-coded limitation of 256 characters for passwords (which the token exceeds).

ユーザー/アプリケーションで Azure AD を使用して認証を行う必要がある手順を次に示します。These are the steps that a user/application will need to do authenticate with Azure AD described below:

手順 1:Azure AD による認証Step 1: Authenticate with Azure AD

Azure CLI がインストールされていることを確認します。Make sure you have the Azure CLI installed.

Azure CLI ツールを呼び出して、Azure AD で認証します。Invoke the Azure CLI tool to authenticate with Azure AD. ご自分の Azure AD ユーザー ID とパスワードを指定する必要があります。It requires you to give your Azure AD user ID and the password.

az login

このコマンドを実行すると、ブラウザー ウィンドウが起動して Azure AD 認証ページが表示されます。This command will launch a browser window to the Azure AD authentication page.

注意

Azure Cloud Shell を使用してこれらの手順を実行することもできます。You can also use Azure Cloud Shell to perform these steps. Azure Cloud Shell で Azure AD アクセス トークンを取得する場合は、明示的に az login を呼び出して、(別のウィンドウでコードを使用して) もう一度サインインする必要があることに注意してください。Please be aware that when retrieving Azure AD access token in the Azure Cloud Shell you will need to explicitly call az login and sign in again (in the separate window with a code). サインイン後、get-access-token コマンドは正常に動作します。After that sign in the get-access-token command will work as expected.

手順 2:Azure AD アクセス トークンを取得するStep 2: Retrieve Azure AD access token

Azure CLI ツールを起動して、手順 1 で認証された Azure AD ユーザーのアクセス トークンを取得し、Azure Database for PostgreSQL にアクセスします。Invoke the Azure CLI tool to acquire an access token for the Azure AD authenticated user from step 1 to access Azure Database for PostgreSQL.

例 (パブリック クラウドの場合):Example (for Public Cloud):

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

上記のリソース値は、示されているとおりに正確に指定する必要があります。The above resource value must be specified exactly as shown. 他のクラウドの場合、リソース値は次を使用して検索できます。For other clouds, the resource value can be looked up using:

az cloud show

Azure CLI バージョン 2.0.71 以降では、すべてのクラウドに対して、次のより便利なバージョンでコマンドを指定できます。For Azure CLI version 2.0.71 and later, the command can be specified in the following more convenient version for all clouds:

az account get-access-token --resource-type oss-rdbms

認証が成功すると、Azure AD によってアクセス トークンが返されます。After authentication is successful, Azure AD will return an access token:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

トークンは、認証されたユーザーに関するすべての情報をエンコードする Base 64 文字列であり、Azure Database for PostgreSQL サービスをターゲットとしています。The token is a Base 64 string that encodes all the information about the authenticated user, and which is targeted to the Azure Database for PostgreSQL service.

注意

アクセス トークンの有効性は、5 分から 60 分の範囲内です。The access token validity is anywhere between 5 minutes to 60 minutes. アクセス トークンは、Azure Database for PostgreSQL へのログインを開始する直前に取得することをお勧めします。We recommend you get the access token just before initiating the login to Azure Database for PostgreSQL.

手順 3:PostgreSQL でログインするためのパスワードとしてトークンを使用するStep 3: Use token as password for logging in with PostgreSQL

接続時には、PostgreSQL ユーザー パスワードとしてアクセス トークンを使用する必要があります。When connecting you need to use the access token as the PostgreSQL user password.

psql コマンド ライン クライアントを使用する場合は、PGPASSWORD 環境変数を介してアクセス トークンを渡す必要があります。これは、アクセス トークンが、psql が直接受け入れることができるパスワードの長さを超えているためです。When using the psql command line client, the access token needs to be passed through the PGPASSWORD environment variable, since the access token exceeds the password length that psql can accept directly:

Windows の例:Windows Example:

set PGPASSWORD=<copy/pasted TOKEN value from step 2>

Linux/macOS の例:Linux/macOS Example:

export PGPASSWORD=<copy/pasted TOKEN value from step 2>

これで、通常行っているように、Azure Database for PostgreSQL との接続を開始できるようになりました。Now you can initiate a connection with Azure Database for PostgreSQL like you normally would:

psql "host=mydb.postgres... user=user@tenant.onmicrosoft.com@mydb dbname=postgres"

これで、Azure AD 認証を使用して PostgreSQL サーバーに対して認証されました。You are now authenticated to your PostgreSQL server using Azure AD authentication.

トークンの検証Token Validation

Azure Database for PostgreSQL での Azure AD 認証により、ユーザーが PostgreSQL サーバーに存在することが保証され、トークンの内容を検証することによってトークンの有効性がチェックされます。Azure AD authentication in Azure Database for PostgreSQL ensures that the user exists in the PostgreSQL server, and it checks the validity of the token by validating the contents of the token. 次のトークンの検証手順が実行されます。The following token validation steps are performed:

  • トークンが Azure AD によって署名されていて、改ざんされていないことToken is signed by Azure AD and has not been tampered with
  • トークンがサーバーに関連付けられているテナントの Azure AD によって発行されたことToken was issued by Azure AD for the tenant associated with the server
  • トークンの有効期限が切れていないことToken has not expired
  • トークンが (別の Azure リソースではなく) Azure Database for PostgreSQL リソース用であることToken is for the Azure Database for PostgreSQL resource (and not another Azure resource)

既存の PostgreSQL ユーザーを Azure AD ベースの認証に移行するMigrating existing PostgreSQL users to Azure AD-based authentication

既存のユーザーに対して Azure AD 認証を有効にすることができます。You can enable Azure AD authentication for existing users. 考慮すべきケースが 2 つあります。There are two cases to consider:

ケース 1:PostgreSQL ユーザー名が Azure AD のユーザー プリンシパル名と一致しているCase 1: PostgreSQL username matches the Azure AD User Principal Name

まれなケースで既存のユーザーが Azure AD のユーザー名と既に一致している場合は、そのユーザーに Azure AD 認証を有効にするために azure_ad_user ロールを付与することができます。In the unlikely case that your existing users already match the Azure AD user names, you can grant the azure_ad_user role to them in order to enable them for Azure AD authentication:

GRANT azure_ad_user TO "existinguser@yourtenant.onmicrosoft.com";

これで、以前に構成した PostgreSQL ユーザー パスワードを使用するのではなく、Azure AD の資格情報でサインインできるようになります。They will now be able to sign in with Azure AD credentials instead of using their previously configured PostgreSQL user password.

ケース 2:PostgreSQL ユーザー名が Azure AD のユーザー プリンシパル名と異なっているCase 2: PostgreSQL username is different than the Azure AD User Principal Name

PostgreSQL ユーザーが Azure AD に存在しない場合、または別のユーザー名を持っている場合は、Azure AD グループを使用して、この PostgreSQL ユーザーとして認証することができます。If a PostgreSQL user either does not exist in Azure AD or has a different username, you can use Azure AD groups to authenticate as this PostgreSQL user. 既存の Azure Database for PostgreSQL ユーザーを Azure AD に移行するには、PostgreSQL ユーザーと一致する名前を持つ Azure AD グループを作成し、既存の PostgreSQL ユーザーにロール azure_ad_user を付与します。You can migrate existing Azure Database for PostgreSQL users to Azure AD by creating an Azure AD group with a name that matches the PostgreSQL user, and then granting role azure_ad_user to the existing PostgreSQL user:

GRANT azure_ad_user TO "DBReadUser";

これは、Azure AD に "DBReadUser" というグループが作成されていることを前提としています。This assumes you have created a group "DBReadUser" in your Azure AD. これで、そのグループに属するユーザーが、このユーザーとしてデータベースにサインインできるようになります。Users belonging to that group will now be able to sign in to the database as this user.

次の手順Next steps