データベース・インスタンスに対する認証
プレビュー
この機能は、us-east-1
、 us-west-2
、 eu-west-1
、 ap-southeast-1
、 ap-southeast-2
、 eu-central-1
、 us-east-2
、 ap-south-1
のリージョンでパブリック プレビューとして提供されています。
このページでは、Lakebase データベースインスタンスに対して認証する方法について説明します。認証には、次の 2 つの方法があります。
- OAuth トークンを取得し、Databricks ID を使用して認証します。
- パスワードでネイティブのPostgresロールを使用します。
Databricks ID で認証する
Databricks ID として認証する場合は、OAuth トークンを生成し、Postgres に接続するときにパスワードとして使用する必要があります。
開始前の考慮事項
-
OAuth トークンは 1 時間後に期限切れになりますが、有効期限はログイン時にのみ適用されます。オープン接続は、トークンの有効期限が切れてもアクティブなままです。ただし、認証を必要とする PostgreSQL コマンドは、トークンの有効期限が切れている場合は失敗します。
-
Postgres 認証に使用される OAuth トークンはワークスペース スコープであり、データベース インスタンスを所有するのと同じワークスペースに属している必要があります。クロスワークスペーストークン認証はサポートされていません。認証の詳細については、「 Databricks CLI の認証」を参照してください。
-
トークンベースの認証ではプレーンテキストのパスワードが必要なため、SSL 接続のみが許可されます。トークンベースの認証でPostgresにアクセスするために使用するクライアントライブラリが、SSL接続を確立するように構成されていることを確認します。
ユーザーからマシンへのフローで OAuth トークンを取得する
データベース所有者、管理者、または Databricks ID にデータベース インスタンスに対応する Postgres ロールがある場合は、UI、Databricks CLI、または Databricks SDK の 1 つから OAuth トークンを取得できます。Databricks CLI を使用して、トークンのスコープを適切に制限できます。
その他の Databricks ID ユーザーについては、OAuth トークンを取得するためのワークスペース レベルの承認手順については、「 OAuth を使用して Databricks へのユーザー アクセスを承認する」 を参照してください。
- UI
- CLI
- Python SDK
- Java SDK
データベース インスタンスの [ステータス] が [使用可能] の場合は、Databricks UI を使用して OAuth トークンを取得します。
- データベース・インスタンスの詳細 ページで、 OAuth トークンの取得 をクリックします。フラグは、トークンがいつ作成されたかを示します。
- [OAuthToken をコピー] をクリックして、トークンをクリップボードにコピーします。次の手順では、この値を指定された接続文字列に置き換える必要があります。
- 指定された 接続文字列 に続くコピー アイコンをクリックします。
データベース インスタンスの [状態 ] が [使用可能] の場合は、Databricks CLI v0.256.0 以降を使用して OAuth トークンを取得します。
-
次のコマンドを使用して、トークンをフェッチします。
Bashdatabricks database generate-database-credential \
--request-id $(uuidgen) \
--json '{
"instance_names": ["db-instance-name"]
}' -
これにより、次の形式で応答が生成されます。応答から
token
をコピーします。JSON{
"expiration_time": "2025-08-24T14:15:22Z",
"token": "<string>"
}
詳細については、Databricks CLIを使用してOAuthトークンを取得する方法については、「ユーザー間OAuthマシン (U2M) 認証」を参照してください。
Databricks SDK for Python を使用して OAuth トークンを生成できます。Databricks SDK バインディングは、Databricks SDK for Python バージョン v0.56.0 で使用できます。
古いバージョンの SDK で実行している場合は、最初にこれらのコマンドを実行します。
%pip install --upgrade databricks-sdk
%restart_python
Databricks SDK for Python は、データベース インスタンス用にセキュリティで保護された OAuth トークン cred
を生成します。必要に応じて、データベース・インスタンス名を入力します。
from databricks.sdk import WorkspaceClient
import uuid
w = WorkspaceClient()
instance_name = "<YOUR INSTANCE>"
cred = w.database.generate_database_credential(request_id=str(uuid.uuid4()), instance_names=[instance_name])
OAuth トークンは、 Databricks SDK for Java を使用して生成できます。データベース SDK バインディングは、Databricks SDK for Java バージョン v0.53.0 以降で使用できます。古いバージョンの SDK で実行している場合は、インポートされた SDK を更新する必要がある場合があります。詳細については 情報、 こちらをご覧ください。
%scala
import com.databricks.sdk.WorkspaceClient
import com.databricks.sdk.service.database.GetDatabaseInstanceRequest
import com.databricks.sdk.service.database.GenerateDatabaseCredentialRequest
import com.databricks.sdk.service.database.DatabaseInstance
import com.databricks.sdk.service.database.DatabaseCredential
import java.util.Collections
import java.util.UUID
val w = new WorkspaceClient()
val instanceName = "<YOUR INSTANCE>"
// Generate database credential
val cred = w.database().generateDatabaseCredential(
new GenerateDatabaseCredentialRequest()
.setRequestId(UUID.randomUUID().toString())
.setInstanceNames(Collections.singletonList(instanceName))
)
// Print out credential details
System.out.println("Credential: " + cred.getToken())
マシン間フローでの OAuth トークンの取得
データベースインスタンスへのセキュアで自動化された (マシン間) アクセスを有効にするには、Databricksサービスプリンシパルを使用してOAuthトークンを取得する必要があります。このプロセスには、サービスプリンシパルの構成、資格情報の生成、認証用のトークン OAuth 鋳造が含まれます。
- 無期限の有効期間の資格情報を使用してサービスプリンシパルを設定します。 手順については、「サービスプリンシパルアクセスをOAuthでDatabricksに許可する」を参照してください。
- 新しい OAuth トークンをサービスプリンシパルとして鋳造します。
- CLI
- Python SDK
- Java SDK
データベース インスタンスの [状態 ] が [使用可能] の場合は、Databricks CLI v0.256.0 以降を使用して OAuth トークンを取得します。
-
次のコマンドを使用して、トークンをフェッチします。
Bashdatabricks database generate-database-credential \
--request-id $(uuidgen) \
--json '{
"instance_names": ["db-instance-name"]
}' -
これにより、次の形式で応答が生成されます。応答から
token
をコピーします。JSON{
"expiration_time": "2025-08-24T14:15:22Z",
"token": "<string>"
}
Databricks SDK for Python を使用して OAuth トークンを生成できます。Databricks SDK バインディングは、Databricks SDK for Python バージョン v0.56.0 で使用できます。
古いバージョンの SDK で実行している場合は、最初にこれらのコマンドを実行します。
%pip install --upgrade databricks-sdk
%restart_python
Databricks SDK for Python は、データベース インスタンス用にセキュリティで保護された OAuth トークン cred
を生成します。必要に応じて、データベース・インスタンス名を入力します。
from databricks.sdk import WorkspaceClient
import uuid
w = WorkspaceClient(
host = "https://<YOUR WORKSPACE URL>/",
client_id = "<YOUR SERVICE PRINCIPAL ID>",
client_secret = "REDACTED"
)
instance_name = "<YOUR INSTANCE>"
cred = w.database.generate_database_credential(request_id=str(uuid.uuid4()), instance_names=[instance_name])
OAuth トークンは、 Databricks SDK for Java を使用して生成できます。データベース SDK バインディングは、Databricks SDK for Java バージョン v0.53.0 以降で使用できます。古いバージョンの SDK で実行している場合は、インポートされた SDK を更新する必要がある場合があります。詳細については 情報、 こちらをご覧ください。
%scala
import com.databricks.sdk.WorkspaceClient
import com.databricks.sdk.core.DatabricksConfig
import com.databricks.sdk.service.database.GetDatabaseInstanceRequest
import com.databricks.sdk.service.database.GenerateDatabaseCredentialRequest
import com.databricks.sdk.service.database.DatabaseInstance
import com.databricks.sdk.service.database.DatabaseCredential
import java.util.Collections
import java.util.UUID
val config = new DatabricksConfig() // See https://github.com/databricks/databricks-sdk-java#authentication
val w = new WorkspaceClient(config)
val instanceName = "<YOUR INSTANCE>"
// Generate database credential
val cred = w.database().generateDatabaseCredential(
new GenerateDatabaseCredentialRequest()
.setRequestId(UUID.randomUUID().toString())
.setInstanceNames(Collections.singletonList(instanceName))
)
// Print out credential details
System.out.println("Credential: " + cred.getToken())
時間単位の有効期限が切れる前に OAuth トークンをローテーションします。
- 使用するたびに OAuth トークンの有効期限を確認し、必要に応じて更新します。
- または、現在の OAuth トークンを定期的に更新するようにバックグラウンド スレッドを設定します。
Databricks グループとして認証する
グループとグループのメンバーシップは、 Databricks からPostgresに同期されず、 Unity Catalog 権限も同期されません。 ただし、Databricks グループが Postgres に追加されると、グループ内のすべての Databricks ユーザーは、ユーザーのパスワードを使用してグループとしてログインできます。これにより、Postgres のグループ レベルで権限を管理できます。Databricksグループ ID の直接または間接のメンバー (ユーザーまたはサービスプリンシパル) は、Postgres に対して認証し、Databricks グループ Postgres ロールとしてログインできます。
ユーザーまたはサービスプリンシパル トークンを使用してグループ ID として認証する場合、グループ メンバーシップは認証時にのみ検証されます。 グループメンバートークンとの以前に開いていた接続は、認証後にメンバーがグループから削除された場合、閉じられません。削除されたグループメンバーからの新しい接続要求は、認証中に拒否されます。
export PGPASSWORD='<OAuth token of a group member>'
export GROUPROLENAME = <pg-case-sensitive-group-role-name>
psql -h $HOSTNAME -p 5432 -d databricks_postgres -U $GROUPROLENAME
データベースインスタンスの Databricks ワークスペースに割り当てられたグループのみが、グループベースのPostgresログインでサポートされます。 グループをワークスペースに割り当てる方法については、「 ワークスペースにグループを割り当てる」を参照してください。
Postgres ロールとパスワードを使用した認証
1 時間後の資格情報のローテーションをサポートしていないクライアントがある場合は、パスワードを使用してネイティブの Postgres ロールを作成できます。
-
ワークスペースのサイドバーで「 コンピュート 」をクリックします。
-
データベース・インスタンス タブをクリックします。
-
更新するデータベース・インスタンスを選択します。
-
右上の [編集] をクリックします。
-
[Postgres ネイティブロールログインを有効にする] をオンにします。
-
保存 をクリックします。
-
Postgres にログインするか、SQL エディタを使用して、パスワードを使用してロールを作成します。
SQLCREATE ROLE new_role LOGIN PASSWORD 'your strong password';
-
新しいロールに追加の Postgres アクセス許可を付与します。PostgreSQLを使用したPostgresロールへの権限の付与を参照してください。
次のステップ
資格情報 (OAuth トークンまたはパスワード) を取得したら、データベースインスタンスに接続できます。