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 の要件
- Amazon Redshiftプロビジョニング済みクラスターまたはServerlessワークグループ。
- Databricksワークスペースからクラスターまたはワークグループへのネットワーク接続。レイクハウスフェデレーションのネットワーキングに関する推奨事項を参照してください。
- The ability to create IAM roles and policies.
認証モードを選択します
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] ページから実行できます。
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 ポリシーを作成します。
- DB User
- Group Federation
- Serverless
プロビジョニング済みクラスターの場合は、クラスター、データベースユーザー、およびデータベースで redshift:GetClusterCredentials を承認します。
{
"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>"
]
}
]
}
プロビジョニング済みクラスターの場合は、クラスターとデータベースで redshift:GetClusterCredentialsWithIAM を承認します。データベースのIDはIAMロールから取得されるため、dbuser ARNは必要ありません。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RedshiftGroupFederation",
"Effect": "Allow",
"Action": ["redshift:GetClusterCredentialsWithIAM"],
"Resource": [
"arn:aws:redshift:<region>:<account-id>:cluster:<cluster-name>",
"arn:aws:redshift:<region>:<account-id>:dbname:<cluster-name>/<database>"
]
}
]
}
Redshift Serverlessの場合は、ワークグループで redshift-serverless:GetCredentials を承認します。このアクションは redshift-serverless 名前空間に属し、他のモードで使用されるプロビジョニング済みクラスターリソースではなく、ワークグループARNに対して実行されます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RedshiftServerless",
"Effect": "Allow",
"Action": ["redshift-serverless:GetCredentials"],
"Resource": ["arn:aws:redshift-serverless:<region>:<account-id>:workgroup/<workgroup-id>"]
}
]
}
詳細については、AWSドキュメントの「Using IAM authentication to generate database user credentials」および「Security and connections in Amazon Redshift Serverless」を参照してください。
ステップ 3: AWS IAM ロールを作成する
Unity Catalog が Redshift に対して認証を行うために引き受けることができる IAM ロールを作成します。
-
In the AWS IAM console, go to Roles and click Create role .
-
For Trusted entity type , select Custom trust policy .
-
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
PrincipalandActionare required.TheConditionblock 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"
}
}
}
]
} -
次へ をクリックします。 [権限の追加] ページで、AWS IAMポリシーのセットアップで作成したIAMポリシーを選択します。
-
[Next] をクリックし、 [Role name] を入力して、 [Create role] をクリックします。
-
ロールのARNを書き留めます。サービス資格情報を作成するときに指定します。
カスタム信頼ポリシーを使用するIAMロールの詳細については、AWSドキュメントのカスタム信頼ポリシーを使用したロールの作成を参照してください。
ステップ 4: Create the Databricks サービス credential
前の手順のIAMロールARNを参照するUnity Catalogサービス資格情報を作成します。詳細な手順については、サービス資格情報の作成を参照してください。
After you create the サービス credential, finish configuring the IAMロール's trust policy:
- [サービス資格情報が作成されました] ダイアログで、表示されている信頼ポリシー全体をコピーし、 [完了] をクリックします。
- 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権限を持つユーザー。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
カタログ をクリックします。
-
At the top of the Catalog pane, click the
Add icon and select Create a connection from the menu.
-
接続のセットアップ ウィザードの 接続の基本 ページで、わかりやすい 接続名 を入力します。
-
接続タイプ で Redshift を選択します。
-
認証タイプ で、 サービス資格情報 を選択します。
-
(オプション)コメントを追加します。
-
次へ をクリックします。
-
認証 ページで、Redshiftクラスターまたはワークグループの次の接続プロパティを入力します。
- ホスト :たとえば、
redshift-demo.us-west-2.redshift.amazonaws.com - ポート :たとえば、
5439 - User : DBユーザーモードの場合は、作成したデータベースユーザー。たとえば、
iam_userです。グループフェデレーションおよびServerlessモードの場合は、ここを空のままにします。
- ホスト :たとえば、
-
次へ をクリックします。
-
[接続の詳細 (Connection details)] ページで、 [認証モード (Authentication mode)] ( [DB ユーザー (DB User)] 、 [グループフェデレーション (Group Federation)] 、または [Serverless] ) を選択し、 [サービス資格情報 (Service credential)] で 「サービス資格情報の作成」 で作成したサービス資格情報を選択します。
-
接続の作成 をクリックします。
-
カタログの基本 ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。
-
(オプション)[ 接続をテスト ]をクリックして、動作することを確認します。
-
[ カタログを作成 ] をクリックします。
-
アクセス ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 すべてのワークスペースにアクセス権がある を選択するか、 ワークスペースに割り当て をクリックし、ワークスペースを選択して 割り当て をクリックします。
-
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.
-
カタログに対して [Privileges] を付与します。 付与 をクリックします:
-
カタログ内のオブジェクトへのアクセス権を持つ [プリンシパル (Principals)] を指定します。テキストボックスにプリンシパルの入力を開始し、返された結果からプリンシパルをクリックします。
-
各プリンシパルに付与する [権限プリセット] を選択します。defaultでは、アカウントユーザー全員に
BROWSEが付与されます。- ドロップダウン メニューから Data Reader を選択し、カタログ内のオブジェクトに対する
read権限を付与します。 - ドロップダウン メニューから [Data Editor] を選択し、カタログ内のオブジェクトに対する
readおよびmodify権限を付与します。 - 付与する権限を手動で選択します。
- ドロップダウン メニューから Data Reader を選択し、カタログ内のオブジェクトに対する
-
付与 をクリックします。
-
-
次へ をクリックします。
-
[ Metadata ] ページで、タグのキーと値のペアを指定します。詳細については、Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用するを参照してください。
-
(オプション)コメントを追加します。
-
保存 をクリックします。
ノートブックまたはDatabricks SQLクエリーエディタで次のコマンドを実行します。パスワードの代わりに credential オプションを指定すると、IAM 認証された接続が作成されます。auth_mode を Redshift のデプロイに合わせて設定し、user は db_user モードに対してのみ設定します。
-- db_user mode (provisioned cluster)
CREATE CONNECTION <connection-name> TYPE redshift
OPTIONS (
host '<hostname>',
port '<port>',
user '<iam-user>',
auth_mode 'db_user',
credential '<service-credential-name>'
);
-- group_federation mode (provisioned cluster)
CREATE CONNECTION <connection-name> TYPE redshift
OPTIONS (
host '<hostname>',
port '<port>',
auth_mode 'group_federation',
credential '<service-credential-name>'
);
-- serverless mode (Redshift Serverless)
CREATE CONNECTION <connection-name> TYPE redshift
OPTIONS (
host '<hostname>',
port '<port>',
auth_mode 'serverless',
credential '<service-credential-name>'
);
フォーリンカタログを作成する
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 権限。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
[カタログ]をクリックして カタログエクスプローラー を開きます。
-
カタログ ペインの上部で、
追加 アイコンをクリックし、メニューから[ カタログを追加 ]を選択します。
または、 クイックアクセス ページから[ カタログ ]ボタンをクリックし、[ カタログを作成 ]ボタンをクリックします。
-
フォーリンカタログの作成については、カタログの作成の手順に従ってください。
ノートブックまたはSQLクエリーエディタで次のSQLコマンドを実行します。括弧内の項目はオプションです。プレースホルダーの値を置き換えます。
<catalog-name>:Databricksのカタログの名前。<connection-name>:データソース、パス、およびアクセス認証情報を指定する 接続オブジェクト。<database-name>:Databricksでカタログとしてミラーリングするデータベースの名前。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');