Unity Catalog サービスの資格情報を使用して外部クラウド サービスに接続する
この記事では、 Unity Catalog でサービス資格情報を使用して外部クラウド サービスに接続する方法について説明します。 Unity Catalog のサービス資格情報オブジェクトは、ユーザーが Databricks から接続する必要がある外部クラウド サービスへのアクセスを提供する長期的なクラウド資格情報をカプセル化します。
関連項目は次を参照してください。
要件
サービス資格情報を使用して外部クラウド サービスに接続するには、次のものが必要です。
-
Unity Catalog に対して有効になっている Databricks ワークスペース。
-
Databricks Runtime 16.2 以降にあるコンピュート リソース。
SQLウェアハウスでは、サービス認証情報を直接使用することはサポートされていません。Python UDF でのサービス認証情報の使用を参照してください。
サービス資格情報のパブリック プレビュー バージョンは、Databricks Runtime 15.4 LTS 以降で使用でき、Python はサポートされていますが、Scala はサポートされていません。
-
Unity Catalog メタストアで作成された、クラウド サービスへのアクセスを許可するサービス資格情報。
-
サービス資格情報に対する
ACCESS権限またはサービス資格情報の所有権。
コードでサービス資格情報を使用する
このセクションでは、ノートブックでサービス資格情報を使用する例を示します。プレースホルダー値を置き換える。これらの例は、アクセスするクライアントサービスに依存する必要なライブラリのインストールを必ずしも示しているわけではありません。
PythonとScalaのみがサポートされています。
Python UDF でのサービス認証情報の使用
UDFでサービス資格情報にアクセスするには、 databricks.service_credentials.getServiceCredentialsProvider() を使用します。ノートブックで使用される dbutils.credentials.getServiceCredentialsProvider() 関数は、UDF実行コンテキストでは使用できません。
要件は UDF の種類によって異なります:
UDF の種類 | 要件 |
|---|---|
クラシック コンピュート上の Databricks Runtime 17.1 以降、または環境バージョン 3 以降を実行しているServerless ノートブックまたはジョブ セッション実行環境。 | |
クラシックコンピュート上の Databricks Runtime 16.3 以降、Serverless コンピュート、Pro および Serverless SQL Warehouse。環境バージョン 6 は必要ありません。 | |
クラシックコンピュート上の Databricks Runtime 18.1 以降。サーバーレスコンピュート、ならびにProおよびServerless SQL Warehouseでは、UDFの |
サーバーレス SQL Warehouse 上のスカラーまたはバッチ Unity Catalog Python UDF からアウトバウンド呼び出しを行うには、ワークスペースのプレビューページ で Enable networking for isolated workloads in Serverless SQL Warehouses Public Preview を有効にします。Pro SQL ウェアハウスではこのプレビューは必要ありません。
サービス資格情報を宣言する Unity Catalog UDF を作成するには、関数作成者が資格情報に対する ACCESS を持っている必要があります。サーバレス コンピュート、Pro および Serverless SQLウェアハウス、標準アクセスモード コンピュートでは、呼び出し元に EXECUTE を含む通常の関数権限が必要ですが、資格情報に対する ACCESS は必要ありません。専用アクセスモード コンピュートでは、呼び出し元が ACCESS も持っている必要があります。
PySpark セッションスコープの UDF は、呼び出し元のアクセス許可を使用します。呼び出し元は、サービス資格情報に対する ACCESS を持っている必要があります。専用アクセス モードのコンピュートでは、呼び出し元が MANAGE を持っている必要があります。
環境バージョンおよびカスタム依存関係の要件を参照してください。
Python の例: 特定のサービス資格情報を使用するように boto3 セッションを構成する
import boto3
boto3_session = boto3.Session(botocore_session=dbutils.credentials.getServiceCredentialsProvider('your-service-credential'), region_name='your-aws-region')
sm = boto3_session.client('secretsmanager')
Scala の例: 特定のサービス認証情報を使用するように AWS Java SDK セッションを設定する
この例では、サービス認証情報を使用して、AWS Java SDK を使用して AWS S3 へのアクセスを提供します。
import com.amazonaws.auth.AWSCredentialsProvider
import com.amazonaws.services.s3.AmazonS3ClientBuilder
import com.amazonaws.services.s3.model.ListObjectsV2Request
import com.databricks.dbutils_v1.DBUtilsHolder
val dbutils = DBUtilsHolder.dbutils
// Obtain the AWS credentials provider. The asInstanceOf cast prevents a type mismatch
val awsCredentialsProvider = dbutils.credentials.getServiceCredentialsProvider("your-service-credential").asInstanceOf[AWSCredentialsProvider]
// Create an S3 client using the credentials provider
val s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(awsCredentialsProvider)
.withRegion("us-east-1") // Specify your AWS region
.build()
// List objects in an S3 bucket
val bucketName = "your-bucket"
val request = new ListObjectsV2Request().withBucketName(bucketName)
val result = s3Client.listObjectsV2(request)
result.getObjectSummaries.forEach { summary =>
println(s" - ${summary.getKey}") }
コンピュート リソースのデフォルト サービス資格情報を指定する
オプションで、環境変数を設定することで、汎用 または ジョブ コンピュート クラスターのデフォルト サービス認証情報を指定できます。 デフォルトでは、認証が提供されていない場合、SDK はそのサービス資格情報を使用します。 ユーザーは、外部クラウド サービスに接続するために、そのサービス資格情報に ACCESS する必要があります。 Databricks では、コードでサービス資格情報に名前を付けるよりもコードの移植性が低くなるため、このアプローチはお勧めしません。
サーバレス コンピュート と SQLウェアハウスは環境変数をサポートしていないため、デフォルト サービスの資格情報をサポートしていません。
-
クラスターの編集ページを開きます。
クラシックコンピュートの管理を参照してください。
-
ページの下部にある [詳細設定 ] をクリックし、[ Spark ] タブに移動します。
-
[環境変数 ] に次のエントリを追加し、
<your-service-credential>を置き換えます。DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME=<your-service-credential>
次のコード サンプルでは、サービス資格情報は指定されていません。 代わりに、 DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME 環境変数で指定されたサービス資格情報を使用します。
- Python
- Scala
import boto3
sm = boto3.client('secretsmanager', region_name='your-aws-region')
これを Python の例の例と比較します: 特定のサービス資格情報を使用するように boto3 セッションを構成し、資格情報の仕様を追加します。
boto3_session = boto3.Session(botocore_session=dbutils.credentials.getServiceCredentialsProvider('your-service-credential'), region_name='your-aws-region')
Scala の場合は、サービス資格情報の名前を nullに置き換えます。
val awsCredentialsProvider = dbutils.credentials.getServiceCredentialsProvider(null).asInstanceOf[AWSCredentialsProvider]