すべてのプロダクト
Search
ドキュメントセンター

Hologres:Hologres RAM ロール認証モード

最終更新日:May 08, 2026

このトピックでは、ロールベースのシングルサインオン (SSO) を使用して Hologres にアクセスする方法について説明します。

背景情報

Alibaba Cloud では、エンタープライズユーザーが Alibaba Cloud アカウントとパスワードを使用して Alibaba Cloud 管理コンソールにログインし、クラウドリソースを管理・利用できます。しかし、企業のセキュリティおよびコンプライアンス要件が厳格化されるにつれ、多くの組織が Alibaba Cloud へのアクセスにロールベースのシングルサインオン (SSO) を採用するようになっています。詳細については、「SAML ベースのロール SSO の概要」をご参照ください。

利用シーン

通常、エンタープライズユーザーは Alibaba Cloud アカウントとパスワードを使用して Alibaba Cloud 管理コンソールにログインし、クラウドリソースを管理・利用します。ただし、より厳格なセキュリティ要件を満たし、ID とアクセスの管理を一元化するために、多くの企業がシングルサインオン (SSO) を導入しています。SSO を使用すると、一度ログインするだけで複数の信頼済みアプリケーションシステムにアクセスできます。Hologres は現在、ロールベースの SSO をサポートしています。詳細については、「SAML ベースのロール SSO の概要」をご参照ください。この機能により、企業の ID を使用して RAM ロールを偽装し、Hologres インスタンスにアクセスできます。RAM ロールによってアクセス権限が制御されます。次の図は、呼び出しフローの例を示しています。适用场景

  1. ユーザーがブラウザを開き、ID プロバイダー (IdP) のログインページで Alibaba Cloud をターゲットサービスとして選択します。

    たとえば、企業の IdP が Microsoft Active Directory Federation Services (AD FS) の場合、ログイン URL は https://ADFSServiceName/adfs/ls/IdpInitiatedSignOn.aspx です。

    説明

    一部の IdP では、ユーザーが Alibaba Cloud を表す SSO アプリケーションを選択する前にログインする必要があります。

  2. IdP が Security Assertion Markup Language (SAML) 応答を生成し、ブラウザに返します。

  3. ブラウザが SSO サービスページにリダイレクトされ、SAML 応答を SSO サービスに転送します。

  4. SSO サービスが SAML 応答を使用して Alibaba Cloud Security Token Service (STS) から一時的なセキュリティ認証情報をリクエストし、Alibaba Cloud 管理コンソールへのログイン用 URL を生成します。

    説明

    SAML 応答に複数の RAM ロールにマッピングされる属性が含まれている場合、Alibaba Cloud にアクセスするロールを選択するようユーザーにプロンプトが表示されます。

  5. SSO サービスが URL をブラウザに返します。

  6. ブラウザがその URL にリダイレクトされ、ユーザーは指定された RAM ロールとして Alibaba Cloud 管理コンソールにログインし、Hologres インスタンスにアクセスします。

Hologres のサポート対象アクセス方法

Hologres は次の 2 つのアクセス方法をサポートしています。

  • Alibaba Cloud アカウントまたは RAM ユーザーを使用して Hologres にアクセスする。

    ご利用のアカウントとパスワードを使用して Alibaba Cloud 管理コンソールにログインし、そのアカウントで Hologres を利用できます。この場合、Alibaba Cloud アカウントは Hologres インスタンスのメンバーとなり、プロダクトの利用権限を付与されます。

  • ロールベースの SSO を使用して Hologres にアクセスする。

    また、ロールベースの SSO を使用して Alibaba Cloud にログインし(「SAML ベースのロール SSO の概要」をご参照ください)、Hologres を利用することもできます。この場合、RAM ロールが Hologres インスタンスのメンバーとなります。この RAM ロールを偽装するユーザーは、アカウントベースのメンバーと同等のプロダクト権限を持ちます。RAM ロールの詳細については、「RAM ロールの概要」をご参照ください。

Hologres では、RAM ロールと Alibaba Cloud アカウント (root ユーザーおよび RAM ユーザーを含む) は同等に扱われます。RAM ロールは標準的なログインアカウントです。スーパーユーザは、SELECT、INSERT、UPDATE などの権限を、基盤となるアカウントではなく RAM ロールに直接付与する必要があります。RAM ロールを偽装するユーザーは、付与された権限で Hologres にアクセスできます。

ロールベース SSO (STS)

