メインコンテンツまでスキップ

認証について

備考

Lakebase オートスケールは次のリージョンで利用できます: us-east-1us-east-2eu-central-1eu-west-1eu-west-2ap-south-1ap-southeast-1ap-southeast-2

Lakebase オートスケールは、オートスケール コンピュート、ゼロへのスケール、分岐、即時復元を備えた Lakebase の最新バージョンです。 Lakebase プロビジョニングとの機能の比較については、 「バージョン間の選択」を参照してください。

Lakebase Postgres へのデータベース接続を認証する方法を学びます。接続手順の詳細については、 「クイックスタート」を参照してください。

概要

Lakebase は、それぞれ異なるユースケース向けに設計された 2 つの認証方法をサポートしています。

OAuth仮想認証: 時間制限のあるOAuth仮想マシンを持つDatabricks ID を使用します。 最適な用途:

  • トークンを更新できるインタラクティブセッション
  • ワークスペース統合ワークフロー
  • トークンローテーションを実装できるアプリケーション
  • Databricksで認証を管理したい場合

ネイティブ Postgres パスワード認証: パスワードを使用した従来の Postgres ロールを使用します。最適な用途:

  • 1時間ごとに認証情報を更新できないアプリケーション
  • 長時間実行されるプロセス
  • トークンローテーションをサポートしていないツール
注記

プラットフォーム管理とデータベース アクセス : このページでは、データベース認証 (データベースに接続するための OAuth トークンと Postgres パスワード) に焦点を当てています。プラットフォーム管理認証 (プロジェクト、ブランチ、コンピュートの作成) については、 「プロジェクトの権限」を参照してください。

接続タイムアウト

認証方法に関係なく、すべてのデータベース接続には次の制限が適用されます。

  • 24 時間アイドル タイムアウト: 24 時間アクティビティがない接続は自動的に閉じられます。
  • 最大 3 日間の接続寿命: 3 日を超えて存続している接続は、アクティビティに関係なく閉じられる場合があります。

適切なタイムアウト設定を使用して接続再試行ロジックを実装し、接続タイムアウトを適切に処理するようにアプリケーションを設計します。

OAuth認証

OAuth トークン認証を使用すると、Databricks ID を使用して接続できます。Lakebase UI から時間制限のある OAuth トークンを生成し、Postgres に接続するときにパスワードとして使用します。

プロジェクトオーナーの OAuth ロールは自動的に作成されます。他の Databricks ID の OAuth 認証を有効にするには、 databricks_auth拡張機能と SQL を使用して Postgres ロールを作成する必要があります。「SQL を使用して DB ID の OAuth ロールを作成する」を参照してください。

OAuthバンクの仕組み

  • OAuth 有効期限: OAuth 1 時間後に期限切れになります。
  • 有効期限の適用: トークンの有効期限はログイン時にのみ適用されます。トークンの有効期限が切れた後も、開いている接続はアクティブなままになります。
  • 再認証: トークンの有効期限が切れると、すべての Postgres クエリまたはコマンドが失敗します。
  • 一回更新: インタラクティブなセッションの場合、必要に応じて UI から新しい一回を生成します。 接続が長時間実行されるアプリケーションの場合は、トークンのローテーションを実装して資格情報を自動的に更新します。

要件と制限

  • 対応する Postgres ロールが必要です : Databricks ID には対応する Postgres ロールが必要です。プロジェクトオーナーのロールは自動的に作成されます。その他の Databricks ID の場合は、 databricks_auth拡張機能を使用してロールを作成します。
  • ワークスペースのスコープ : OAuthオフラインはワークスペースのスコープであり、プロジェクトを所有する同じワークスペースに属している必要があります。 ワークスペース間のトークン認証はサポートされていません。
  • SSL が必要 : トークンベースの認証には SSL 接続が必要です。すべてのクライアントは SSL (通常はsslmode=require ) を使用するように構成する必要があります。

ユーザーからマシンへのフローで OAuth トークンを取得する

データベースの所有者、管理者である場合、または Databricks ID にデータベースに対応する Postgres ロールがある場合は、UI、Databricks API、CLI、またはいずれかの Databricks SDK から OAuth トークンを取得できます。

その他の Databricks ID ユーザーの場合、OAuth トークンを取得するためのワークスペース レベルの承認手順については、「OAuth を使用して Databricks へのユーザー アクセスを承認する」を参照してください。

psql や DBeaver などの SQL クライアントを使用する場合は、Lakebase UI を使用してトークンを生成します。

  1. Lakebase アプリでプロジェクトに移動します。
  2. 接続したいブランチとコンピュートを選択します。
  3. 「接続」 をクリックし、指示に従って OAuth トークンを生成します。

詳細な手順については、 「OAuth ロールを使用して接続する」を参照してください。

マシンツーマシンフローでOAuthトークンを取得する

