エンタープライズ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に付与するには、次の手順を実行します。
Alibaba CloudアカウントAを使用してRAMロールを作成し、ビジネスの範囲と要件に基づいてRAMロールに権限を付与し、Alibaba CloudアカウントBのRAMユーザーにRAMロールの引き受けを許可します。
手順2: Alibaba Cloudアカウント間のリソースへのアクセス
RAMロールに必要な権限が付与されると、Alibaba CloudアカウントBのRAMユーザーは、RAMロールを引き受けることでRAMロールの権限を取得できます。 RAMユーザーは、次のいずれかの方法でAlibaba CloudアカウントAのリソースにアクセスできます。
SDKを使用したリソースへのアクセス
コンソールを使用したリソースへのアクセス
API操作を呼び出してリソースにアクセスする
手順1: RAMロールを作成し、ロールに必要な権限を付与する
エンタープライズAのAlibaba Cloudアカウントを使用してRAMコンソールにログインし、エンタープライズBのAlibaba CloudアカウントのRAMロールを作成します。
詳細については、「信頼できるAlibaba CloudアカウントのRAMロールの作成」をご参照ください。
オプション: Enterprise aのAlibaba Cloudアカウントを使用して、RAMロールのカスタムポリシーを作成します。
詳細については、「カスタムポリシーの作成」をご参照ください。
ApsaraMQ for RocketMQでは、インスタンス、トピック、グループごとに権限を設定できます。 詳細については、「ApsaraMQ For RocketMQのカスタムポリシー」をご参照ください。
手順1で作成したRAMロールに権限を付与します。 新しく作成されたRAMロールには権限がありません。 システムポリシーまたはカスタムポリシーをRAMロールにアタッチする必要があります。
詳細については、「信頼できるAlibaba CloudアカウントのRAMロールの作成」をご参照ください。
Enterprise BのAlibaba Cloudアカウントを使用してRAMコンソールにログインし、RAMユーザーを作成します。
詳細については、「信頼できるAlibaba CloudアカウントのRAMロールの作成」をご参照ください。
作成した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のリソースにアクセスできます。 次の項目は、ステップを説明します。
ブラウザでRAMユーザーログインページを開きます。
[ユーザー名] フィールドにRAMユーザーのログイン名を入力し、[次へ] をクリックします。 表示されるページで、パスワードを入力します。 次に、[ログイン] をクリックします。
説明RAMユーザーのログイン名は、
<$username >@<$ AccountAlias>
または<$username >@<$ AccountAlia s>.onaliyun.com
形式です。<$AccountAlias>
は、Alibaba Cloudアカウントのエイリアスを示します。 エイリアスが指定されていない場合、Alibaba CloudアカウントのIDがデフォルトで使用されます。コンソールのホームページの右上隅にあるプロファイルアイコンの上にポインターを移動し、[IDの切り替え] をクリックします。
[ロールの切り替え] ページで、[エンタープライズエイリアス /ドメイン /アカウントUID] フィールドにエンタープライズエイリアス、ドメイン名、またはエンタープライズAのAlibaba CloudアカウントIDを入力し、[ロール名] フィールドにロール名を入力して、[送信] をクリックします。
エンタープライズAのApsaraMQ for RocketMQリソースを管理します。
API操作によるリソースへのアクセス
エンタープライズBのRAMユーザーは、ApsaraMQ for RocketMQが提供するAPI操作を呼び出して、エンタープライズAのリソースにアクセスすることもできます。 詳細については、「Make API requests」をご参照ください。