メインコンテンツまでスキップ

Unity Catalog で外部シークレットを構成する

備考

ベータ版

この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。

このページでは、Unity Catalog スキーマを外部シークレットマネージャーに接続し、シークレット値を AWS Secrets Manager に保持する方法を説明します。

外部シークレットの仕組みと制限については、Unity Catalog における外部シークレットを参照してください。

始める前に

  • Unity Catalog シークレットの要件を満たしてください。

  • ワークスペースで外部シークレットのベータ版を有効にする必要があります。

  • 外部でバックアップするスキーマには、Databricks が管理するシークレットが含まれていてはなりません。バックエンドを切り替える前に、既存のシークレットを削除してください。

  • 外部シークレットマネージャーへの Unity Catalog 接続と、その接続が認証に使用する Unity Catalog サービス資格情報が必要です。これらを作成するには、既存の接続に対する USE CONNECTION、またはメタストアに対する CREATE CONNECTION(作成用)が必要です。また、サービス資格情報へのアクセス権、あるいはメタストアに対する CREATE CREDENTIAL(作成用)が必要です。

  • AWS Secrets Managerのバックアップは、AWS_SECRETS_MANAGER接続を使用するDatabricks on AWSでのみ利用可能です。シークレットマネージャーは、接続で設定したリージョン内にある必要があります。

外部シークレットのセットアップ

サービス資格情報を作成

この接続は、Unity Catalog サービス認証情報を使用して外部シークレットマネージャーに対して認証を行います。

サービス資格情報の作成で説明されているように、必要な信頼ポリシーを含めて、サービス資格情報とそのIAMロールを作成します。AWS Secrets Manager内のシークレットを読み取れるように、以下の権限ポリシーをロールにアタッチします。<AWS-ACCOUNT-ID><AWS-IAM-ROLE-NAME>をアカウントIDとロール名に置き換えます。

JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ReadAllSecrets",
"Effect": "Allow",
"Action": ["secretsmanager:ListSecrets", "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue"],
"Resource": "*"
},
{
"Sid": "SelfAssume",
"Effect": "Allow",
"Action": ["sts:AssumeRole"],
"Resource": ["arn:aws:iam::<AWS-ACCOUNT-ID>:role/<AWS-IAM-ROLE-NAME>"]
}
]
}

接続を作成

前のステップのサービス資格情報を参照し、外部シークレットマネージャーを指す Unity Catalog 接続を作成します。

  1. Databricks で カタログエクスプローラー を開き、 + メニューをクリックして、 [接続を作成] を選択します。
  2. 接続名 を入力し、 AWS Secrets Manager 接続タイプを選択します。
  3. 認証に使用するサービス資格情報を選択し、シークレットマネージャーの AWS [ リージョン ] を設定します。
  4. 作成 をクリックします。
注記

Make sure the service credential's permissions and the connection's tag filter cover the same secrets. If the role can list a secret but cannot read its value, Unity Catalog imports the secret but reads of it fail.

Unity Catalog 内でシークレットのサブセットのみを表示するには、接続にタグフィルターを追加します。タグによるインポート済みシークレットのフィルタリングを参照してください。

接続を使用してスキーマをバックアップする

カタログエクスプローラーでスキーマのシークレットバックエンドを構成します。

  1. Databricks で カタログエクスプローラー を開き、スキーマに移動します。

  2. スキーマの詳細で、外部シークレットマネージャーの設定を見つけ、 Enable (有効化)をクリックします。

    スキーマには、Databricks が管理するシークレットが含まれていてはなりません。含まれている場合は、最初にそれらを削除してください。スキーマにシークレットがなくなるまで、 有効化 は無効のままになります。

  3. 前のステップで作成した接続を選択し、確認します。

スキーマは外部シークレットマネージャーによってバックアップされ、そのシークレットが Unity Catalog に表示されるようになりました。

スキーマを別の接続に向けるには、 編集 を使用します。スキーマを Databricks マネージドストレージに戻すには、スキーマを編集して外部シークレットを無効にします。

スキーマのシークレットバックエンドの設定または変更には、親カタログに対するUSE CATALOG、スキーマの所有権またはスキーマに対するMANAGE、および接続に対するUSE CONNECTIONが必要です。

外部シークレットの読み込み

スキーマが外部でバックアップされると、そのシークレットが Unity Catalog に表示され、他の Unity Catalog シークレットと同様に読み取ることができます。スキーマをリストするとImportがTriggerされるため、新しく追加されたシークレットは次回のリスト表示後にのみ表示されます。読み取りコマンドは、どちらのクラウドでも同じです。

dbutils はシークレットの伏字処理を適用するものであり、値を読み取るための推奨される方法です。Databricks Runtime 17.3 LTS 以上、または Serverless 環境バージョン 4 以上が必要です。

Python
# List the secrets in the schema
all_secrets = dbutils.secrets.list(catalog="main", schema="default")

# Read a specific secret value from the external secret manager
my_secret = dbutils.secrets.get(catalog="main", schema="default", key="example_secret")

Databricks 管理のシークレットと同様に、Catalog Explorer で外部シークレットを参照および一覧表示することもできます。シークレットの読み取りを参照してください。

シークレットがまだ Unity Catalog に表示されていない場合でも、名前で読み取ることができます。外部シークレットマネージャーに表示される名前を、命名規則の文字置換を適用して指定してください。

例えば、myOrg/mySecret.v3 という名前の AWS シークレットの場合は、次のように読み取ります:

Python
dbutils.secrets.get(catalog="my_catalog", schema="my_schema", key="myOrg|mySecret:v3")

インポートされたシークレットをタグでフィルタリング

接続がアクセスできるシークレットの一部のみを表示するには、AWSリソースタグでフィルタリングします。接続の作成時または編集時に、接続のタグオプションを設定します:

  • tag_key:このタグキーを持つシークレットのみを表示します。
  • tag_value:オプション。tag_key と一緒に設定すると、Unity Catalog はタグがキーと値に一致するシークレットのみを表示します。省略した場合、Unity Catalog は値に関係なく tag_key を持つすべてのシークレットを表示します。

タグの照合では大文字と小文字が区別され、完全な文字列一致が使用されます。

接続タグフィルターは、Unity Catalog が表示するシークレットのみを制御します。資格情報が読み取れるシークレットも制限するには、IAM ロールの権限ポリシーにタグ条件 (secretsmanager:ResourceTag) を追加します。

AWS Secrets Manager 接続を作成または編集する際に、接続オプションとして tag_key オプションを追加し、必要に応じて tag_value を追加します。

その他のリソース