Hologres V3.0 以降のバージョンでは、インスタンス内のアカウントへの RAM ロールのマッピングをサポートしています。これにより、ログインアカウントは RAM ロールを偽装して、外部システムへのクロスアカウントアクセスが可能になります。現在、RAM ロールを使用してアクセスできるのは、DLF 2.5 データソースと他の Hologres インスタンスのみです。このトピックでは、CREATE USER MAPPING コマンドの使用方法と条件について説明します。
背景情報
ユーザーマッピングは、Hologres のログインユーザーと Alibaba Cloud アカウントとの間のリレーションシップを定義します。これにより、現在の Hologres ユーザー (BASIC ユーザーを含む) は、ユーザーマッピングを使用して、アカウントをまたいで外部サービスにアクセスできます。これらのサービスには、MaxCompute、DLF、OSS、および Hologres でのデータベース間クエリが含まれます。詳細については、「PostgreSQL CREATE USER MAPPING」をご参照ください。
制限事項
-
一般ユーザーに権限を付与するには、Hologres インスタンスに対する SuperUser 権限、または外部サーバーに対する Owner 権限が必要です。外部サーバーの使用権限を持つユーザーは、自分自身のためにユーザーマッピングを作成することもできます。
-
MaxCompute データソースと DLF 1.0 は、RAM ロールを使用したユーザーマッピングの設定をサポートしていません。
構文の説明
外部データベースの設定
MaxCompute データソース
-
構文
CREATE USER MAPPING FOR "<user_name>" EXTERNAL DATABASE <ext_db_name> OPTIONS ( access_id '<Access_id>', access_key '<Access_key>' ); -
パラメーターの説明
パラメーター名
説明
user_name
権限を付与するアカウント。これは、別の RAM ユーザー、Hologres 内部アカウント (BASIC アカウント)、またはすべてのユーザーにパブリックアクセスを許可する public にすることができます。public の使用には注意が必要です。
Access_id
現在のアカウントの AccessKey ID。AccessKey ID を取得するには、Resource Access Management (RAM) コンソールに移動します。
Access_key
現在のアカウントの AccessKey Secret。
DLF データソース
-
構文
CREATE USER MAPPING FOR "<user_name>" EXTERNAL DATABASE <ext_db_name> OPTIONS ( -- For DLF 1.0 [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx', oss_access_id 'LTxxxxxxxxxx', oss_access_key 'y8xxxxxxxxxxxxx'] -- For DLF 2.5 [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx'] | [rolearn 'RoleARN'] );説明RoleARN を使用してユーザーマッピングを設定する場合、RAM で
hologram::GrantAssumeRoleアクセスポリシーを設定する必要があります。Hologres はこのポリシーを使用して、現在のユーザーが指定された RoleARN のユーザーマッピングを作成する権限を持っているかどうかを確認します。この権限を持つユーザーは、Hologres 内の任意のユーザーに対して、その RoleARN へのユーザーマッピングを作成できます。次の例は、そのポリシーを示しています。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "hologram:GrantAssumeRole", "Resource": "<Role_ARN>" } ] } -
パラメーターの説明
パラメーター名
説明
user_name
権限を付与するアカウント。これは、別の RAM ユーザー、Hologres 内部アカウント (BASIC アカウント)、またはすべてのユーザーにパブリックアクセスを許可する public にすることができます。public の使用には注意が必要です。
ext_db_name
CREATE EXTERNAL DATABASE を使用して Hologres インスタンスに作成された外部データベース。外部データソースから Hologres にメタデータをロードするために使用されます。詳細については、「CREATE EXTERNAL DATABASE」をご参照ください。
access_id
現在のアカウントの AccessKey ID。AccessKey ID を取得するには、Resource Access Management (RAM) コンソールに移動します。
access_key
現在のアカウントの AccessKey Secret。
dlf_access_id
DLF に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
dlf_access_key
DLF に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret。
oss_access_id
OSS に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
oss_access_key
OSS に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret。
rolearn
ロールの Alibaba Cloud リソース名 (ARN)。ARN は、ロールのグローバルリソース記述子であり、ロールを指定するために使用されます。フォーマットは
acs:ram::<account-id>:role/<role-name>です。<role-name>部分は小文字に変換されます。ロールの ARN を表示する方法については、「RAM ロールの表示」をご参照ください。
外部データベースに設定されたユーザーマッピングのクエリ
SELECT
datname,
usename,
eumoptions
FROM
pg_holo_external_user_mappings;
外部サーバーの設定
MaxCompute データソース
-
構文
CREATE USER MAPPING FOR "<user_name>" SERVER odps_server -- Fixed server OPTIONS ( access_id '<access_id>', access_key '<access_key>' ); -
パラメーターの説明
パラメーター名
説明
user_name
権限を付与するアカウント。これは、別の RAM ユーザー、Hologres 内部アカウント (BASIC アカウント)、またはすべてのユーザーにパブリックアクセスを許可する public にすることができます。public の使用には注意が必要です。
access_id
現在のアカウントの AccessKey ID。AccessKey ID を取得するには、Resource Access Management (RAM) コンソールに移動します。
access_key
現在のアカウントの AccessKey Secret。
DLF データソース
-
構文
CREATE USER MAPPING FOR "<user_name>" SERVER <server_name> OPTIONS ( -- For DLF 1.0 [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx', oss_access_id 'LTxxxxxxxxxx', oss_access_key 'y8xxxxxxxxxxxxx'] -- For DLF 2.5 [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx'] | [rolearn 'RoleARN'] ); -
パラメーターの説明
パラメーター名
説明
user_name
権限を付与するアカウント。これは、別の RAM ユーザー、Hologres 内部アカウント (BASIC アカウント)、またはすべてのユーザーにパブリックアクセスを許可する public にすることができます。public の使用には注意が必要です。
server_name
外部サーバーの名前。これは、前のステップで設定したカスタム名です。MaxCompute データソースの場合、サーバーは固定の組み込みサーバー odps_server です。詳細については、「外部サーバーの作成」をご参照ください。
access_id
現在のアカウントの AccessKey ID。AccessKey ID を取得するには、Resource Access Management (RAM) コンソールに移動します。
access_key
現在のアカウントの AccessKey Secret。
dlf_access_id
DLF に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
dlf_access_key
DLF に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret。
oss_access_id
OSS に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
oss_access_key
OSS に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey Secret。
rolearn
ロールの Alibaba Cloud リソース名 (ARN)。ARN は、ロールのグローバルリソース記述子であり、ロールを指定するために使用されます。フォーマットは
acs:ram::<account-id>:role/<role-name>です。<role-name>部分は小文字に変換されます。ロールの ARN を表示する方法については、「RAM ロールの表示」をご参照ください。
Hologres データソース
-
構文
CREATE USER MAPPING FOR "<user_name>" SERVER <server_name> OPTIONS ( access_id '<access_id>', access_key '<access_key>' ); -
パラメーターの説明
パラメーター名
説明
user_name
権限を付与するアカウント。これは、別の RAM ユーザー、Hologres 内部アカウント (BASIC アカウント)、またはすべてのユーザーにパブリックアクセスを許可する public にすることができます。public の使用には注意が必要です。
server_name
データベース間クエリを実行するために Hologres で作成されたサーバー。詳細については、「データベース間クエリ (ベータ版)」をご参照ください。
access_id
現在のアカウントの AccessKey ID。AccessKey ID を取得するには、Resource Access Management (RAM) コンソールに移動します。
access_key
現在のアカウントの AccessKey Secret。
内部データベースに設定されたユーザーマッピングのクエリ
SELECT
um.srvname AS "Server",
um.usename AS "User name"
FROM
pg_catalog.pg_user_mappings um
WHERE
um.srvname != 'query_log_store_server'
ORDER BY 1, 2;
使用例
外部データベース (推奨)
-
この例では、DLF 2.5 データソースを使用します。まず、外部データベースを作成して、DLF 上の Paimon カタログに関連付けます。
CREATE EXTERNAL DATABASE ext_db_dlf WITH metastore_type 'dlf-rest' catalog_type 'paimon' dlf_catalog 'paimon_catalog'; -
外部データベースが作成された後、アクセスできるのはインスタンスの Superuser と DB Owner のみです。他のアカウントはアクセスできません。その後、Resource Access Management (RAM) コンソールで RAM ロールを作成し、Hologres で CREATE USER MAPPING コマンドを実行することで、RAM ユーザーに権限を付与できます。
-
RAM でロールを作成し、ポリシーを設定します。
-
RAM コンソールにログインし、Role > [ロールの作成] をクリックします。信頼できるエンティティタイプとして [Alibaba Cloud サービス] を選択し、ロールタイプとして [サービスロール] を選択し、ロール名を入力し、[信頼できるサービスの選択] を [インタラクティブ分析] に設定して、Complete をクリックします。
-
Permission Model ページに移動します。[ポリシーの作成] > [スクリプトエディター] をクリックします。Hologres と DLF で必要な権限チェックのために、個別のポリシーを作成します。ポリシーは次のとおりです。
Hologres で必要な権限チェックポリシー。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "hologram:GrantAssumeRole", "Resource": "acs:ram::xxx:role/testramrole" } ] }DLF で必要な権限チェックポリシー。
{ "Version": "1", "Statement": [ { "Action": "dlf:CheckPermissions", "Resource": "*", "Effect": "Allow" } ] } -
Role ページに移動します。Grant Permission をクリックします。作成した 2 つのポリシーを追加します。
-
-
Hologres で、CREATE USER MAPPING コマンドを実行して、RAM ユーザーに
ext_db_dlfデータベースに対する権限を付与します。CREATE USER MAPPING FOR "p4_203535926287167253" EXTERNAL DATABASE ext_db_dlf OPTIONS ( rolearn 'acs:ram::xxx:role/testramrole' );
-
-
RAM ユーザーとして Hologres コンソールにログインし、SQL エディターでクエリを実行します。
SELECT * FROM ext_db_dlf.dlf_db.paimon_table;
外部サーバー
この例では、MaxCompute データソースを使用します。Hologres の BASIC アカウントに MaxCompute の外部テーブルへのアクセス権限を付与する方法を示します。
-
Hologres で BASIC アカウントを作成します。
CREATE USER basicuser; -
BASIC アカウントに
odps_serverへのアクセス権限を付与します。CREATE USER MAPPING FOR "basicuser" SERVER odps_server OPTIONS ( access_id 'LTxxxxxxxxxx', access_key 'y8xxxxxxxxxxxxx' );