Hologres へのロールベース SSO アクセスには、Alibaba Cloud Security Token Service (STS) が使用されます。STS は、Alibaba Cloud アカウントまたは RAM ユーザー向けの一時的なアクセス管理を提供するクラウドサービスです。STS を使用すると、ローカルアカウントシステムで管理されているユーザーなどに対して、カスタムの有効期間と権限を持つアクセス認証情報を発行できます。ユーザーは STS から取得した一時的なセキュリティ認証情報を使用して、直接 Hologres に接続し、許可されたリソースにアクセスできます。

STS トークンを使用することによるメリットは次のとおりです。

  • 認証情報漏洩のリスクを低減できます。ユーザーに対して一時的な認証情報のみを生成するため、長期的な AccessKey ペアを管理する必要がなくなります。

  • 柔軟なアクセス制御が可能です。一時的な認証情報は自動的に有効期限切れとなるため、手動での失効処理が不要です。

ステップ 1:RAM ロールの作成

Resource Access Management (RAM) コンソールにログインして RAM ロールを作成します。信頼できるエンティティの種類として、[Alibaba Cloud Account] または [Identity Provider] を選択できます。

RAM ユーザーによるロールの引き受け

RAM ユーザーが Alibaba Cloud 管理コンソールで ID スイッチングにより RAM ロールを偽装する必要がある場合は、Resource Access Management (RAM) コンソールにログインして RAM ロールを作成します。信頼できるエンティティとして Alibaba Cloud Account を選択します。

  1. 信頼できるエンティティの種類が Alibaba Cloud account の RAM ロールを作成します。

    1. Resource Access Management (RAM) コンソールにログインします。左側のナビゲーションウィンドウで、アイデンティティ > Roles を選択します。

    2. ロールの作成 ページで、ロールの作成 をクリックします。Select Trusted Entity では、Alibaba Cloud Account を選択します。次に、Current Alibaba Cloud account を選択し、OK をクリックします。

    3. ロールの作成 パネルで、RAM Role Name を入力し、OK をクリックします。

  2. 権限ポリシーを作成してアタッチします。

    1. Roles ページで、対象のロール名をクリックしてロール詳細ページに移動します。

    2. トラスト規則 タブをクリックします。次に、編集トラスト規則 をクリックし、ポリシーの内容を次のコードに置き換えます。

      • パラメーターの説明

        ポリシーを構成する際は、acs:ram::<account_id>:root<account_id> をご利用の Alibaba Cloud アカウント ID に置き換えてください。アカウント ID は、ユーザー情報ページで確認できます。

      • ポリシーの内容

        {
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Effect": "Allow",
                    "Principal": {
                        "RAM": [
                            "acs:ram::<account_id>:root"
                        ]
                    }
                },
                {
                    "Action": "sts:AssumeRole",
                    "Effect": "Allow",
                    "Principal": {
                        "Service": [
                            "dataworks.aliyuncs.com"
                        ]
                    }
                }
            ],
            "Version": "1"
        }
    3. OK をクリックしてポリシーの構成を完了します。

  3. RAM ユーザーを作成し、ロール偽装の権限を付与します。

    RAM ユーザーが RAM ロールを偽装できるようにするには、そのユーザーに必要な権限を付与する必要があります。

    1. Resource Access Management (RAM) コンソールにログインします。左側のナビゲーションウィンドウで、アイデンティティ > User を選択します。

    2. (オプション)既に RAM ユーザーが存在する場合は、この手順をスキップできます。ユーザーの作成 をクリックして、1 回の操作で 1 人以上の RAM ユーザーを作成します。詳細については、「RAM ユーザーの作成」をご参照ください。

    3. 対象の RAM ユーザーを見つけ、Actions 列の 権限の追加 をクリックします。

    4. 権限の追加 ページで、RAM ユーザーに AliyunSTSAssumeRoleAccess ポリシーをアタッチします。このポリシーにより、ユーザーは STS の AssumeRole API オペレーションを呼び出す権限を付与されます。设置STS权限

    5. OK をクリックします。

IdP ユーザーによるロールの引き受け

