認証について
Lakebase オートスケールは次のリージョンで利用できます: us-east-1 、 us-east-2 、 eu-central-1 、 eu-west-1 、 eu-west-2 、 ap-south-1 、 ap-southeast-1 、 ap-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 へのユーザー アクセスを承認する」を参照してください。
- UI
- CLI
- Python SDK
- Java SDK
psql や DBeaver などの SQL クライアントを使用する場合は、Lakebase UI を使用してトークンを生成します。
- Lakebase アプリでプロジェクトに移動します。
- 接続したいブランチとコンピュートを選択します。
- 「接続」 をクリックし、指示に従って OAuth トークンを生成します。
詳細な手順については、 「OAuth ロールを使用して接続する」を参照してください。
# Generate OAuth token for database connection (1-hour expiration)
databricks postgres generate-database-credential projects/my-project/branches/production/endpoints/my-compute --output json
応答:
{
"token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...",
"expire_time": "2026-01-22T17:07:00Z"
}
データベースに接続するときに、 token値をパスワードとして使用します。
Databricks SDK for Pythonを使用して OAuth トークンを生成できます。
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# Generate OAuth token for database connection (1-hour expiration)
credential = w.postgres.generate_database_credential(
endpoint="projects/my-project/branches/production/endpoints/my-compute"
)
print(f"Token: {credential.token}")
print(f"Expires: {credential.expire_time}")
# Use the token to connect to Postgres
import psycopg2
conn = psycopg2.connect(
host="ep-example.database.region.databricks.com",
port=5432,
database="postgres",
user="your.email@company.com",
password=credential.token,
sslmode="require"
)
Databricks SDK for Javaを使用して OAuth トークンを生成できます。
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;
WorkspaceClient w = new WorkspaceClient();
// Generate OAuth token for database connection (1-hour expiration)
DatabaseCredential credential = w.postgres().generateDatabaseCredential(
new GenerateDatabaseCredentialRequest()
.setEndpoint("projects/my-project/branches/production/endpoints/my-compute")
);
System.out.println("Token: " + credential.getToken());
System.out.println("Expires: " + credential.getExpireTime());
マシンツーマシンフローでOAuthトークンを取得する
データベースへの安全で自動化された (マシン間) アクセスを有効にするには、 Databricksプリンシパルを使用してOAuthトークンを取得する必要があります。 このプロセスには、サービスプリンシパルの構成、資格情報の生成、認証用のOAuth VPN の作成が含まれます。
- 無期限に有効な資格情報を使用してサービスプリンシパルを構成します。 手順については、 「 OAuthを使用したDatabricksへのサービスプリンシパルのアクセスを承認する」を参照してください。
- 新しいOAuthローソンをサービスプリンシパルとしてミントします。
- CLI
- Python SDK
- Java SDK
# Generate OAuth token for database connection (1-hour expiration)
databricks postgres generate-database-credential projects/my-project/branches/production/endpoints/my-compute --output json
応答:
{
"token": "eyJraWQiOiI1NDdkNjFjNzQ2YTk3M2Q3M2ViNjM2YWRiMWY2Nz...",
"expire_time": "2026-01-22T17:07:00Z"
}
データベースに接続するときに、 token値をパスワードとして使用します。
Databricks SDK for Pythonを使用して OAuth トークンを生成できます。
from databricks.sdk import WorkspaceClient
w = WorkspaceClient(
host="https://<YOUR WORKSPACE URL>/",
client_id="<YOUR SERVICE PRINCIPAL ID>",
client_secret="REDACTED"
)
# Generate OAuth token for database connection (1-hour expiration)
credential = w.postgres.generate_database_credential(
endpoint="projects/my-project/branches/production/endpoints/my-compute"
)
print(f"Token: {credential.token}")
print(f"Expires: {credential.expire_time}")
Databricks SDK for Javaを使用して OAuth トークンを生成できます。
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
import com.databricks.sdk.service.postgres.*;
// Initialize with service principal credentials
DatabricksConfig config = new DatabricksConfig()
.setHost("https://<YOUR WORKSPACE URL>/")
.setClientId("<YOUR SERVICE PRINCIPAL ID>")
.setClientSecret("REDACTED");
WorkspaceClient w = new WorkspaceClient(config);
// Generate OAuth token for database connection (1-hour expiration)
DatabaseCredential credential = w.postgres().generateDatabaseCredential(
new GenerateDatabaseCredentialRequest()
.setEndpoint("projects/my-project/branches/production/endpoints/my-compute")
);
System.out.println("Token: " + credential.getToken());
System.out.println("Expires: " + credential.getExpireTime());
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へのサービスプリンシパル アクセスを承認する」を参照してください。
- Python: psycopg3
- Python: SQLAlchemy
この例では、新しい接続が作成されるたびに新しい OAuth トークンを生成するカスタム接続クラスを備えた psycopg3 の接続プールを使用します。このアプローチにより、プールからの各接続には常に有効な最新のトークンが保持されます。
%pip install "psycopg[binary,pool]"
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)
この例では、15 分ごとに OAuth トークンを自動的に更新するイベント リスナーを備えた SQLAlchemy の接続プールを使用します。イベント リスナーは、プールから新しい接続が作成されるたびにトークンの有効期間をチェックし、手動による介入なしにアプリケーションが常に有効なトークンを持つことを保証します。
%pip install sqlalchemy==1.4 psycopg[binary]
from databricks.sdk import WorkspaceClient
import time
from sqlalchemy import create_engine, text, event
w = WorkspaceClient()
# Configure connection parameters (get these from the Connect dialog in the LakeBase App)
endpoint = "projects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>"
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 SQLAlchemy engine
connection_pool = create_engine(f"postgresql+psycopg2://{username}:@{host}:{port}/{database}?sslmode=require")
# Global variables for token management
postgres_password = None
last_password_refresh = time.time()
@event.listens_for(connection_pool, "do_connect")
def provide_token(dialect, conn_rec, cargs, cparams):
global postgres_password, last_password_refresh
# Refresh token if it's None or older than 15 minutes (900 seconds)
if postgres_password is None or time.time() - last_password_refresh > 900:
print("Refreshing PostgreSQL OAuth token")
credential = w.postgres.generate_database_credential(endpoint=endpoint)
postgres_password = credential.token
last_password_refresh = time.time()
cparams["password"] = postgres_password
# Use the connection pool
with connection_pool.connect() as conn:
result = conn.execute(text("SELECT version()"))
for row in result:
print(f"Connected to PostgreSQL database. Version: {row}")
Postgresのパスワード認証
ネイティブ Postgres パスワード認証では、パスワードを使用した従来の Postgres ロールが使用されます。OAuth トークンとは異なり、これらのパスワードは 1 時間経過しても期限切れにならないため、頻繁な資格情報のローテーションを処理できないアプリケーションに適しています。
Postgresパスワードを使用する場合
次の場合に Postgres パスワード認証を使用します。
- アプリケーションまたはツールは1時間ごとに認証情報を更新できません
- 安定した資格情報を必要とする長時間実行されるプロセスがある
- クライアント ライブラリは OAuth トークンのローテーションをサポートしていません
- 互換性のために従来のデータベース認証が必要です
Postgresのパスワードの仕組み
- パスワードの有効期間 : パスワードは自動的に期限切れにならない
- ワークスペース統合なし : 認証は Databricks ワークスペース認証ではなく Postgres によって処理されます
- 手動管理 : パスワードは手動でローテーションし、ユーザーに配布する必要があります。
- 接続タイムアウトは引き続き適用されます : パスワードに有効期限はありませんが、接続には24時間のアイドルタイムアウトと最大7日間の接続寿命が適用されます。
セキュリティに関する考慮事項
- パスワードの保存 : 環境変数または秘密管理システムを使用してパスワードを安全に保存します
- SSL が必要です : すべての接続で SSL を使用する必要があります (
sslmode=require)