データアクセス構成の有効化

この記事では、Databricksの管理者がUIを使用してあらゆるSQLウェアハウスに対して実行するデータアクセス構成について説明します。

注:

ワークスペースでUnity Catalogが有効になっている場合は、この記事の手順を実行する必要はありません。Unity CatalogはデフォルトでSQLウェアハウスをサポートします。

Databricks では、クラウドオブジェクトストレージに接続するために、インスタンスの代わりに Unity Catalog ボリュームまたは外部ロケーションを使用することをお勧めします。 Unity Catalog は、アカウント内の複数のワークスペースにわたるデータ アクセスを管理および監査するための中央の場所を提供することで、データのセキュリティとガバナンスを簡素化します。 Unity Catalogは何ですか?」を参照してください。および外部ロケーションの使用に関する推奨事項

REST APIを使用してすべてのSQLウェアハウスを構成するには、SQLウェアハウスのAPI を参照してください。

重要

これらの設定を変更すると、実行中のすべてのSQLウェアハウスが再起動されます。

データへのアクセスを有効にする方法の一般的な概要については、「 アクセス制御リスト」を参照してください。

要件

  • SQLウェアハウスの設定を構成するには、Databricksワークスペースの管理者権限が必要となります。

インスタンスを使用するように SQL ウェアハウスを構成する

AWSストレージにアクセスする際にAWSインスタンスプロファイルを使用するよう全ウェアハウスを構成するには、以下の手順に従ってください。

  1. ワークスペースの上部バーにあるユーザー名をクリックし、ドロップダウンから「設定」を選択します。

  2. 「コンピュート」タブをクリックします。

  3. SQLウェアハウスの横にある「管理」をクリックします。

  4. [インスタンス]ドロップダウンで、インスタンスを選択します。

  5. 保存」をクリックします。

警告

  • インスタンスプロファイルを使用する権限をユーザーが持たない場合、そのユーザーが作成したすべてのウェアハウスは起動に失敗します。

  • インスタンスが有効でない場合、すべての SQL ウェアハウスが異常になります。

Databricks Terraform プロバイダーdatabricks_sql_global_configを使用してインスタンスを構成することもできます。

[データアクセス構成] テキストボックスのエントリを直接編集することもできます。

SQLウェアハウスのデータアクセス権のプロパティを構成する

従来のHive metastoreの代わりに外部メタストアを使用する場合など、すべてのウェアハウスにデータ アクセス プロパティを構成するには:

  1. ワークスペースの上部バーにあるユーザー名をクリックし、ドロップダウンから「設定」を選択します。

  2. 「コンピュート」タブをクリックします。

  3. SQLウェアハウスの横にある「管理」をクリックします。

  4. [データ アクセス構成]テキスト ボックスで、メタストア プロパティを含むキーと値のペアを指定します。

    重要

    シークレット値を Spark に公開せずに、Spark 構成プロパティをシークレットの値に設定するには、値を{{secrets/<secret-scope>/<secret-name>}}に設定します。 <secret-scope>シークレットスコープに置き換え、 <secret-name>シークレット名に置き換えます。 値は {{secrets/ で始まり、 }}で終わる必要があります。 この構文の詳細については、 「Spark 構成プロパティまたは環境変数でシークレットを参照するための構文」を参照してください。

  5. 保存」をクリックします。

Databricks Terraform プロバイダーdatabricks_sql_global_configを使用してデータ アクセス プロパティを構成することもできます。

サポート対象となるプロパティ

  • * が末尾にあるエントリの場合、その接頭辞内のすべてのプロパティがサポートされます。

    たとえば、 spark.sql.hive.metastore.* は、 spark.sql.hive.metastore.jarsspark.sql.hive.metastore.version の両方がサポートされていることを示し、その他のプロパティは spark.sql.hive.metastoreで始まることを示します。

  • 値に機密情報が含まれるプロパティについては、secrets/<secret-scope>/<secret-name> の構文を使用して機密情報をシークレットに保存し、プロパティの値をシークレット名に設定することができます。