データベースへの安全で自動化された (マシン間) アクセスを有効にするには、 Databricksプリンシパルを使用してOAuthトークンを取得する必要があります。 このプロセスには、サービスプリンシパルの構成、資格情報の生成、認証用のOAuth VPN の作成が含まれます。

  1. 無期限に有効な資格情報を使用してサービスプリンシパルを構成します。 手順については、 「 OAuthを使用したDatabricksへのサービスプリンシパルのアクセスを承認する」を参照してください。
  2. 新しいOAuthローソンをサービスプリンシパルとしてミントします。
Bash
# Generate OAuth token for database connection (1-hour expiration)
databricks postgres generate-database-credential projects/my-project/branches/production/endpoints/my-compute --output json

応答:

JSON
{
"token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...",
"expire_time": "2026-01-22T17:07:00Z"
}

データベースに接続するときに、 token値をパスワードとして使用します。

注記

1 時間ごとの有効期限前に OAuth トークンをローテーションします。

  • 使用のたびに OAuth トークンの有効期限を確認し、必要に応じて更新します。
  • または、現在の OAuth トークンを定期的に更新するバックグラウンド スレッドを設定します。

トークンローテーションの例

OAuthウイルスは 1 時間後に期限切れになるため、長時間実行されるデータベース接続を維持するアプリケーションは、資格情報を定期的に更新するためのローテーションを実装する必要があります。 次の例は、アプリケーション コード内でトークンを自動的にローテーションする方法を示しています。

注記

これらの例の要件:

  • プロジェクトを所有するワークスペースに対して認証を受ける必要があります。WorkspaceClient()はワークスペースの OAuth 認証情報を使用してデータベース トークンを生成します。
  • Databricks ID は、プロジェクトが作成されたワークスペースのメンバーである必要があります。
  • Lakebase アプリの [接続 ] ダイアログから接続 (ホスト、データベース、エンドポイント) を取得します。 詳細についてはクイックスタートを参照してください。
  • endpoint問題は次の形式を使用します。 projects/{project-id}/branches/{branch-id}/endpoints/{endpoint-id}

ワークスペース認証の設定については、 OAuthを使用したDatabricksへのユーザー アクセスを承認する」またはOAuthを使用したDatabricksへのサービスプリンシパル アクセスを承認する」を参照してください。

この例では、新しい接続が作成されるたびに新しい OAuth トークンを生成するカスタム接続クラスを備えた psycopg3 の接続プールを使用します。このアプローチにより、プールからの各接続には常に有効な最新のトークンが保持されます。

Python
%pip install "psycopg[binary,pool]"
Python
from databricks.sdk import WorkspaceClient

import psycopg
from psycopg_pool import ConnectionPool

w = WorkspaceClient()

class CustomConnection(psycopg.Connection):
global w
def __init__(self, *args, **kwargs):
# Call the parent class constructor
super().__init__(*args, **kwargs)

@classmethod
def connect(cls, conninfo='', **kwargs):
# Generate a fresh OAuth token for each connection
endpoint = "projects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>"
credential = w.postgres.generate_database_credential(endpoint=endpoint)
kwargs['password'] = credential.token

# Call the superclass's connect method with updated kwargs
return super().connect(conninfo, **kwargs)

# Configure connection parameters (get these from the Connect dialog in the LakeBase App)
username = "your.email@company.com" # Your DB identity
host = "ep-example.database.region.databricks.com" # Your compute endpoint hostname
port = 5432
database = "databricks_postgres"

# Create connection pool with custom connection class
pool = ConnectionPool(
conninfo=f"dbname={database} user={username} host={host} sslmode=require",
connection_class=CustomConnection,
min_size=1,
max_size=10,
open=True
)

# Use the connection pool
with pool.connection() as conn:
with conn.cursor() as cursor:
cursor.execute("SELECT version()")
for record in cursor:
print(record)

Postgresのパスワード認証

ネイティブ Postgres パスワード認証では、パスワードを使用した従来の Postgres ロールが使用されます。OAuth トークンとは異なり、これらのパスワードは 1 時間経過しても期限切れにならないため、頻繁な資格情報のローテーションを処理できないアプリケーションに適しています。

Postgresパスワードを使用する場合

次の場合に Postgres パスワード認証を使用します。

  • アプリケーションまたはツールは1時間ごとに認証情報を更新できません
  • 安定した資格情報を必要とする長時間実行されるプロセスがある
  • クライアント ライブラリは OAuth トークンのローテーションをサポートしていません
  • 互換性のために従来のデータベース認証が必要です

Postgresのパスワードの仕組み

  • パスワードの有効期間 : パスワードは自動的に期限切れにならない
  • ワークスペース統合なし : 認証は Databricks ワークスペース認証ではなく Postgres によって処理されます
  • 手動管理 : パスワードは手動でローテーションし、ユーザーに配布する必要があります。
  • 接続タイムアウトは引き続き適用されます : パスワードに有効期限はありませんが、接続には24時間のアイドルタイムアウトと最大7日間の接続寿命が適用されます。

セキュリティに関する考慮事項

  • パスワードの保存 : 環境変数または秘密管理システムを使用してパスワードを安全に保存します
  • SSL が必要です : すべての接続で SSL を使用する必要があります ( sslmode=require )

次のステップ