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

ApsaraMQ for RocketMQ:RAMロールを使用してAlibaba Cloudアカウント全体に権限を付与する

最終更新日:Jul 09, 2024

エンタープライズAのAlibaba Cloudアカウントを使用して、リソースアクセス管理 (RAM) ロールを作成し、このロールに権限を付与してから、このロールをエンタープライズBに割り当てることができます。これにより、エンタープライズBのAlibaba CloudアカウントまたはエンタープライズBのAlibaba Cloudアカウントに属するRAMユーザーは、エンタープライズaのAlibaba Cloudリソースにアクセスできます。

背景情報

エンタープライズAはApsaraMQ for RocketMQを有効化しており、サービスの使用をエンタープライズBに許可します。

エンタープライズAには次の要件があります。

  • 企業Aは、ビジネスシステムに集中し、企業Aが所有するリソースに対して、メッセージのサブスクライブやメッセージの発行などの操作を企業Bに許可したいと考えています。

  • 従業員がエンタープライズBに参加または離脱するたびに、エンタープライズAは権限設定を変更する必要はありません。 エンタープライズBは、詳細なアクセス制御のために、エンタープライズAのリソースに対する権限をエンタープライズBのRAMユーザーに付与できます。 RAMユーザーは、従業員またはアプリケーションです。

  • エンタープライズAとエンタープライズBの間の契約が終了した場合、エンタープライズAはエンタープライズBからの権限を取り消すことができます。

解決策

この例では、エンタープライズAは、エンタープライズBの従業員に、エンタープライズAのApsaraMQ for RocketMQリソースを管理する権限を付与する必要があります。エンタープライズAにはAlibaba CloudアカウントAがあり、エンタープライズBにはAlibaba CloudアカウントBがあります。エンタープライズAのリソースに対する権限をエンタープライズBに付与するには、次の手順を実行します。

  1. 手順1: RAMロールを作成し、ロールに必要な権限を付与

    Alibaba CloudアカウントAを使用してRAMロールを作成し、ビジネスの範囲と要件に基づいてRAMロールに権限を付与し、Alibaba CloudアカウントBのRAMユーザーにRAMロールの引き受けを許可します。

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

    RAMロールに必要な権限が付与されると、Alibaba CloudアカウントBのRAMユーザーは、RAMロールを引き受けることでRAMロールの権限を取得できます。 RAMユーザーは、次のいずれかの方法でAlibaba CloudアカウントAのリソースにアクセスできます。

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

    • コンソールを使用したリソースへのアクセス

    • API操作を呼び出してリソースにアクセスする

手順1: RAMロールを作成し、ロールに必要な権限を付与する

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

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

  2. オプション: Enterprise aのAlibaba Cloudアカウントを使用して、RAMロールのカスタムポリシーを作成します。

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

    ApsaraMQ for RocketMQでは、インスタンス、トピック、グループごとに権限を設定できます。 詳細については、「ApsaraMQ For RocketMQのカスタムポリシー」をご参照ください。

  3. 手順1で作成したRAMロールに権限を付与します。 新しく作成されたRAMロールには権限がありません。 システムポリシーまたはカスタムポリシーをRAMロールにアタッチする必要があります。

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

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

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

  5. 作成したRAMユーザーにAliyunSTSAssumeRoleAccess権限ポリシーをアタッチします。

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

    エンタープライズBは、Alibaba CloudアカウントBのRAMユーザーにAliyunSTSAssumeRoleAccess権限ポリシーをアタッチする必要があります。これにより、RAMユーザーはエンタープライズAによって作成されたRAMロールを引き受けることができます。