SQLウェアハウスでは次のプロパティがサポートされています。

  • spark.databricks.hive.metastore.glueCatalog.enabled

  • spark.databricks.delta.catalog.update.enabled false

  • spark.sql.hive.metastore.* ( spark.sql.hive.metastore.jarsspark.sql.hive.metastore.jars.pathは、サーバレス SQL ウェアハウスではサポートされていません。)

  • spark.sql.warehouse.dir

  • spark.hadoop.aws.region

  • spark.hadoop.datanucleus.*

  • spark.hadoop.fs.*

  • spark.hadoop.hive.*

  • spark.hadoop.javax.jdo.option.*

  • spark.hive.*

  • spark.hadoop.aws.glue.*

これらのプロパティを設定する方法の詳細については、外部のHiveメタストアAWS Glueデータカタログを参照してください。

サーバーレスSQLウェアハウスで使用するAWSインスタンスプロファイルの確認または設定

Databricks SQLで既にインスタンスプロファイルを使用している場合、インスタンスプロファイルに関連付けられたロールには、サーバーレスSQLウェアハウスが使用できるようにDatabricksサーバーレスコンピューティングの信頼関係ステートメントが必要となります。

インスタンスがいつどのように作成されたかによっては、すでに信頼関係が確立されている可能性があるため、ロールを変更する必要がない場合があります。 インスタンスが次の方法で作成された場合、信頼関係ステートメントが含まれる可能性があります。

  • 2022年6月24日以降、インスタンスプロファイルは、AWSクイックスタートを使用したDatabricksワークスペース作成の一部として作成されました。

  • 2022 年 6 月 24 日以降、組織内の誰かが Databricks 記事のステップに従い、 手動でインスタンスを作成しました

このセクションでは、インスタンスプロファイルに関連付けられているロールに信頼関係ステートメントがあることを確認または更新する方法について説明します。これにより、サーバーレスSQLウェアハウスがロールを用いてS3バケットにアクセスできるようになります。

重要

