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

Run federated queries on Amazon Redshift (IAM authentication)

Configure Databricks Lakehouse Federation to run federated クエリー on Amazon Redshift using AWS Identity and Access Management (IAM) authentication instead of a username and password.Authentication uses a Unity Catalog サービス credential that references an AWS IAMロール.For general Redshift federation setup with username and password, see ラン federated クエリー on Amazon Redshift.

注記

Amazon RedshiftのIAM認証は、サービス資格情報によって参照されるAWS IAMロールに依存するため、Databricks on AWSでのみ利用可能です。

始める前に

IAM 認証を使用して Amazon Redshift でフェデレーション クエリーを実行する前に、次の要件を満たす必要があります。

Databricksの要件

  • Unity Catalog が有効になっているワークスペース。
  • Databricks Runtime 19以降と Standard または Dedicated アクセスモードを使用するDatabricksコンピュート。
  • ワークスペースにアタッチされた Unity Catalog メタストアに対する CREATE CONNECTION 特権。
  • メタストアに対する CREATE SERVICE CREDENTIAL 特権。

AWS の要件

認証モードを選択します

Redshift IAM認証では、3つのモードがサポートされています。付与するIAMアクションとデータベースユーザーを作成するかどうかを決定するため、Redshiftのデプロイメントに一致するものを選択してください。

  • DBユーザー (redshift:GetClusterCredentials): プロビジョニングされたクラスター用。Redshiftで作成する明示的なデータベースユーザーが必要です。
  • Group Federation (redshift:GetClusterCredentialsWithIAM): プロビジョニングされたクラスター用。DatabricksはIAMロールからデータベースIDを導出するため、ユーザーを作成する必要はありません。
  • Serverless (redshift-serverless:GetCredentials): Redshift Serverless用。データベースのIDは、グループフェデレーションのように自動的に派生します。

AWS IAM 認証の構成

Unity Catalog が接続に使用するデータベースユーザー、IAMポリシー、およびIAMロールを作成するには、AWSで次のステップを完了します。

ステップ 1: RedshiftデータベースIDを設定する

DBユーザーモードの場合は、Redshiftクラスターに接続してパスワード認証が無効なデータベースユーザーを作成し、必要な権限を付与します。これらのコマンドは、クラスターの [クエリー data] > [クエリー in query editor] ページから実行できます。

SQL
CREATE USER iam_user PASSWORD DISABLE;
GRANT ALL ON DATABASE dev TO iam_user;
GRANT USAGE ON SCHEMA public TO iam_user;
GRANT ALL ON ALL TABLES IN SCHEMA public TO iam_user;

グループフェデレーションおよびServerlessモードの場合は、CREATE USER文をスキップします。DatabricksはデータベースIDを自動的に導出します。導出されたIDには引き続きデータベース内の特権が必要であるため、クエリーに必要な特権をそのID、またはそれが属するRedshiftグループやロールに付与してください。これらがないと、接続の認証は成功しますが、権限エラーによりフェデレーションクエリーが失敗します。

ステップ 2: AWS IAMポリシーをセットアップする

認証モードの資格情報取得アクションを承認する IAM ポリシーを作成します。

プロビジョニング済みクラスターの場合は、クラスター、データベースユーザー、およびデータベースで redshift:GetClusterCredentials を承認します。

JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RedshiftDbUser",
"Effect": "Allow",
"Action": ["redshift:GetClusterCredentials"],
"Resource": [
"arn:aws:redshift:<region>:<account-id>:cluster:<cluster-name>",
"arn:aws:redshift:<region>:<account-id>:dbuser:<cluster-name>/<db-user>",
"arn:aws:redshift:<region>:<account-id>:dbname:<cluster-name>/<database>"
]
}
]
}

詳細については、AWSドキュメントの「Using IAM authentication to generate database user credentials」および「Security and connections in Amazon Redshift Serverless」を参照してください。

ステップ 3: AWS IAM ロールを作成する

Unity Catalog が Redshift に対して認証を行うために引き受けることができる IAM ロールを作成します。

  1. In the AWS IAM console, go to Roles and click Create role .

  2. For Trusted entity type , select Custom trust policy .

  3. In the Custom trust policy editor, paste the following policy.This is a placeholder.After you create the サービス credential in Databricks, replace it with the trust policy that Databricks generates.The Principal and Action are required.The Condition block is optional at this stage.

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": ["arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL"]
    },
    "Action": "sts:AssumeRole",
    "Condition": {
    "StringEquals": {
    "sts:ExternalId": "0000"
    }
    }
    }
    ]
    }
  4. 次へ をクリックします。 [権限の追加] ページで、AWS IAMポリシーのセットアップで作成したIAMポリシーを選択します。

  5. [Next] をクリックし、 [Role name] を入力して、 [Create role] をクリックします。

  6. ロールのARNを書き留めます。サービス資格情報を作成するときに指定します。

カスタム信頼ポリシーを使用するIAMロールの詳細については、AWSドキュメントのカスタム信頼ポリシーを使用したロールの作成を参照してください。

ステップ 4: Create the Databricks サービス credential

前の手順のIAMロールARNを参照するUnity Catalogサービス資格情報を作成します。詳細な手順については、サービス資格情報の作成を参照してください。

