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

ApsaraMQ for RocketMQ:RAM ロールによるクロスアカウントアクセスの委任

最終更新日:May 18, 2026

企業 A の Alibaba Cloud アカウントで Resource Access Management (RAM) ロールを作成し、そのロールに権限を付与し、企業 B の Alibaba Cloud アカウントまたは RAM ユーザーがそのロールを引き受けられるように設定します。これにより、企業 B のユーザーは企業 A の Alibaba Cloud リソースにアクセスできるようになります。

背景情報

企業 A は Message Queue for Apache RocketMQ を使用しており、特定の運用タスクを企業 B に委任したいと考えています。

要件:

  • 企業 A はリソースの所有者であり続けながら、リソースのクエリやモニタリングなどコンソールでのタスクを企業 B に委任したいと考えています。

  • 企業 A は、企業 B の従業員の入退社に伴う権限管理を避けたいと考えています。企業 B は、自社のどの RAM ユーザー (従業員またはアプリケーション) が企業 A のリソースにアクセスできるかを制御し、その具体的な権限を定義できる必要があります。

  • 企業 A は、契約終了時など、いつでも企業 B のアクセスを取り消すことができる必要があります。

ソリューション

これらの要件を満たすために、企業 A は企業 B の従業員に Message Queue for Apache RocketMQ リソースへのアクセス権限を付与します。企業 A と企業 B がそれぞれ Alibaba Cloud アカウントを所有していると仮定します。このガイドでは、クロスアカウントアクセスを設定する手順を概説します。

  1. 手順 1:RAM ロールの作成と認可

    企業 A のアカウントで RAM ロールを作成し、必要なポリシーをアタッチし、企業 B のアカウントの RAM ユーザーがそのロールを引き受けることを許可する信頼ポリシーを設定します。

  2. 手順 2:アカウント間のリソースアクセス

    RAM ロールを設定した後、企業 B のアカウントの RAM ユーザーは、そのロールを引き受けて一時的な権限を取得できます。その後、次のいずれかの方法で企業 A のアカウントのリソースにアクセスできます。

    • SDK の使用

    • コンソールの使用

    • API 呼び出しの使用

手順 1:RAM ロールの作成と認可

  1. 企業 A の Alibaba Cloud アカウントを使用して、RAM コンソールにログインし、企業 B の Alibaba Cloud アカウント用の RAM ロールを作成します。

    詳細については、「信頼できる Alibaba Cloud アカウントの RAM ロールの作成」をご参照ください。

  2. オプション: 企業 A のアカウントで、RAM ロール用のカスタムポリシーを作成します。

    詳細については、「カスタムポリシーの作成」をご参照ください。

    現在、Message Queue for Apache RocketMQ は、インスタンスレベル、トピックレベル、およびグループレベルの権限をサポートしています。詳細については、「Message Queue for Apache RocketMQ のカスタムポリシー」をご参照ください。

  3. デフォルトでは、新しい RAM ロールには権限がありません。企業 A は、システムポリシーまたはカスタムポリシーをアタッチして、ロールに権限を付与する必要があります。

    詳細については、「RAM ロールへの権限付与」をご参照ください。

  4. 企業 B の Alibaba Cloud アカウントを使用して、RAM コンソールにログインし、RAM ユーザーを作成します。

    詳細については、「RAM ユーザーの作成」をご参照ください。

  5. 企業 B のアカウントで、RAM ユーザーに AliyunSTSAssumeRoleAccess 権限を付与します。

    詳細については、「RAM ユーザーへの権限付与」をご参照ください。

    企業 B のアカウントの RAM ユーザーに AliyunSTSAssumeRoleAccess 権限を付与する必要があります。これにより、そのユーザーは企業 A のアカウントで作成された RAM ロールを引き受けることができます。

