Unity Catalog サービスの資格情報を使用して外部クラウド サービスに接続する
この記事では、 Unity Catalog でサービス資格情報を使用して外部クラウド サービスに接続する方法について説明します。 Unity Catalog のサービス資格情報オブジェクトは、ユーザーが Databricks から接続する必要がある外部クラウド サービスへのアクセスを提供する長期的なクラウド資格情報をカプセル化します。
関連項目は次を参照してください。
始める前に
サービス資格情報を使用して外部クラウド サービスに接続するには、次のものが必要です。
-
Unity Catalog に対して有効になっている Databricks ワークスペース。
-
Databricks Runtime 16.2 以降にあるコンピュート リソース。
SQLウェアハウスはサポートされていません。
サービス資格情報のパブリック プレビュー バージョンは、Databricks Runtime 15.4 LTS 以降で使用でき、Python はサポートされていますが、Scala はサポートされていません。
-
Unity Catalog メタストアで作成された、クラウド サービスへのアクセスを許可するサービス資格情報。
-
サービス資格情報に対する
ACCESS
権限またはサービス資格情報の所有権。
コードでサービス資格情報を使用する
このセクションでは、ノートブックでサービス資格情報を使用する例を示します。 プレースホルダー値を置き換える。 これらの例は、アクセスするクライアントサービスに依存する必要なライブラリのインストールを必ずしも示しているわけではありません。
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}") }
コンピュート リソースのデフォルト サービス資格情報を指定します
オプションで、環境変数を設定することで、all-purpose または ジョブ コンピュート クラスターのデフォルト サービス認証情報を指定できます。 デフォルトでは、認証が提供されていない場合、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')
Compare this to the example in Python example: Configure a boto3 session to use a specific service credential, which adds the credential specification:
boto3_session = boto3.Session(botocore_session=dbutils.credentials.getServiceCredentialsProvider('your-service-credential'), region_name='your-aws-region')
For Scala, you replace the service credential name with null
.
val awsCredentialsProvider = dbutils.credentials.getServiceCredentialsProvider(null).asInstanceOf[AWSCredentialsProvider]