Hologres V3.0 以降では、インスタンス内アカウントに対して RAM ロールのマッピングを設定できます。これにより、ログインアカウントが RAM ロールを引き受けることで、他アカウントにまたがる外部システムへのアクセスが可能になります。現在、この方法は DLF 2.5 データソースおよび他の Hologres インスタンスへの RAM ロールによるアクセスのみをサポートしています。本トピックでは、`CREATE USER MAPPING` の使用方法と制限事項について説明します。
背景情報
ユーザーマッピングとは、Hologres ログインユーザーと Alibaba Cloud アカウントとの間の対応関係を定義する機能です。これにより、現在の Hologres ユーザー(BASIC ユーザーを含む)が MaxCompute、DLF、OSS、および Hologres 間のクロスデータベースクエリなど、他アカウントにまたがる外部サービスへアクセスできます。詳細については、「PostgreSQL CREATE USER MAPPING」をご参照ください。
制限事項
-
一般ユーザへの権限付与を行うには、Hologres インスタンスに対する SuperUser 権限、または外部サーバーに対する Owner 権限が必要です。外部サーバー使用権限(Foreign Server Usage 権限)を持つユーザは、自身のユーザーマッピングを作成できます。
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(すべてのユーザが公開アクセスできるようにする場合。注意して使用してください)。
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 ( -- DLF 1.0 向け [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx', oss_access_id 'LTxxxxxxxxxx', oss_access_key 'y8xxxxxxxxxxxxx'] -- 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(すべてのユーザが公開アクセスできるようにする場合。注意して使用してください)。
ext_db_name
Hologres インスタンス内で `CREATE EXTERNAL DATABASE` を用いて作成した外部データベース。このデータベースは、外部データソースからメタデータを 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
Role ARN は、ロールのグローバルリソースディスクリプタ(GRD)です。特定のロールを指定します。フォーマットは
acs:ram::<account-id>:role/<role-name>です。<role-name>の部分は、ロール名を小文字に変換します。Role ARN の確認方法については、「RAM ロールの表示」をご参照ください。
外部データベースに設定されたユーザーマッピングの照会
SELECT
datname,
usename,
eumoptions
FROM
pg_holo_external_user_mappings;
外部サーバーの設定
MaxCompute データソース
-
構文
CREATE USER MAPPING FOR "<user_name>" SERVER odps_server -- 固定サーバー OPTIONS ( access_id '<access_id>', access_key '<access_key>' ); -
パラメーター
パラメーター名
説明
user_name
権限を付与するアカウント。たとえば、他の RAM ユーザー、Hologres 内部アカウント(BASIC アカウント)、または 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 ( -- DLF 1.0 向け [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx', oss_access_id 'LTxxxxxxxxxx', oss_access_key 'y8xxxxxxxxxxxxx'] -- DLF 2.5 向け [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx'] | [rolearn 'RoleARN'] ); -
パラメーター
パラメーター名
説明
user_name
権限を付与するアカウント。たとえば、他の RAM ユーザー、Hologres 内部アカウント(BASIC アカウント)、または 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
Role ARN は、ロールのグローバルリソースディスクリプタ(GRD)です。特定のロールを指定します。フォーマットは
acs:ram::<account-id>:role/<role-name>です。<role-name>の部分は、ロール名を小文字に変換します。Role 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(すべてのユーザが公開アクセスできるようにする場合。注意して使用してください)。
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;
使用例
EXTERNAL DATABASE(推奨)
-
たとえば、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 で新しいロールを作成し、ポリシーを設定します。
-
Resource Access Management (RAM) コンソールにログインします。Role > [ロールの作成] をクリックします。信頼エンティティタイプとして [Alibaba Cloud サービス] を選択し、ロールタイプとして [サービスタイプ] を選択します。ロール名を入力します。[信頼サービスの選択] では [Interactive Analytics] を選択し、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' );