Unity Catalogのシークレットを整理し、各アプリケーションが自分のシークレットのみにアクセスできるようにします。ほとんどのプリンシパルはシークレットの値を読み取らずに使用し、その値を暗号化するキーをあなたが管理します。 シークレットの作成、アクセス権の付与、読み取り方法については、Unity Catalog のシークレットを参照してください。
必要な人ごとにシークレットをグループ化
各アプリケーション、環境、チームごとにスキーマを作成し、カタログではなくスキーマ上で CREATE SECRET 権限を付与します。 スキーマは最大1,000のシークレットを、メタストアは最大10,000のシークレットを保持できます。
-
単一のシークレットに対する付与:スキーマに対する付与は、そのスキーマ内のすべてのシークレットに適用され、後から追加されたシークレットも含まれます。 プリンシパルが1つの秘密だけを必要とする場合は、スキーマではなくその秘密に
READ SECRETを付与してください。 - 必要に応じて本番シークレットに独自のカタログを与えましょう: ワークスペースのバインディングと顧客管理キーはカタログ全体に適用されます。 本番のシークレットを開発ワークスペースに置かないようにしたり、独自の鍵で暗号化したりするために、別のカタログに分けてください。 ワークスペースとカタログのバインドおよびAzure Databricks 管理シークレットを独自のキーで暗号化するを参照してください。
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のシークレットとワークスペースのシークレットスコープを比較し、それぞれのシークレットをどこで使えるか確認してください。 |