企業 A の Alibaba Cloud アカウントを使用して Resource Access Management (RAM) ロールを作成し、このロールに権限を付与してから、企業 B がこのロールを偽装することを承認できます。これにより、企業 B の Alibaba Cloud アカウントまたは企業 B の Alibaba Cloud アカウントに属する RAM ユーザーが、企業 A の Alibaba Cloud リソースにアクセスできます。
背景情報
企業 A は ApsaraMQ for RocketMQ をアクティベートしており、企業 B にこのサービスの使用を承認したいと考えています。
説明:
企業 A はリソース所有者として機能し、自社の業務システムに集中する一方で、企業 B にはリソースのクエリやサービスのモニタリングなどのコンソール機能の使用を承認したいと考えています。
企業 A は、企業 B の従業員が入社または退社するたびに権限設定を変更する必要はありません。企業 B は、企業 A のリソースに対する権限を自社の 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 ユーザーは、ロールを偽装して Alibaba Cloud アカウント A のリソースにアクセスできます。RAM ユーザーは、次のいずれかの方法でリソースにアクセスできます。
SDK を使用してリソースにアクセスする
コンソールを使用してリソースにアクセスする
API 操作を呼び出してリソースにアクセスする
ステップ 1: RAM ロールを作成して権限を付与する
企業 A の Alibaba Cloud アカウントを使用して RAM コンソールにログインし、企業 B の Alibaba Cloud アカウント用の RAM ロールを作成します。
詳細については、「信頼できる Alibaba Cloud アカウントの RAM ロールを作成する」をご参照ください。
オプション: 企業 A の Alibaba Cloud アカウントを使用して、新しい RAM ロール用のカスタムポリシーを作成します。
詳細については、「カスタムポリシーの作成」をご参照ください。
現在、ApsaraMQ for RocketMQ は、インスタンス、Topic、およびグループレベルでの権限設定をサポートしています。詳細については、「ApsaraMQ for RocketMQ のカスタムポリシー」をご参照ください。
デフォルトでは、新しいロールには権限がありません。企業 A はロールに権限を付与する必要があります。システムポリシーまたはカスタムポリシーをアタッチできます。
詳細については、「RAM ユーザーへの権限付与」をご参照ください。
企業 B の Alibaba Cloud アカウントを使用して RAM コンソールにログインし、RAM ユーザーを作成します。
詳細については、「RAM ユーザーの作成」をご参照ください。
企業 B は、AliyunSTSAssumeRoleAccess 権限を RAM ユーザーにアタッチします。
詳細については、「RAM ユーザーへの権限付与」をご参照ください。
企業 B は、Alibaba Cloud アカウント B の RAM ユーザーに AliyunSTSAssumeRoleAccess 権限をアタッチする必要があります。これにより、RAM ユーザーは企業 A によって作成された RAM ロールを偽装できます。
ステップ 2: Alibaba Cloud アカウント間でリソースにアクセスする
SDK を使用してリソースにアクセスする
企業 B に属する RAM ユーザーは、SDK を使用して企業 A の ApsaraMQ for RocketMQ リソースにアクセスし、メッセージを送受信できます。SDK は次の 2 つの方法のいずれかで構成できます。
STS トークンの構成: セキュリティトークンサービス (STS) トークンを使用するには、SDK コードで AccessKey ID、AccessKey Secret、およびセキュリティトークンを指定します。セキュリティトークンは一時的なものであり、定期的に更新する必要があります。STS から一時的なセキュリティトークンを取得する方法については、「AssumeRole」をご参照ください。
重要このメソッドは、ApsaraMQ for RocketMQ SDK for Java 1.7.8.Final 以降でのみ使用できます。
AccessKey ID と AccessKey Secret を取得する方法については、「AccessKey の作成」をご参照ください。
STS トークン構成の例
ApsaraMQ for RocketMQ クライアントを初期化するときに、取得した AccessKey ID、AccessKey Secret、およびセキュリティトークンを次のプロパティに指定します。
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 Secret。 properties.put(PropertyKeyConst.SecretKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); // STS のセキュリティトークン。 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 Secret。 properties.put(PropertyKeyConst.SecretKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); // STS のセキュリティトークン。 properties.put(PropertyKeyConst.SecurityToken, System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")); client.updateCredential(properties);
ECS インスタンス RAM ロールの構成: ECS インスタンス RAM ロールを使用する場合、SDK で AccessKey ID、AccessKey Secret、またはセキュリティトークンを構成する必要はありません。代わりに、RAM ロールの名前を指定するだけで済みます。これにより、コードの構成が簡素化されます。ただし、まずアプリケーションがデプロイされている ECS インスタンスに RAM ロールをアタッチして、RAM ロールの権限を ECS インスタンスに付与する必要があります。詳細については、「インスタンス RAM ロールのアタッチ」をご参照ください。
重要このメソッドは、ApsaraMQ for RocketMQ SDK for Java 1.8.7.3.Final 以降でのみ使用できます。
ECS インスタンス RAM ロール構成の例
Properties properties = new Properties(); // 作成して ECS インスタンスにアタッチした RAM ロールの名前。 properties.put(PropertyKeyConst.RAM_ROLE_NAME,"XXX");
コンソールを使用してリソースにアクセスする
企業 B に属する RAM ユーザーは、次のステップに従ってコンソールにログインし、企業 A の ApsaraMQ for RocketMQ リソースにアクセスできます。
ブラウザで、RAM ユーザーログインページを開きます。
[RAM ユーザーログイン] ページで、RAM ユーザーのログイン名を入力し、[次へ] をクリックします。次に、RAM ユーザーのパスワードを入力し、[ログイン] をクリックします。
説明RAM ユーザーのログイン名は、
<$username>@<$AccountAlias>または<$username>@<$AccountAlias>.onaliyun.com形式です。<$AccountAlias>はアカウントエイリアスです。アカウントエイリアスが設定されていない場合、デフォルトで Alibaba Cloud アカウントの ID が使用されます。Alibaba Cloud 管理コンソールの右上隅で、プロファイル画像の上にマウスポインターを移動し、[ID の切り替え] をクリックします。
[ロールの切り替え] ページで、企業 A の [エンタープライズエイリアス]、[デフォルトドメイン名]、または [Alibaba Cloud アカウント UID] と、[ロール名] を入力します。次に、[送信] をクリックします。
これで、企業 A の ApsaraMQ for RocketMQ リソースを管理できるようになります。
API 操作を呼び出してリソースにアクセスする
企業 B に属する RAM ユーザーは、ApsaraMQ for RocketMQ の API 操作を呼び出して、企業 A のリソースにアクセスできます。API 操作の呼び出し方法の詳細については、「API 操作の呼び出し」をご参照ください。