これらのステップを実行するには、Databricks ワークスペース管理者になって、ワークスペースが Databricks SQL にどのインスタンスを使用するかを確認する必要があります。 ロールの信頼関係ポリシーを確認したり、必要な変更を加えたりするには、AWS アカウント管理者である必要もあります。 これらの管理者タイプの両方ではない場合は、組織内の適切な管理者に連絡して、これらのステップを完了してください。

  1. 管理者設定ページで、 [コンピュート]タブをクリックし、 SQL ウェアハウスの横にある[管理]をクリックします。

  2. [データセキュリティ] セクションの [インスタンスプロファイル] フィールドをご覧ください。Databricks SQLのAWSインスタンスプロファイルを使用してルートバケット以外のAWS S3バケットに接続するようにワークスペースが設定されているかどうかを確認してください。

    • インスタンスを使用すると、その名前がインスタンスフィールドに表示されます。 次のステップのためにメモしておきます。

    • フィールド値が None の場合、インスタンスプロファイルを使用してワークスペースのルートバケット以外の S3 バケットにアクセスしていないことになります。これで設定は完了です。

  3. インスタンスプロファイル名が関連付けられたロール名と一致するかどうかを確認します。

    1. AWSコンソールで、IAMサービスの [ロール] タブに移動します。アカウント内のすべての IAM ロールが一覧表示されます。

    2. このセクションで前に見つけたインスタンス必須フィールドのデータ セキュリティセクションにあるDatabricks SQL 管理設定のインスタンス名と一致する名前のロールをクリックします。

    3. 概要で、[ロールARN] フィールドと [インスタンスプロファイルARN] フィールドを探します。

    4. これら 2 つのフィールドの末尾の最後のスラッシュの後に一致する名前があるかどうかを確認します。以下に例を挙げます。

      インスタンスのプロファイル名とロールのARN名は一致しますか?
  4. 前の手順で、ロール名 (ロールARNの最後のスラッシュの後のテキスト) とインスタンスプロファイル名 (インスタンスARNの最後のスラッシュの後のテキスト) が一致しないことが判明した場合は、 インスタンスプロファイル登録を編集してARNを指定します。

    1. インスタンスプロファイルを編集するには、[インスタンスプロファイル] フィールドの下にある [構成] ボタンをクリックします。

    2. インスタンスプロファイルの名前をクリックします。

    3. [編集] をクリックします。

    4. オプションの [ロール ARN] フィールドに、インスタンスプロファイルに関連付けられたロールのロールARNを貼り付けます。これは、ロール名がインスタンスプロファイル名と一致しない場合でも、インスタンスプロファイルがDatabricks SQLサーバーレスで動作することを可能にするための重要な手順です。

    5. 保存」をクリックします。

  5. AWS コンソールで、信頼関係を確認または編集します。

    1. AWS コンソールの IAM サービスの [ロール] タブで、変更するインスタンス適切ロールをクリックします。

    2. [信頼関係] のタブをクリックします。

    3. 既存の信頼ポリシーを表示します。 ポリシーに以下の JSON ブロックが既に含まれている場合、このステップは以前に完了しているため、次の指示は無視してかまいません。

    4. [信頼ポリシーの編集] をクリックします。

    5. 既存のStatement配列で、既存の信頼ポリシーの末尾に次の JSON ブロックを追加します。 既存のポリシーを上書きしないことを確認します。

      {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::790110701330:role/serverless-customer-resource-role"
        ]
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
            "sts:ExternalId": [
              "databricks-serverless-<YOUR-WORKSPACE-ID1>",
              "databricks-serverless-<YOUR-WORKSPACE-ID2>"
            ]
          }
        }
      }
      

      ステートメント内で変更する必要があるのは、ワークスペース ID だけです。 YOUR_WORKSPACE-IDこのロールを使用するワークスペースの 1 つ以上のDatabricks ワークスペース IDに置き換えます。 ワークスペースの使用中にワークスペース ID を取得するには、URL を確認してください。 たとえば、 https://<databricks-instance>/?o=6280049833385130では、 o=の後の数字はワークスペース ID です。

      ポリシーの原則は編集しないでくださいPrincipal.AWS フィールドは arn:aws:iam::790110701330:role/serverless-customer-resource-role 値を持ち続ける必要があります。これは、Databricksが管理するサーバーレスのコンピューティング・ロールを指します。

    6. ポリシーの確認」をクリックします。

    7. [変更を保存]をクリックします。

重要

後でインスタンスが変更される場合は、これらのステップを繰り返して、インスタンスのロールの信頼関係に必要な追加のステートメントが含まれていることを確認します。

トラブルシューティング

信頼関係が正しく構成されていない場合、クラスターは失敗し、「クラスターの作成リクエストが例外 INVALID_PARAMETER_VALUE で失敗しました: IAM ロール <role-id> には必要な信頼関係がありません。」というメッセージが表示されます。

このエラーが発生した場合は、ワークスペース ID が間違っているか、信頼ポリシーが正しいロールで正しく更新されていない可能性があります。

「確認」のステップを慎重に実行するか、サーバレス SQL ウェアハウスで使用する AWS インスタンスを設定して、信頼関係を更新します。

サーバーレスSQLウェアハウスのためのGlueメタストアの設定

AWS Glue メタストアを指定するか、追加のデータソース設定を追加する必要がある場合は、管理者設定ページの[データ アクセス設定]フィールドを更新します。

重要

サーバーレスSQLウェアハウスは、デフォルトのDatabricksメタストアとAWS Glueをメタストアとしてサポートしていますが、外部のHiveメタストアはサポートしません。