Amazon RDS for PostgreSQL でのフェデレーティッドクエリーの実行 (IAM 認証)
このページでは、ユーザー名とパスワードの代わりにAWS Identity and Access Management (IAM) 認証を使用して、Amazon RDS for PostgreSQLでフェデレーションクエリーを実行するようにDatabricksレイクハウスフェデレーションを構成する方法について説明します。認証には、AWS IAMロールを参照するUnity Catalogのサービス資格情報が使用されます。ユーザー名とパスワードを使用した一般的なPostgreSQLフェデレーションのセットアップについては、「Run federated queries on PostgreSQL」を参照してください。
Amazon RDS for PostgreSQLのIAM認証は、サービス資格情報によって参照されるAWS IAMロールに依存しているため、Databricks on AWSでのみ利用可能です。
始める前に
IAM認証を使用してAmazon RDS for PostgreSQLでフェデレーティッドクエリーを実行するには、以下の要件を満たす必要があります。
Databricks の要件
- Unity Catalog が有効になっているワークスペース。
- Databricks Runtime 18 LTS 以降および Standard または Dedicated アクセスモードを使用する Databricks コンピュート。
- ワークスペースにアタッチされた Unity Catalog メタストアに対する
CREATE CONNECTION特権。 - メタストアに対する
CREATE SERVICE CREDENTIAL特権。
AWSの要件
- Amazon RDS for PostgreSQL インスタンス。
- IAMロールおよびポリシーを作成する権限。
- データベースユーザーを作成するためにRDSインスタンスへ接続する権限。
AWS IAM 認証を構成する
AWSで以下のステップを完了し、RDS for PostgreSQLインスタンスでIAM認証を有効にします。また、Unity Catalogが接続に使用するデータベースユーザー、IAMポリシー、およびIAMロールを作成します。
ステップ 1: Amazon RDS インスタンスで IAM 認証を有効にする
IAMデータベース認証を有効にするには、RDS for PostgreSQLインスタンスを作成または変更します。手順については、AWSドキュメントの「IAMデータベース認証の有効化と無効化」を参照してください。
ステップ 2: Amazon RDS データベースユーザーを作成する
RDS インスタンスに接続し、IAM を使用して認証するデータベースユーザーを作成します。PostgreSQL の場合、ユーザーに rds_iam ロールを付与します:
CREATE USER db_userx;
GRANT rds_iam TO db_userx;
クエリーを実行するデータベースおよびテーブルに対して、ユーザーが必要とする権限を付与します。詳細については、AWSドキュメントのIAM認証を使用したデータベースアカウントの作成を参照してください。
ステップ 3: AWS IAM ポリシーをセットアップする
作成したデータベース ユーザーに対して rds-db:connect アクションを許可する IAM ポリシーを作成します。例えば:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["rds-db:connect"],
"Resource": ["arn:aws:rds-db:us-west-2:111122223333:dbuser:db-ABCDEFGHIJKL01234/db_userx"]
}
]
}
リソースARNは arn:aws:rds-db:<region>:<account-id>:dbuser:<DbiResourceId>/<db-user> という形式を使用します。<DbiResourceId> セグメントは、DBインスタンス識別子ではなく、RDSリソースID(例: db-ABCDEFGHIJKL01234)である必要があります。インスタンス識別子を使用すると、接続時にアクセス拒否エラーが発生します。
リソースIDを見つけるには、以下を実行します:
aws rds describe-db-instances --db-instance-identifier <instance-name> --query 'DBInstances[0].DbiResourceId'
または、Amazon RDS コンソールのデータベース インスタンスの [Configuration] tab でリソース ID を確認します。
詳細については、AWSドキュメントの「Creating and using an IAM policy for IAM database access」を参照してください。
ステップ4: AWS IAMロールを作成する
Unity Catalog がデータベースへの認証に使用できる IAM ロールを作成します:
-
AWS IAMコンソールで、 [ロール] に移動し、 [ロールを作成] をクリックします。
-
[信頼できるエンティティの種類の選択] で、 [カスタム信頼ポリシー] を選択します。
-
カスタム信頼ポリシー エディターに、以下のポリシーを貼り付けます。これはプレースホルダーです。Databricks でサービス認証情報を作成した後、Databricks が生成する信頼ポリシーに置き換えます。
PrincipalとActionは必須です。このステージではConditionブロックはオプションです。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"
}
}
}
]
} -
[次へ] をクリックします。 [アクセス許可の追加] ページで、IAM ポリシーのセットアップで作成した IAM ポリシーを選択します。
-
「 次へ 」をクリックし、「 ロール名 」を入力して、「 ロールの作成 」をクリックします。
-
ロールの ARN を書き留めます。サービス資格情報を作成する際に、それを指定します。
カスタム信頼ポリシーを持つIAMロールの詳細については、AWSドキュメントの「Creating a role using custom trust policies」を参照してください。
ステップ 5: Databricks サービス資格情報を作成する
前のステップのIAMロールARNを参照するUnity Catalogサービス資格情報を作成します。詳細な手順については、サービス資格情報の作成を参照してください。
サービス資格情報を作成した後、IAM ロールの信頼ポリシーの設定を完了します:
- [ Service credential created ] ダイアログで、表示されている信頼ポリシー全体をコピーし、[ Done ] をクリックします。
- AWSコンソールでIAMロールに戻り、[ 信頼関係 ]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 ワークスペースで、
カタログ をクリックします。
-
カタログ ペインの上部で、
追加 アイコンをクリックし、メニューから 接続を作成 を選択します。
-
接続のセットアップ ウィザードの 接続の基本 ページで、ユーザー・フレンドリーな 接続名 を入力します。
-
接続タイプ として PostgreSQL を選択します。
-
[認証タイプ] で、 [サービス資格情報] を選択します。
-
(オプション)コメントを追加します。
-
次へ をクリックします。
-
[認証] ページで、PostgreSQL RDSインスタンスの次の接続プロパティを入力します:
- [ホスト] :例:
postgres-demo.lb123.us-west-2.rds.amazonaws.com - ポート : 例えば、
5432 - ユーザー : 作成したIAMデータベースユーザー。例えば、
db_userx - AWSリージョン : RDSインスタンスのリージョン。例えば、
us-west-2
- [ホスト] :例:
-
次へ をクリックします。
-
[接続の詳細] ページで、 [サービス資格情報] に、サービス資格情報の作成で作成したサービス資格情報を選択します。
-
接続の作成 をクリックします。
-
カタログの基本 ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。
-
(オプション)[ 接続をテスト ]をクリックして、動作することを確認します。
-
[ カタログを作成 ] をクリックします。
-
アクセス ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 すべてのワークスペースにアクセス権がある を選択するか、 ワークスペースに割り当て をクリックし、ワークスペースを選択して 割り当て をクリックします。
-
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。テキストボックスにプリンシパルの入力を開始し、返された結果からプリンシパルをクリックします。
-
カタログに対する [権限] を付与します。 [付与] をクリックします:
-
カタログ内のオブジェクトへのアクセス権を持つ プリンシパル を指定します。テキストボックスにプリンシパルの入力を開始し、返された結果からプリンシパルをクリックします。
-
各プリンシパルに付与する Privilege presets を選択します。defaultでは、すべてのアカウントユーザーに
BROWSEが付与されます。- ドロップダウン メニューから Data Reader を選択し、カタログ内のオブジェクトに対する
read権限を付与します。 - ドロップダウン メニューから Data Editor を選択し、カタログ内のオブジェクトに対する
read権限およびmodify権限を付与します。 - 付与する特権を手動で選択します。
- ドロップダウン メニューから Data Reader を選択し、カタログ内のオブジェクトに対する
-
付与 をクリックします。
-
-
次へ をクリックします。
-
メタデータ ページで、タグのキーと値のペアを指定します。詳細については、Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用するを参照してください。
-
(オプション)コメントを追加します。
-
保存 をクリックします。
ノートブックまたはDatabricks SQLクエリーエディタで次のコマンドを実行します。パスワードの代わりに credential オプションを指定すると、IAM認証された接続が作成されます。
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user '<iam-user>',
aws_region '<region>',
credential '<service-credential-name>'
);
フォーリンカタログを作成する
UIを使用してデータソースへの接続を作成する場合、フォーリンカタログの作成が含まれるため、このステップはスキップできます。
UIを使用してデータソースへの接続を作成する場合、フォーリンカタログの作成が含まれるため、このステップはスキップできます。
フォーリンカタログは、外部データシステム内のデータベースをミラーリングするため、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>');