この記事では、Unity カタログ対応 Databricks ワークスペースにアクセスできない差分共有受信者を作成し、ベアラー トークンを使用して安全に共有されたデータへのアクセス権を受信者に付与する方法について説明します。 この認証フローは、OIDC トークン フェデレーション認証フローと共に、 オープン共有と呼ばれます。
ここでは、そのしくみを示します:
データ プロバイダーとして、Unity カタログ メタストアに受信者オブジェクトを作成します。
受信者オブジェクトを作成するときに、ベアラー トークンの方法を選択すると、Azure Databricks によってトークン、トークンを含む資格情報ファイル、受信者と共有するためのアクティブ化リンクが生成されます。
受信者オブジェクトの認証の種類は
TOKEN
。 必要に応じて、トークンを更新および取り消すことができます。受信者はアクティブ化リンクにアクセスし、資格情報ファイルをダウンロードし、資格情報ファイルを使用して認証を行い、アクセス権を付与した共有に含めるテーブルへの読み取りアクセス権を取得します。
OIDC フェデレーション フローは、この記事で説明するベアラー トークン フローの代替手段です。 ベアラー トークン フローよりもセキュリティと利便性の利点があります。 詳細については、「Open ID Connect (OIDC) フェデレーションを使用してデルタ共有シェア (オープンシェアリング) への認証を有効にする」を参照してください。
受信者を作成する
共有を開くために受信者を作成するには、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで、カタログ エクスプローラー、Databricks Unity カタログ CLI、または CREATE RECIPIENT
SQL コマンドを使用できます。
必要なアクセス許可: 共有するデータが登録されている Unity カタログ メタストアの CREATE_RECIPIENT
特権を持つメタストア管理者またはユーザー。
カタログ エクスプローラー
Azure Databricks ワークスペースで、[
カタログ。
[カタログ] ウィンドウの上部にある
をクリックします。歯車アイコンをクリックし、[差分共有] を選択します。
または、[クイック アクセス] ページで、[Delta Sharing >] ボタンをクリックします。
[自分が共有] タブで、[新しい受信者] をクリックします。
受信者名を入力します
受信者の種類 で、開く を選択します。
[ トークン] を選択します。
(省略可能)トークンの 有効期間 の有効期限 (受信者の作成時刻から秒、分、時間、または日) を設定します。 有効期限を設定するには、[有効期限の設定] をオンのままにします。 トークンを無期限に使用できるようにするには、選択を解除します。
[有効期限の 設定 ] を選択し、フィールドを空白のままにした場合、トークンの有効期間は、メタストア構成で設定された受信者トークンの有効期間の値に既定で設定されます。 受信者トークンの有効期間の変更を参照してください。 トークンの有効期間の変更とトークンの交換については、「 受信者トークンの管理」を参照してください。
(省略可能)コメントを入力します。
Create をクリックしてください。
アクティブ化リンクをコピーします。
または、後でアクティブ化リンクを取得することもできます。 アクティブ化リンクを取得するを参照してください。
(省略可能) カスタム受信者プロパティを作成します。
受信者の「概要」タブで、「受信者のプロパティ」の横にある「編集」アイコンをクリックします。 次に、プロパティ名 (キー) と 値 を追加します。 詳細については、受信者のプロパティを管理するを参照してください。
SQL
ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。
CREATE RECIPIENT [IF NOT EXISTS] <recipient-name>
[COMMENT "<comment>"];
受信者のカスタム プロパティを追加することもできます。 詳細については、受信者のプロパティを管理するを参照してください。
コマンドラインインターフェース(CLI)
Databricks CLI を使用して次のコマンドを実行します。
databricks recipients create <recipient-name>
受信者のカスタム プロパティを追加することもできます。 詳細については、受信者のプロパティを管理するを参照してください。
出力には、受信者と共有する activation_url
が含まれます。
受信者は、authentication_type
の TOKEN
で作成されます。
注
受信者を作成するときに、受信者のアクセスを制限された IP アドレスのセットに制限するオプションがあります。 既存の受信者に IP アクセス リストを追加することもできます。 「IP アクセス リストを使用して Delta Sharing の受信者のアクセスを制限する (オープン共有)」を参照してください。
アクティブ化リンクを取得する
新しい受信者のアクティブ化リンクを取得するには、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで、カタログ エクスプローラー、Databricks Unity カタログ CLI、または DESCRIBE RECIPIENT
SQL コマンドを使用できます。
受信者が既に資格情報ファイルをダウンロードしている場合、アクティブ化リンクは返されず、表示もされません。
必要なアクセス許可: メタストア管理者、 USE RECIPIENT
特権を持つユーザー、または受信者オブジェクトの所有者。
カタログ エクスプローラー
Azure Databricks ワークスペースで、[
カタログ。
[カタログ] ウィンドウの上部にある
をクリックします。歯車アイコンをクリックし、[差分共有] を選択します。
または、[クイック アクセス] ページで、[Delta Sharing >] ボタンをクリックします。
[ 自分が共有 ] タブで、[ 受信者] をクリックし、受信者を選択します。
受信者の詳細ページで、[ アクティブ化] リンクをコピーします。
SQL
ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。
DESCRIBE RECIPIENT <recipient-name>;
出力には、 activation_link
が含まれます。
コマンドラインインターフェース(CLI)
Databricks CLI を使用して次のコマンドを実行します。
databricks recipients get <recipient-name>
出力には、 activation_url
が含まれます。
共有へのアクセス権を受信者に付与する
受信者を作成し、 共有を作成したら、受信者にそれらの共有へのアクセス権を付与できます。
共有へのアクセスを受信者に許可するには、カタログ エクスプローラーまたは Databricks Unity Catalog CLI を使用するか、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで GRANT ON SHARE
SQL コマンドを使用できます。
必要なアクセス許可: 次のいずれか。
- メタストア管理者。
- 共有オブジェクトと受信者オブジェクトの両方に対する委任されたアクセス許可または所有権 ((
USE SHARE
+SET SHARE PERMISSION
) または共有所有者) かつ (USE RECIPIENT
または受信者所有者)。
手順については、Delta Sharing データ共有へのアクセスを管理する (プロバイダーの場合) 方法に関するページを参照してください。
受信者に接続情報を送信する
共有しているデータにアクセスする方法を受信者に知らせる必要があります。 セキュリティで保護されたチャネルを使用して 、アクティブ化リンク と それを使用するための手順へのリンクを共有します。
資格情報ファイルは 1 回だけダウンロードできます。 受信者は、ダウンロードした資格情報をシークレットとして扱う必要があり、組織外で共有してはなりません。 資格情報が安全でない方法で処理されている可能性が懸念される場合は、 受信者の資格情報をいつでもローテーション できます。 セキュリティで保護された受信者アクセスを確保するための資格情報の管理の詳細については、「 トークンのセキュリティに関する考慮事項」を参照してください。
受信者トークンを管理する
オープン共有ベアラー トークン フローを使用して受信者とデータを共有している場合は、その受信者のトークンをローテーションすることが必要になる場合があります。 トークンのローテーションは、既存のトークンを期限切れに設定し、新しいトークンとアクティブ化 URL に置き換えることで構成されます。
次の状況では、受信者のトークンをローテーションし、新しいアクティブ化 URL を生成する必要があります。
- 既存の受信者トークンの有効期限が切れようとしているとき。
- 受信者がアクティブ化 URL を失った場合、または侵害された場合。
- 受信者がダウンロードした後に資格情報が破損、紛失、または侵害された場合。
- メタストアの受信者トークンの有効期間を変更する場合。 受信者トークンの有効期間の変更を参照してください。
トークンのセキュリティに関する考慮事項
受信者は、任意の時点で最大 2 つのトークン (アクティブ なトークンとローテーションされたトークン) を持つことができます。 ローテーションされたトークンは、有効期限が切れ、アクティブなトークンに置き換えられるよう設定されているトークンです。 ローテーションされたトークンの有効期限が切れるまで、トークンをもう一度ローテーションしようとするとエラーが発生します。
受信者のトークンをローテーションする場合は、必要に応じて、 --existing-token-expire-in-seconds
を既存の受信者トークン (ローテーションするトークン) の有効期限が切れるまでの秒数に設定できます。 値を 0
に設定すると、既存の受信者トークンはすぐに期限切れになります。
Databricks では、受信者が 2 つのアクティブなトークンを持つ時間を最小限に抑えながら、新しいアクティブ化 URL にアクセスする時間を受信者の組織に与える比較的短い期間に --existing-token-expire-in-seconds
を設定することをお勧めします。 既存の受信者トークンが侵害されたと思われる場合は、Databricks では、すぐに期限切れにすることを強制することをお勧めします。
受信者の既存のアクティブ化 URL にアクセスしたことがない場合は、既存のトークンをローテーションすると、そのアクティブ化 URL が無効になり、新しいトークンに置き換えられます。
すべての受信者トークンの有効期限が切れている場合、トークンをローテーションすると、既存のアクティブ化 URL が新しい URL に置き換えられます。 Databricks では、トークンの有効期限が切れた受信者をすぐにローテーションまたはドロップすることをお勧めします。
受信者のアクティブ化 URL が誤って間違ったユーザーに送信された場合、または安全でないチャネル経由で送信された場合、Databricks では次のことをお勧めします。
- 共有への受信者のアクセス権を取り消します。
- 受信者を回転させ、
--existing-token-expire-in-seconds
を0
に設定します。 - セキュリティで保護されたチャネルを介して、新しいアクティブ化 URL を目的の受信者と共有します。
- アクティブ化 URL にアクセスしたら、受信者に共有へのアクセス権をもう一度付与します。
極端な状況では、受信者のトークンをローテーションする代わりに、受信者を 削除 して再作成できます。
受信者のトークンをローテーションする
受信者のトークンをローテーションするには、カタログ エクスプローラーまたは Databricks Unity カタログ CLI を使用します。
必要なアクセス許可: 受信者オブジェクトの所有者。
カタログ エクスプローラー
Azure Databricks ワークスペースで、[
カタログ。
左側のウィンドウで、[ 差分共有 ] メニューを展開し、[ 自分で共有] を選択します。
[カタログ] ウィンドウの上部にある
をクリックします。歯車アイコンをクリックし、[差分共有] を選択します。
または、[クイック アクセス] ページで、[Delta Sharing >] ボタンをクリックします。
[ 自分が共有 ] タブで、[ 受信者] をクリックし、受信者を選択します。
[ 詳細 ] タブの [ トークンの有効期限] で、[ ローテーション] をクリックします。
[ トークンのローテーション ] ダイアログで、トークンの有効期限を直ちにまたは設定した期間に設定します。 既存のトークンを期限切れにするタイミングに関するアドバイスについては、 トークンのセキュリティに関する考慮事項を参照してください。
回転をクリックします。
[ 詳細 ] タブで、新しい アクティブ化リンク をコピーし、セキュリティで保護されたチャネル経由で受信者と共有します。 アクティブ化リンクを取得するを参照してください。
コマンドラインインターフェース(CLI)
Databricks CLI を使用して次のコマンドを実行します。 プレースホルダー値を次のように置き換えます。
-
<recipient-name>
: 受信者の名前。 -
<expiration-seconds>
: 既存の受信者トークンの有効期限が切れるまでの秒数。 この期間中、既存のトークンは引き続き機能します。0
の値は、既存のトークンが直ちに期限切れになります。 既存のトークンを期限切れにするタイミングに関するアドバイスについては、 トークンのセキュリティに関する考慮事項を参照してください。
databricks recipients rotate-token \ <recipient-name> \ <expiration-seconds>
-
受信者の新しいアクティブ化リンクを取得し、セキュリティで保護されたチャネル経由で受信者と共有します。 アクティブ化リンクを取得するを参照してください。
受信者トークンの有効期間を変更する
Unity カタログ メタストアの既定の受信者トークンの有効期間を変更する必要がある場合は、カタログ エクスプローラーまたは Databricks Unity カタログ CLI を使用できます。
注
メタストアの既定の受信者トークンの有効期間を変更しても、既存の受信者の受信者トークンの有効期間は自動的に更新されません。 特定の受信者に新しいトークンの有効期間を適用するには、トークンをローテーションする必要があります。 受信者トークンの管理を参照してください。
必要なアクセス許可: アカウント管理者。
カタログ エクスプローラー
- アカウント コンソールにログインします。
- サイドバーで、[データ] アイコンをクリック
カタログ。
- メタストアの名前をクリックします。
- Delta Sharing受信者トークンの有効期間で、編集をクリックします。
- [有効期限の設定] を有効にします。
- 秒数、分数、時間数、または日数を入力し、測定単位を選択します。
- [保存] をクリックします。
[有効期限の設定] を無効にした場合、受信者トークンは期限切れになりません。 Databricks では、トークンの有効期限を構成することをお勧めしています。
コマンドラインインターフェース(CLI)
Databricks CLI を使用して次のコマンドを実行します。
12a345b6-7890-1cd2-3456-e789f0a12b34
をメタストア UUID に置き換え、86400
を受信者トークンの有効期限が切れるまでの秒数に置き換えます。 この値を 0
に設定した場合、受信者トークンは期限切れになりません。 Databricks では、トークンの有効期限を構成することをお勧めしています。
databricks metastores update \
12a345b6-7890-1cd2-3456-e789f0a12b34 \
--delta-sharing-recipient-token-lifetime-in-seconds 86400