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とロール名に置き換えます。
{
"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 接続を作成します。
- Catalog Explorer
- Databricks CLI
- REST API
- Databricks で カタログエクスプローラー を開き、 + メニューをクリックして、 [接続を作成] を選択します。
- 接続名 を入力し、 AWS Secrets Manager 接続タイプを選択します。
- 認証に使用するサービス資格情報を選択し、シークレットマネージャーの AWS [ リージョン ] を設定します。
- 作成 をクリックします。
--json を使用して接続本体を渡し、AWS_SECRETS_MANAGER 接続タイプを使用します。aws_region をシークレットマネージャーのリージョンに設定し、credential をサービス認証情報名に設定します:
databricks connections create --json '{
"name": "my_aws_secrets_connection",
"connection_type": "AWS_SECRETS_MANAGER",
"options": {
"aws_region": "us-west-2",
"credential": "my_aws_secrets_credential"
}
}'
AWS_SECRETS_MANAGER 接続タイプで /api/2.1/unity-catalog/connections Endpoint を使用します。aws_region にシークレットマネージャーのリージョンを、credential にサービス資格情報名を設定します:
curl -X POST \
-H "Authorization: Bearer $DATABRICKS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "my_aws_secrets_connection",
"connection_type": "AWS_SECRETS_MANAGER",
"options": {
"aws_region": "us-west-2",
"credential": "my_aws_secrets_credential"
}
}' \
"$DATABRICKS_HOST/api/2.1/unity-catalog/connections"
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 内でシークレットのサブセットのみを表示するには、接続にタグフィルターを追加します。タグによるインポート済みシークレットのフィルタリングを参照してください。
接続を使用してスキーマをバックアップする
カタログエクスプローラーでスキーマのシークレットバックエンドを構成します。
-
Databricks で カタログエクスプローラー を開き、スキーマに移動します。
-
スキーマの詳細で、外部シークレットマネージャーの設定を見つけ、 Enable (有効化)をクリックします。
スキーマには、Databricks が管理するシークレットが含まれていてはなりません。含まれている場合は、最初にそれらを削除してください。スキーマにシークレットがなくなるまで、 有効化 は無効のままになります。
-
前のステップで作成した接続を選択し、確認します。
スキーマは外部シークレットマネージャーによってバックアップされ、そのシークレットが Unity Catalog に表示されるようになりました。
スキーマを別の接続に向けるには、 編集 を使用します。スキーマを Databricks マネージドストレージに戻すには、スキーマを編集して外部シークレットを無効にします。
スキーマのシークレットバックエンドの設定または変更には、親カタログに対するUSE CATALOG、スキーマの所有権またはスキーマに対するMANAGE、および接続に対するUSE CONNECTIONが必要です。
外部シークレットの読み込み
スキーマが外部でバックアップされると、そのシークレットが Unity Catalog に表示され、他の Unity Catalog シークレットと同様に読み取ることができます。スキーマをリストするとImportがTriggerされるため、新しく追加されたシークレットは次回のリスト表示後にのみ表示されます。読み取りコマンドは、どちらのクラウドでも同じです。
- Dbutils
- REST API
dbutils はシークレットの伏字処理を適用するものであり、値を読み取るための推奨される方法です。Databricks Runtime 17.3 LTS 以上、または Serverless 環境バージョン 4 以上が必要です。
# 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")
include_value=true を設定し、effective_value フィールドを読み取って値を返します。REST API は返される値を伏字処理しませんが、アクセスは監査されます。Databricks では代わりに dbutils を使用することを推奨しています。
curl -G \
-H "Authorization: Bearer $DATABRICKS_TOKEN" \
--data-urlencode "include_value=true" \
"$DATABRICKS_HOST/api/2.1/unity-catalog/secrets/main.default.example_secret"
Databricks 管理のシークレットと同様に、Catalog Explorer で外部シークレットを参照および一覧表示することもできます。シークレットの読み取りを参照してください。
シークレットがまだ Unity Catalog に表示されていない場合でも、名前で読み取ることができます。外部シークレットマネージャーに表示される名前を、命名規則の文字置換を適用して指定してください。
例えば、myOrg/mySecret.v3 という名前の AWS シークレットの場合は、次のように読み取ります:
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) を追加します。
- Catalog Explorer
- Databricks CLI
- REST API
AWS Secrets Manager 接続を作成または編集する際に、接続オプションとして tag_key オプションを追加し、必要に応じて tag_value を追加します。
databricks connections create --json '{
"name": "my_aws_secrets_connection",
"connection_type": "AWS_SECRETS_MANAGER",
"options": {
"aws_region": "us-west-2",
"credential": "my_aws_secrets_credential",
"tag_key": "team",
"tag_value": "data-platform"
}
}'
curl -X POST \
-H "Authorization: Bearer $DATABRICKS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "my_aws_secrets_connection",
"connection_type": "AWS_SECRETS_MANAGER",
"options": {
"aws_region": "us-west-2",
"credential": "my_aws_secrets_credential",
"tag_key": "team",
"tag_value": "data-platform"
}
}' \
"$DATABRICKS_HOST/api/2.1/unity-catalog/connections"
その他のリソース
-
- Unity Catalogの外部シークレット
- Unity Catalog が外部でバックアップされたシークレットをインポート、管理、読み取りする方法を学び、制限事項を確認します。
-
- Unity Catalog のシークレット
- Databricks が Unity Catalog に保存するシークレットを作成、ガバナンス、管理します。
-
- サービス資格情報の作成
- 接続が認証に使用する Unity Catalog サービス資格情報を作成します。