オンプレミスの IdP ユーザーとして Alibaba Cloud にログインし、RAM ロールを偽装する必要がある場合は、Resource Access Management (RAM) コンソールにログインして RAM ロールを作成します。信頼できるエンティティとして Identity Provider を選択します。

  1. 信頼できるエンティティの種類が Identity Provider の RAM ロールを作成します。

    1. Resource Access Management (RAM) コンソールにログインします。左側のナビゲーションウィンドウで、アイデンティティ > Role を選択します。

    2. Role ページで、ロールの作成 をクリックします。Select Trusted Entity では、Identity Provider を選択します。

    3. OK をクリックし、Role Name および Remarks を構成します。

    4. IdP タイプ および IdP の選択 を選択します。条件を確認した後、Complete をクリックします。ロールが作成されたことを示すメッセージが表示されます。

  2. 権限ポリシーを作成してアタッチします。

    1. Roles ページで、対象のロール名をクリックしてロール詳細ページに移動します。

    2. トラスト規則 タブをクリックします。次に、編集トラスト規則 をクリックし、ポリシーの内容を次のコードに置き換えます。

      • パラメーターの説明

        ポリシーを構成する際は、スクリプト acs:ram::Root-Account-ID:saml-provider/IDP のルートアカウント ID をご利用のアカウント ID に置き換える必要があります。ユーザー情報ページにアクセスしてアカウント ID を取得してください。

      • ポリシーの内容

        {
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Condition": {
                        "StringEquals": {
                            "saml:recipient": "https://signin.aliyun.com/saml-role/sso"
                        }
                    },
                    "Effect": "Allow",
                    "Principal": {
                        "Federated": [
                            "acs:ram::<account_id>:saml-provider/<idp_name>"
                        ]
                    }
                },
                {
                    "Action": "sts:AssumeRole",
                    "Effect": "Allow",
                    "Principal": {
                        "Service": [
                            "dataworks.aliyuncs.com"
                        ]
                    }
                }
            ],
            "Version": "1"
        }
    3. OK をクリックしてポリシーの構成を完了します。

ステップ 2:RAM ロールの追加と権限付与

Hologres を使用するには、RAM ロールに Hologres インスタンスに対する開発権限が必要です。デフォルトでは、RAM ロールには Hologres コンソールでインスタンスを表示または管理する権限がありません。先に進む前に、ルートアカウントが RAM 権限を付与する必要があります。詳細については、「RAM ユーザーへの権限付与」をご参照ください。RAM ロールを Hologres インスタンスに追加し、権限を付与するには、次のいずれかの方法を使用できます。

  1. Hologres 管理コンソールでロールに権限を付与します。

    1. 左側のナビゲーションウィンドウで、Instances をクリックします。権限を付与するインスタンスをクリックし、User Management タブで RAM ロールを見つけ、インスタンスのユーザーとして追加します。

    2. DB-level Authorization タブで、RAM ユーザーに必要な開発権限を付与します。

  2. SQL を使用してロールに権限を付与します。

    SQL ステートメントを使用して権限を付与できます。詳細については、「権限管理の概要」をご参照ください。

  3. RAM ユーザーが RAM ロールを偽装する場合、RAM ロールにはデフォルトで Hologres 管理コンソールの権限がありません。Resource Access Management (RAM) コンソールで、ルートアカウントが RAM ユーザーに AliyunRAMReadOnlyAccess 権限を付与する必要があります。これを行わないと、RAM ロールは Hologres コンソールでいかなる操作も実行できません。詳細については、「RAM ユーザーへの権限付与」をご参照ください。

ステップ 3:ログインと Hologres の使用

コンソールおよび HoloWeb ログイン

権限を付与した後、ユーザーはロールを偽装して Hologres にログインし、使用できます。

  1. Hologres 管理コンソールに RAM ロールとしてログインし、Hologres インスタンスを管理します。

  2. Hologres 管理コンソールで、左側のナビゲーションウィンドウの Go to HoloWeb をクリックして HoloWeb を開きます。その後、スキーマ設計やデータ開発を実行できます。詳細については、「HoloWeb に接続してクエリを実行」をご参照ください。

JDBC および psql クライアントログイン

Hologres V2.0 以降では、PostgreSQL プロトコルの接続オプションにセキュリティトークンを指定できます。これにより、JDBC や psql クライアントなどの PostgreSQL クライアントをセキュリティトークンとともに使用して、RAM ロールとして Hologres にログインし、アクセスできます。

Hologres にアクセスする前に、次の作業を完了していることを確認してください。

  • RAM ロールを Hologres インスタンスに追加し、権限を付与しています。詳細については、「ステップ 2:RAM ロールを Hologres インスタンスに追加し、権限を付与」をご参照ください。

  • Resource Access Management (RAM) の AssumeRole API オペレーションを呼び出して、AccessKeyId、AccessKeySecret、SecurityToken を含む一時的なセキュリティ認証情報を取得しています。詳細については、「STS SDK の例」をご参照ください。次のコードは、応答のサンプルを示しています。

    "Credentials": {
        "SecurityToken": "CAISuwJ1q6Ft5B2yu****KiAA",
        "AccessKeyId": "STS.NTKaenSkmLhG4HpM5****76UV",
        "AccessKeySecret": "6itECZnhbG2RU6ktTSBSd6JxeLHKPWyBt****SS62",
        "Expiration": "2025-02-21T03:47:07Z"
      }