手順 2:アカウント間のリソースアクセス

  • SDK を使用したリソースアクセス

    企業 B のアカウントの RAM ユーザーは、SDK を使用して企業 A のアカウントの Message Queue for Apache RocketMQ リソースにアクセスできます。次の 2 つの設定方法のいずれかを選択してください。

    • STS トークンの設定:この方法では、RAM ユーザーの AccessKey ID、AccessKey シークレット、および Security Token Service (STS) からの一時的なセキュリティトークンを提供する必要があります。一時的なセキュリティトークンは有効期限が切れるため、更新する必要があります。一時的なセキュリティトークンの取得方法の詳細については、「AssumeRole」をご参照ください。

      重要
      • STS トークン方式は、Message Queue for Apache RocketMQ 1.7.8.Final 以降の Java SDK でのみサポートされています。

      • AccessKey ID と AccessKey シークレットを取得するには、「AccessKey ペアの作成」をご参照ください。

      例:STS トークン設定

      • Message Queue for Apache RocketMQ のクライアントを初期化する際に、取得した AccessKey ID、AccessKey シークレット、および一時的なセキュリティトークンを次のプロパティで指定してください。

        Properties properties = new Properties();
        // ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET、および ALIBABA_CLOUD_SECURITY_TOKEN の環境変数が設定されていることを確認してください。
        // STS から取得した AccessKey ID。
        properties.put(PropertyKeyConst.AccessKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        // STS から取得した AccessKey シークレット。
        properties.put(PropertyKeyConst.SecretKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // 一時的なセキュリティトークン。
        properties.put(PropertyKeyConst.SecurityToken, System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"));
        // その他のプロパティ。
        properties.put(PropertyKeyConst.NAMESRV_ADDR, "XXX");
        ......
        Producer client = ONSFactory.createProducer(properties);
        client.start();                    
      • 一時的なセキュリティトークンの有効期限が切れたら、updateCredential メソッドを呼び出して更新してください。

        Properties properties = new Properties();
        // ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET、および ALIBABA_CLOUD_SECURITY_TOKEN の環境変数が設定されていることを確認してください。
        // STS から取得した AccessKey ID。
        properties.put(PropertyKeyConst.AccessKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        // STS から取得した AccessKey シークレット。
        properties.put(PropertyKeyConst.SecretKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // 一時的なセキュリティトークン。
        properties.put(PropertyKeyConst.SecurityToken, System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"));
        client.updateCredential(properties);                    
    • ECS インスタンス RAM ロールの設定:アプリケーションが Elastic Compute Service (ECS) インスタンスで実行されている場合は、この方法を使用できます。この方法では、SDK に認証情報をハードコーディングする必要がありません。代わりに、RAM ロール名のみを指定します。ただし、まずこの RAM ロールをアプリケーションの ECS インスタンスにアタッチする必要があります。詳細については、「インスタンス RAM ロールのアタッチ」をご参照ください。

      重要

      ECS インスタンス RAM ロール方式は、Message Queue for Apache RocketMQ 1.8.7.3.Final 以降の Java SDK でのみサポートされています。

      例:ECS インスタンス RAM ロール設定

      Properties properties = new Properties();
      // 作成して ECS インスタンスにアタッチした RAM ロールの名前。
      properties.put(PropertyKeyConst.RAM_ROLE_NAME,"XXX");
  • コンソールからのリソースアクセス

    企業 B のアカウントの RAM ユーザーは、次の手順に従って、コンソールから企業 A の Message Queue for Apache RocketMQ リソースにアクセスできます。

    1. ブラウザーで RAM ユーザーログインページを開きます。

    2. [RAM ユーザーログイン] ページで、RAM ユーザーのログイン名を入力し、[次へ] をクリックしてパスワードを入力し、[ログイン] をクリックします。

      説明

      ログイン名は <$username>@<$AccountAlias> または <$username>@<$AccountAlias>.onaliyun.com の形式です。<$AccountAlias> は Alibaba Cloud アカウントのエイリアスです。エイリアスが設定されていない場合は、デフォルトで Alibaba Cloud アカウントの ID が使用されます。

    3. Alibaba Cloud コンソールにログインした後、右上のプロフィール画像にカーソルを合わせ、[ID の切り替え] をクリックします。

    4. [ロールの切り替え] ページで、企業 A のアカウントの [エンタープライズエイリアス]Default Domain、または [アカウント UID] を入力します。次に、[ロール名] を入力し、[送信] をクリックします。

    5. これで、企業 A のアカウントで Message Queue for Apache RocketMQ リソースを管理できるようになります。

  • API 呼び出しを使用したリソースアクセス

    企業 B のアカウントの RAM ユーザーは、Message Queue for Apache RocketMQ への API 呼び出しを行うことで、企業 A のアカウントのリソースにアクセスできます。API 呼び出しの方法の詳細については、「API リクエストの作成」をご参照ください。

関連情報