Unity Catalog シークレットのベスト プラクティス

Unity Catalogのシークレットを整理し、各アプリケーションが自分のシークレットのみにアクセスできるようにします。ほとんどのプリンシパルはシークレットの値を読み取らずに使用し、その値を暗号化するキーをあなたが管理します。 シークレットの作成、アクセス権の付与、読み取り方法については、Unity Catalog のシークレットを参照してください。

必要な人ごとにシークレットをグループ化

各アプリケーション、環境、チームごとにスキーマを作成し、カタログではなくスキーマ上で CREATE SECRET 権限を付与します。 スキーマは最大1,000のシークレットを、メタストアは最大10,000のシークレットを保持できます。

  • 単一のシークレットに対する付与:スキーマに対する付与は、そのスキーマ内のすべてのシークレットに適用され、後から追加されたシークレットも含まれます。 プリンシパルが1つの秘密だけを必要とする場合は、スキーマではなくその秘密に READ SECRET を付与してください。
  • 必要に応じて本番シークレットに独自のカタログを与えましょう: ワークスペースのバインディングと顧客管理キーはカタログ全体に適用されます。 本番のシークレットを開発ワークスペースに置かないようにしたり、独自の鍵で暗号化したりするために、別のカタログに分けてください。 ワークスペースとカタログのバインドおよびAzure Databricks 管理シークレットを独自のキーで暗号化するを参照してください。

各 Key Vault は独自のスキーマを保持します。UC の権限が、誰がシークレットを使用できるかを決定します。

ordersアプリケーションに独自のスキーマを与え、レポートジョブがそのシークレットのうち1つだけを読み取るようにするには、以下を実行します。

-- The application's service principal reads every secret in its schema
CREATE SCHEMA main.orders_app;
GRANT USE CATALOG ON CATALOG main TO `orders-service-principal`;
GRANT USE SCHEMA, READ SECRET ON SCHEMA main.orders_app TO `orders-service-principal`;

-- The reporting job reads only the warehouse password
GRANT USE CATALOG ON CATALOG main TO `reporting-service-principal`;
GRANT USE SCHEMA ON SCHEMA main.orders_app TO `reporting-service-principal`;
GRANT READ SECRET ON SECRET main.orders_app.warehouse_password TO `reporting-service-principal`;

Azure Key Vault によって保護されるシークレットについては、各スキーマごとに 1 つの Key Vault を使用し、それぞれ専用のサービス資格情報と接続を割り当てます。 Key Vault接続はタグフィルターをサポートしていないため、Vaultが境界となります。 もし1,000を超える秘密を保持しているヴォールトの場合、Unity Catalogは最も古いものを最初にインポートし、残りはスキップします。

多くのアプリケーションがアクセスできるスキーマを1つの共有Key Vaultで保護しないでください。

秘密の検出、ローテーション、読み取りの権限を個別に管理します

これらはそれぞれ別々の権限なので、Catalog Explorerでシークレットを更新したり見つけたりするプリンシパルは、その値を見る必要はありません:

プリンシパルが Grant 値を返します
秘密を見つけてアクセスを申請する カタログの BROWSE。 各シークレットのメタデータ、例えば名前、所有者、有効期限などが表示されます。 No
値を更新してシークレットをローテーションする WRITE SECRET No
例えば、ジョブ内で dbutils.secrets を使って値を読み取る READ SECRET Yes

特権の全リストについては、「シークレットへのアクセスを付与」を参照してください。

全員が秘密を見つけてアクセスを要求できるようにし、ローテーションジョブが warehouse のパスワードを読み取らずに更新できるようにするには、以下を実行します:

GRANT BROWSE ON CATALOG main TO `account users`;

GRANT USE CATALOG ON CATALOG main TO `rotation-service-principal`;
GRANT USE SCHEMA ON SCHEMA main.orders_app TO `rotation-service-principal`;
GRANT WRITE SECRET ON SECRET main.orders_app.warehouse_password TO `rotation-service-principal`;

BROWSE それを利用できるすべての人にコメントを表示します。 シークレットのコメントを使って、誰が所有者か、アクセス申請方法を伝えましょう。 コメントに値やその手掛かりを絶対に書かないでください。

Azure Databricks 管理のシークレットを独自のキーで暗号化する

カタログ上の顧客管理キー(CMK)設定は、その中のすべてのAzure Databricks管理のシークレットに適用されます。 別の鍵で本番の秘密を暗号化するには、専用のカタログに入れてください。 CMKが秘密にどのように適用されるかについては、「 顧客管理鍵による秘密値の暗号化」を参照してください。

ソースでシークレットをローテーションする

Azure Key Vaultでバックアップされたシークレットについては、Azure Key Vaultで値をローテーションし、例えばKey Vaultのローテーション ポリシーを適用してください。 値を Azure Databricks 管理のシークレットにコピーしないでください。コピーするたびに、ローテーションが必要な別個の値が増えることになるためです。

Azure Databricksで管理される秘密については、Catalog ExplorerまたはREST APIで値を更新してください。 シークレットが切れるとカタログエクスプローラーに警告が表示されるように、有効期限を設定してください。

すでに値を保持しているコードは、再度秘密を読み取るまでその値を保持します。 長期的な作業では、起動時だけでなく接続を開くたびにシークレットを読みましょう。

ワークロードがシークレットを読み取らずに使えるようにしましょう

シークレットを使用するほとんどのユーザーは、その値を見る必要はありません。 シークレットを宣言するUnity CatalogのUDFは所有者の権限でそれを読み取るため、呼び出し元に必要なのは、たとえば個人データをマスクまたはハッシュ化するための、UDFに対するEXECUTEのみです。 対照的に、ワークスペースの秘密範囲で secret() を呼び出すSQL関数を実行する人は、その範囲に対する READ が必要であり、その結果、その範囲内のすべてのシークレットが公開されることになります。 UDFにおけるシークレットの使用を参照してください。

  • READ SECRET の付与は、ジョブを実行するサービスプリンシパル、シークレットを宣言する UDF の所有者、およびシークレットを所有する少数のグループのみにしてください。
  • 秘密を宣言する各UDFの所有者にグループやサービスプリンシパルを設定し、誰かが離脱した際にUDFが失敗しないようにしましょう。
  • セッションスコープのUDFは、すべての呼び出し者がすでにシークレットを読める場合にのみ使用してください。 彼らは発信者の権限で秘密を読み取る。

Warning

UDFから秘密の値を返してはいけません。 マスキングはUDFコードがクエリ結果で値を返すのを止めるものではありません。

モデルプロバイダーサービスは、Unity Catalog シークレットをプロバイダー資格情報として使用することもできるため、呼び出し元はキーを見ることなくモデルにクエリを実行できます。 Unity Catalog シークレットを使用したプロバイダー資格情報の裏付けを参照してください。

誰がアクセス権を付与できるかを管理し、監査します

  • シークレットとそのスキーマの所有権を個人ではなくグループに割り当てましょう。
  • メタストア管理者やMANAGEを持つプリンシパルは値を読み取れませんが、自分でREAD SECRETを付与できます。 MANAGE少人数のグループにまとめてください。
  • system.access.auditシステムの表でシークレットの読み取りと権限を確認しましょう。 詳細は シークレット アクセスの監査を参照してください。

追加リソース

Resource Description
ユニティの秘密カタログ Unity Catalogシークレットを作成し、付与し、読み取ることができます。
シークレットの管理 Unity Catalogのシークレットとワークスペースのシークレットスコープを比較し、それぞれのシークレットをどこで使えるか確認してください。