その後、次の方法で Hologres に接続できます。

  • JDBC を使用して接続します。詳細については、「JDBC を使用して Hologres に接続」をご参照ください。

    • 例 1:PostgreSQL JDBC Driver の PGProperty クラスのプロパティを使用して STS 一時認証情報をロードし、本人確認を完了します。

      import org.postgresql.PGProperty;
      import java.sql.*;
      import java.io.IOException;
      import java.util.Properties;
      
      public class JdbcLinkHologres1 {
          public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
               // この例では、AccessKeyId および AccessKeySecret を環境変数に保存する方法を示しています。ビジネス要件に基づいて、設定ファイルに保存することもできます。
      	// 認証情報の漏洩を防ぐため、コード内に AccessKeyId および AccessKeySecret をハードコードしないことを強く推奨します。
              String accessKeyId = "ALIBABA_CLOUD_ACCESS_KEY_ID";
              String accessKeySecret = "ALIBABA_CLOUD_ACCESS_KEY_SECRET";
              String securityToken = "<SecurityToken>";
              String url = "jdbc:postgresql://<host>:<port>/<database>";
      
              Properties props = new Properties();
              PGProperty.USER.set(props, accessKeyId);
              PGProperty.PASSWORD.set(props, accessKeySecret);
              PGProperty.OPTIONS.set(props, "sts_token=" + securityToken);
      
              Class.forName("org.postgresql.Driver");
              Connection connection = DriverManager.getConnection(url, props);
      
              Statement statement = connection.createStatement();
              ResultSet resultSet = statement.executeQuery("SELECT * FROM tabletest");
              // resultSet を処理
              while (resultSet.next()) {
                  System.out.println("Result: " + resultSet.getInt(1));
                  System.out.println("Result: " +  resultSet.getString(2));
              }
          }
      }
    • 例 2:SecurityToken を URL エンコードし、JDBC URL に追加します。その後、ドライバークラスが Hologres 接続を取得する際に AccessKeyId および AccessKeySecret をロードして本人確認を完了します。

      import java.net.URLEncoder;
      import java.sql.*;
      import java.io.IOException;
      
      public class JdbcLinkHologres2 {
          public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
              // この例では、AccessKeyId および AccessKeySecret を環境変数に保存する方法を示しています。ビジネス要件に基づいて、設定ファイルに保存することもできます。
      	// 認証情報の漏洩を防ぐため、コード内に AccessKeyId および AccessKeySecret をハードコードしないことを強く推奨します。
              String accessKeyId = "ALIBABA_CLOUD_ACCESS_KEY_ID";
              String accessKeySecret = "ALIBABA_CLOUD_ACCESS_KEY_SECRET";
              String securityToken = "<SecurityToken>";
                          
              String url = "jdbc:postgresql://<host>:<port>/<database>";
              String urlWithOptions = url + "?options=sts_token=" + URLEncoder.encode(securityToken, "UTF-8");
      
              Class.forName("org.postgresql.Driver");
              Connection connection = DriverManager.getConnection(urlWithOptions, accessKeyId, accessKeySecret);
      
              Statement statement = connection.createStatement();
              ResultSet resultSet = statement.executeQuery("SELECT * FROM tabletest");
      
              // resultSet を処理
              while (resultSet.next()) {
                  System.out.println("Result: " + resultSet.getInt(1));
                  System.out.println("Result: " +  resultSet.getString(2));
              }
          }
      }
  • psql クライアントを使用して接続します。次のコマンドは Linux システム用です。詳細については、「psql クライアントを使用して Hologres に接続」をご参照ください。

    PGUSER=<AccessKeyId> PGPASSWORD=<AccessKeySecret> PGOPTIONS="sts_token=<SecurityToken>" psql -h <host> -p <port> -d <database>

よくある質問

RAM ロールとしてログインする際に、エラー password authentication failed for user "<AccessKeyId>" が表示された場合はどうすればよいですか?

このエラーは、AccessKeyId、AccessKeySecret、または SecurityToken が正しくないか、ログインユーザーが Hologres インスタンスに存在しないことを示しています。次の順序でトラブルシューティングを行うことを推奨します。

  1. ログインユーザーがインスタンスに存在するかどうかを確認します。存在しない場合は、RAM ロールをインスタンスに追加します。詳細については、「ステップ 2:RAM ロールを Hologres インスタンスに追加し、権限を付与」をご参照ください。

  2. SecurityToken が正しく渡されているかどうかを確認します。URL で渡す場合は、URLEncoder.encode を使用してトークンをエンコードする必要があります。

  3. AccessKeyId、AccessKeySecret、および SecurityToken が正しいかどうかを確認します。