After you create the サービス credential, finish configuring the IAMロール's trust policy:

  1. [サービス資格情報が作成されました] ダイアログで、表示されている信頼ポリシー全体をコピーし、 [完了] をクリックします。
  2. AWSコンソールでIAMロールに戻り、[ Trust relationships ] tabを開き、プレースホルダーの信頼ポリシーをコピーしたものに置き換えます。これにより、サービス認証情報の外部IDが追加され、ロールが自己引き受け型になります。

サービス資格情報の名前を書き留めます。接続を作成する際に参照します。

接続を作成する

接続では、外部データベースシステムにアクセスするためのパスと認証情報を指定します。接続を作成するには、カタログエクスプローラーを使用するか、Databricksノートブックまたは Databricks SQLクエリーエディタで CREATE CONNECTION SQLコマンドを使用できます。

注記

Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections および Unity Catalog コマンドを参照してください。

必要な権限: メタストア管理者またはCREATE CONNECTION権限を持つユーザー。

  1. Databricks ワークスペースで、データアイコン。 カタログ をクリックします。

  2. At the top of the Catalog pane, click the 追加またはプラスアイコン Add icon and select Create a connection from the menu.

  3. 接続のセットアップ ウィザードの 接続の基本 ページで、わかりやすい 接続名 を入力します。

  4. 接続タイプRedshift を選択します。

  5. 認証タイプ で、 サービス資格情報 を選択します。

  6. (オプション)コメントを追加します。

  7. 次へ をクリックします。

  8. 認証 ページで、Redshiftクラスターまたはワークグループの次の接続プロパティを入力します。

    • ホスト :たとえば、 redshift-demo.us-west-2.redshift.amazonaws.com
    • ポート :たとえば、 5439
    • User : DBユーザーモードの場合は、作成したデータベースユーザー。たとえば、iam_userです。グループフェデレーションおよびServerlessモードの場合は、ここを空のままにします。
  9. 次へ をクリックします。

  10. [接続の詳細 (Connection details)] ページで、 [認証モード (Authentication mode)] ( [DB ユーザー (DB User)][グループフェデレーション (Group Federation)] 、または [Serverless] ) を選択し、 [サービス資格情報 (Service credential)]「サービス資格情報の作成」 で作成したサービス資格情報を選択します。

  11. 接続の作成 をクリックします。

  12. カタログの基本 ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。

  13. (オプション)[ 接続をテスト ]をクリックして、動作することを確認します。

  14. [ カタログを作成 ] をクリックします。

  15. アクセス ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 すべてのワークスペースにアクセス権がある を選択するか、 ワークスペースに割り当て をクリックし、ワークスペースを選択して 割り当て をクリックします。

  16. Change the Owner who can manage access to all objects in the catalog.Start typing a principal in the text box, and then click the principal in the returned results.

  17. カタログに対して [Privileges] を付与します。 付与 をクリックします:

    1. カタログ内のオブジェクトへのアクセス権を持つ [プリンシパル (Principals)] を指定します。テキストボックスにプリンシパルの入力を開始し、返された結果からプリンシパルをクリックします。

    2. 各プリンシパルに付与する [権限プリセット] を選択します。defaultでは、アカウントユーザー全員にBROWSEが付与されます。

      • ドロップダウン メニューから Data Reader を選択し、カタログ内のオブジェクトに対する read 権限を付与します。
      • ドロップダウン メニューから [Data Editor] を選択し、カタログ内のオブジェクトに対する read および modify 権限を付与します。
      • 付与する権限を手動で選択します。
    3. 付与 をクリックします。

  18. 次へ をクリックします。

  19. [ Metadata ] ページで、タグのキーと値のペアを指定します。詳細については、Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用するを参照してください。

  20. (オプション)コメントを追加します。

  21. 保存 をクリックします。

フォーリンカタログを作成する

注記

If you use the UI to create a connection to the データソース, フォーリンカタログ creation is included and you can skip this ステップ.

注記

If you use the UI to create a connection to the データソース, フォーリンカタログ creation is included and you can skip this ステップ.

フォーリンカタログは、外部データシステム内のデータベースをミラーリングするため、DatabricksとUnity Catalogを使用して、そのデータベース内のデータへのアクセスを管理できます。フォーリンカタログを作成するには、すでに定義されているデータソースへの接続を使用します。

フォーリンカタログを作成するには、カタログエクスプローラCREATE FOREIGN CATALOGSQL を使用するか、Databricks ノートブックまたは クエリSQL エディターの コマンドを使用します。Databricks REST API または Databricks CLI を使用してカタログを作成することもできます。 POST /api/2.1/unity-catalog/catalogs および Unity Catalog コマンド

必要な権限: メタストアの CREATE CATALOG 権限、接続の所有権または接続の CREATE FOREIGN CATALOG 権限。

  1. Databricks ワークスペースで、データアイコン。[カタログ]をクリックして カタログエクスプローラー を開きます。

  2. カタログ ペインの上部で、追加またはプラスアイコン 追加 アイコンをクリックし、メニューから[ カタログを追加 ]を選択します。

    または、 クイックアクセス ページから[ カタログ ]ボタンをクリックし、[ カタログを作成 ]ボタンをクリックします。

  3. フォーリンカタログの作成については、カタログの作成の手順に従ってください。

その他のリソース