ステップ2: Alibaba Cloudアカウント間でリソースにアクセスする

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

    Enterprise BのRAMユーザーは、Enterprise AのApsaraMQ for RocketMQリソースにアクセスして、SDKを使用してメッセージを送受信できます。 SDKを使用してリソースにアクセスするには、次のいずれかの方法でSDKコードを設定します。

    • Security token Service (STS) によって生成されるトークン: STSによって生成されるトークンを使用してSDKコードを構成する場合、RAMユーザーのAccessKeyペアと、RAMユーザーに対してSTSによって生成される一時的なセキュリティトークンを提供する必要があります。 一時的なセキュリティトークンは定期的に更新する必要があります。 STSを使用して一時的なセキュリティトークンを取得する方法については、「AssumeRole」をご参照ください。

      重要
      • この方法は、Java 1.7.8.Final以降のApsaraMQ for RocketMQ SDKにのみ適しています。

      • AccessKeyペアの取得方法については、「AccessKeyペアの作成」をご参照ください。

      サンプルコード

      • STSによって生成されたトークンを使用してSDKコードを設定するには、ApsaraMQ for RocketMQクライアントを初期化するときに次のコードで取得したAccessKeyペアと一時的なセキュリティトークンを指定するだけで済みます。

        Properties properties = new Properties();
        // Make sure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, and ALIBABA_CLOUD_SECURITY_TOKEN are configured. 
        // The AccessKey ID of the RAM user. 
        properties.put(PropertyKeyConst.AccessKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        // The AccessKey secret of the RAM user. 
        properties.put(PropertyKeyConst.SecretKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // The security token of the RAM user. 
        properties.put(PropertyKeyConst.SecurityToken, System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"));
        // Other attributes. 
        properties.put(PropertyKeyConst.NAMESRV_ADDR, "XXX");
        ......
        Producer client = ONSFactory.createProducer(properties);
        client.start();                    
      • セキュリティトークンの有効期限が切れた場合は、updateCredentialメソッドを呼び出して、トークンを動的に更新します。

        Properties properties = new Properties();
        // Make sure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, and ALIBABA_CLOUD_SECURITY_TOKEN are configured. 
        // The AccessKey ID of the RAM user. 
        properties.put(PropertyKeyConst.AccessKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
        // The AccessKey secret of the RAM user. 
        properties.put(PropertyKeyConst.SecretKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // The security token of the RAM user. 
        properties.put(PropertyKeyConst.SecurityToken, System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"));
        client.updateCredential(properties);                    
    • Elastic Compute Service (ECS) にアタッチされているRAMロール: RAMロールがECSインスタンスにアタッチされている場合、SDKコードでRAMユーザーのAccessKeyペアまたはセキュリティトークンを指定する必要はありません。 RAMロールの名前を入力するだけです。 これにより、コード構成が簡単になります。 ただし、RAMロールの権限をECSインスタンスに付与するには、アプリケーションがデプロイされているECSインスタンスにRAMロールをアタッチする必要があります。 詳細については、「ECSインスタンスへのインスタンスRAMロールのアタッチ」をご参照ください。

      重要

      この方法は、Java 1.8.7.3.Final以降のApsaraMQ for RocketMQ SDKに適しています。

      サンプルコード

      Properties properties = new Properties();
      // The name of the RAM role that you created and attached to the ECS instance. 
      properties.put(PropertyKeyConst.RAM_ROLE_NAME,"XXX");
  • コンソールを使用したリソースへのアクセス

    Enterprise BのRAMユーザーは、ApsaraMQ for RocketMQコンソールを使用して、Enterprise Aのリソースにアクセスできます。 次の項目は、ステップを説明します。

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

    2. [ユーザー名] フィールドにRAMユーザーのログイン名を入力し、[次へ] をクリックします。 表示されるページで、パスワードを入力します。 次に、[ログイン] をクリックします。

      説明

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

    3. コンソールのホームページの右上隅にあるプロファイルアイコンの上にポインターを移動し、[IDの切り替え] をクリックします。

    4. [ロールの切り替え] ページで、[エンタープライズエイリアス /ドメイン /アカウントUID] フィールドにエンタープライズエイリアス、ドメイン名、またはエンタープライズAのAlibaba CloudアカウントIDを入力し、[ロール名] フィールドにロール名を入力して、[送信] をクリックします。

    5. エンタープライズAのApsaraMQ for RocketMQリソースを管理します。

  • API操作によるリソースへのアクセス

    エンタープライズBのRAMユーザーは、ApsaraMQ for RocketMQが提供するAPI操作を呼び出して、エンタープライズAのリソースにアクセスすることもできます。 詳細については、「Make API requests」をご参照ください。

関連ドキュメント