Alibaba Cloud アカウント、Alibaba Cloud サービス、または ID プロバイダーを信頼できるエンティティとして持つ RAM ロールに権限を付与できます。このトピックでは、Alibaba Cloud アカウントを信頼できるエンティティとして持つ RAM ロールを作成し、Serverless App Engine (SAE) リソースにアクセスするためのクロスアカウント認証を実装する方法について説明します。
シナリオ
企業 A は SAE をアクティベートしており、企業 B に一部の業務の管理を許可したいと考えています。以下の権限が付与されます:
企業 A は業務システムに集中し、SAE のリソース所有者としてのみ機能したいと考えています。企業 A は、アプリケーションの公開、アプリケーション管理、自動スケーリング、ワンクリックでのアプリケーションの開始と停止、アプリケーション監視などの一部のサービスを管理する権限を企業 B に付与したいと考えています。
企業 A は、企業 B の従業員が入社または退社するたびに権限設定を変更したくありません。企業 B は、企業 A のリソースにアクセスする権限を企業 B の RAM ユーザーにさらに割り当てることができます。企業 B は、従業員やアプリケーションのリソースに対するアクセスおよび操作権限も制御できます。
企業 A は、両社間の契約が終了した場合、いつでも企業 B から権限を取り消すことができるようにしたいと考えています。
ステップ 1: 企業 A の Alibaba Cloud アカウントで RAM ロールを作成する
企業 A と企業 B がそれぞれ Alibaba Cloud アカウントを持っていると仮定します。
企業 A の Alibaba Cloud アカウント ID は
123456789098****で、アカウントエイリアス (エンタープライズエイリアス) はcompany-aです。企業 B の Alibaba Cloud アカウント ID は
234567890987****で、アカウントエイリアス (エンタープライズエイリアス) はcompany-bです。
企業 A は、Alibaba Cloud アカウント A を使用して RAM コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[ロール] ページで、[ロールの作成] をクリックします。

[ロールの作成] ページで、関連情報を設定します。
[信頼できるエンティティタイプ] として [Alibaba Cloud アカウント] を選択し、[信頼できるエンティティ名] として [他の Alibaba Cloud アカウント] を選択し、企業 B の Alibaba Cloud アカウント B を入力します。次に、[OK] をクリックします。
[ロール名] に
sae-adminと入力し、[OK] をクリックします。重要Alibaba Cloud アカウントに属するすべての RAM ユーザーではなく、特定の RAM ユーザーに RAM ロールを偽装させたい場合は、次のいずれかの方法を使用できます:
RAM ロールの信頼ポリシーを変更します。詳細については、「例 1: RAM ロールの信頼できるエンティティを Alibaba Cloud アカウントに変更する」をご参照ください。
RAM ユーザーにアタッチされているロール偽装ポリシーを変更します。詳細については、「RAM ユーザーが偽装できる RAM ロールを指定できますか?」をご参照ください。
[基本情報] ページで、RAM ロール名、作成時間、ARN などの RAM ロールの詳細を表示できます。
RAM ロール名: sae-admin。
ARN:
acs:ram::123456789098****:role/sae-admin。信頼ポリシー:
説明このポリシーは、アカウント B に属する RAM ユーザーのみが RAM ロールを偽装できることを示します。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::234567890987****:root" ] } } ], "Version": "1" }
ステップ 2: 企業 A が RAM ロールに権限を付与する
企業 A は、Alibaba Cloud アカウント A を使用して RAM コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[ロール] ページで、管理する RAM ロールを見つけ、[操作] 列の [権限付与] をクリックします。

複数の RAM ロールを選択し、RAM ロールリストの下部にある [権限付与] をクリックして、一度に複数の RAM ロールに権限を付与することもできます。
[権限付与] パネルで、RAM ロールに権限を付与します。
リソース範囲パラメーターを設定します。
アカウント: 権限付与は現在の Alibaba Cloud アカウントで有効になります。
リソースグループ: 権限付与は特定のリソースグループで有効になります。
説明リソース範囲パラメーターにリソースグループを選択した場合、必要なクラウドサービスがリソースグループをサポートしていることを確認してください。詳細については、「リソースグループと連携するサービス」をご参照ください。
プリンシパルパラメーターを設定します。
プリンシパルは、権限を付与する RAM ロールです。現在の RAM ロールが自動的に選択されます。
ポリシーパラメーターを設定します。
ポリシーは、アクセス権限のセットです。一度に複数のポリシーを選択できます。
システムポリシー: Alibaba Cloud によって作成されるポリシー。これらのポリシーは使用できますが、変更はできません。ポリシーのバージョン更新は Alibaba Cloud によって維持されます。詳細については、「RAM と連携するサービス」をご参照ください。
説明システムは、AdministratorAccess や AliyunRAMFullAccess などのリスクの高いシステムポリシーを自動的に識別します。リスクの高いポリシーをアタッチして、不要な権限を付与しないことをお勧めします。
カスタムポリシー: ビジネス要件に基づいてカスタムポリシーを管理および更新できます。カスタムポリシーを作成、更新、削除できます。詳細については、「カスタムポリシーの作成」をご参照ください。
[権限付与] をクリックします。
[閉じる] をクリックします。
ステップ 3: 企業 B が RAM ユーザーを作成する
企業 B は、Alibaba Cloud アカウント B を使用して RAM コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[ユーザー] ページで、[ユーザーの作成] をクリックします。

[ユーザーの作成] ページで、[ユーザーアカウント情報] セクションのユーザー情報を設定します。
ログオン名: ログオン名には、文字、数字、ピリオド (.)、ハイフン (-)、アンダースコア (_) を使用できます。長さは最大 64 文字です。
表示名: 表示名は最大 128 文字です。
タグ:
アイコンをクリックし、タグキーとタグ値を入力します。タグは、RAM ユーザーを分類および管理するのに役立ちます。
説明[ユーザーの追加] をクリックすると、一度に複数の RAM ユーザーを作成できます。
[アクセスモード] セクションで、アクセスモードを選択し、対応するパラメーターを設定します。
セキュリティを強化するために、個人用とアプリケーション用に別々のユーザーを作成することをお勧めします。この分離を維持するために、各ユーザーには 1 つのアクセスモードのみを選択してください。
コンソールアクセス
個々のユーザーには、コンソールアクセスを有効にすることをお勧めします。これにより、ユーザー名とパスワードを使用して Alibaba Cloud 管理コンソールにサインインできます。次のパラメーターを設定する必要があります:
ログオンパスワード: パスワードを自動生成するか、カスタムパスワードを設定するかを選択できます。カスタムパスワードを設定する場合、パスワードの複雑さのルールに準拠する必要があります。詳細については、「RAM ユーザーのパスワードポリシーを設定する」をご参照ください。
パスワードリセットが必要: RAM ユーザーが次回のログイン時にパスワードをリセットする必要があるかどうかを選択します。
多要素認証 (MFA): RAM ユーザーに対して MFA を有効にするかどうかを選択します。MFA を有効にする場合は、MFA デバイスもバインドする必要があります。詳細については、「MFA デバイスを RAM ユーザーにバインドする」をご参照ください。
永続的な AccessKey でのアクセス
RAM ユーザーがアプリケーションを表す場合、永続的な AccessKey ペアを使用して Alibaba Cloud にプログラムでアクセスできます。このオプションを有効にすると、システムは RAM ユーザーの AccessKey ID と AccessKey Secret を自動的に作成します。詳細については、「AccessKey ペアの作成」をご参照ください。
重要AccessKey Secret は作成時に一度しか表示されず、後で取得することはできません。安全な場所に保存する必要があります。
AccessKey ペアは、プログラムによるアクセスのための長期的な認証情報です。AccessKey ペアが漏洩すると、アカウント内のすべてのリソースのセキュリティが危険にさらされます。認証情報の漏洩リスクを軽減するために、代わりにセキュリティトークンサービス (STS) トークンを使用することをお勧めします。詳細については、「アクセス認証情報を使用して OpenAPI 操作を呼び出すためのベストプラクティス」をご参照ください。
[OK] をクリックします。
ステップ 4: 企業 B が RAM ユーザーに権限を付与する
企業 B は、Alibaba Cloud アカウント B を使用して RAM コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[ユーザー] ページで、必要な RAM ユーザーを見つけ、[操作] 列の [権限の追加] をクリックします。

複数の RAM ユーザーを選択し、ページの下部にある [権限の追加] をクリックして、一度に RAM ユーザーに権限を付与することもできます。
[ポリシー] セクションで、検索ボックスに AliyunSTSAssumeRoleAccess と入力し、このポリシーを選択して右側の [選択済み] リストに追加し、[OK] をクリックします。
[閉じる] をクリックします。
ステップ 5: Alibaba Cloud アカウント間でリソースにアクセスする
Alibaba Cloud セキュリティトークンサービス (STS) を使用すると、Alibaba Cloud リソースへの一時的な認証情報を管理できます。STS を使用して、カスタムの有効期間とアクセス権限を持つ一時的なアクセストークンを RAM ユーザーや RAM ロールなどの RAM エンティティに付与できます。STS トークン所有者は、次の方法で Alibaba Cloud リソースにアクセスできます:
方法 1: コンソールを使用してリソースにアクセスする
企業 B の RAM ユーザーは、次の手順を実行してコンソールにログインし、企業 A の SAE リソースにアクセスできます。
Alibaba Cloud アカウント B の RAM ユーザーとして RAM コンソールにログインします。
詳細については、「RAM ユーザーとして Alibaba Cloud 管理コンソールにログインする」をご参照ください。
Alibaba Cloud 管理コンソールページで、右上のプロファイル画像にポインターを合わせ、[ID の切り替え] をクリックします。
[ロールの切り替え] ページで、企業 A の [アカウントエイリアス] と [ロール名] を入力し、[送信] をクリックします。
ログイン後、企業 B の RAM ユーザーは企業 A の Serverless App Engine リソースを管理できます。
方法 2: SDK を使用してリソースにアクセスする
Java SDK サンプルコードを使用してアクセス認証情報を取得します。
詳細については、「Java の例」および「AssumeRole」をご参照ください。
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.*; import com.aliyuncs.sts.model.v20150401.*; public class AssumeRole { public static void main(String[] args) { // リクエストを開始するために使用される Alibaba Cloud クライアントを構築します。 // ランタイム環境で環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。 DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); IAcsClient client = new DefaultAcsClient(profile); // リクエストを構築し、リクエストパラメーターを指定します。パラメーターの意味と設定の詳細については、API リファレンスをご参照ください。 AssumeRoleRequest request = new AssumeRoleRequest(); request.setRegionId("cn-hangzhou"); request.setRoleArn("<RoleArn>"); request.setRoleSessionName("<RoleSessionName>"); // リクエストを開始し、応答を取得します。 try { AssumeRoleResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } }説明SAE API は、HTTP 呼び出し、SDK 呼び出し、および OpenAPI Developer Portal 呼び出しをサポートしています。詳細については、「API 概要」をご参照ください。
次のサンプルコードは、期待される出力を示しています:
{ "RequestId": "964E0EC5-575B-4FF5-8FD0-D4BD8025****", "AssumedRoleUser": { "Arn": "acs:ram::*************", "AssumedRoleId": "*************" }, "Credentials": { "SecurityToken": "*************", "AccessKeyId": "STS.*************", "AccessKeySecret": "*************", "Expiration": "2021-05-28T11:23:19Z" } }返された AccessKey ペアなどの情報に基づいて、Alibaba Cloud アカウント B のコードで新しいクライアントを生成し、その RAM ユーザーが Alibaba Cloud アカウント A の中国 (杭州) リージョンにある SAE のすべての名前空間サービスを表示する権限を持つようにします。
public class CreateNamespace { public static void main(String[] args) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setMethod(MethodType.POST); request.setDomain("sae.cn-hangzhou.aliyuncs.com"); request.setVersion("2019-05-06"); request.setUriPattern("/pop/v1/paas/namespace"); request.putHeadParameter("Content-Type", "application/json"); String requestBody = "" + "{}"; request.setHttpContent(requestBody.getBytes(), "utf-8", FormatType.JSON); try { CommonResponse response = client.getCommonResponse(request); System.out.println(response.getData()); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } } }
権限の取り消し
企業 A と企業 B の協力関係が終了した場合、企業 A は Alibaba Cloud アカウント B のために作成された RAM ロールから権限を削除し、そのロールを削除するだけで済みます。そうすると、Alibaba Cloud アカウント B のすべての RAM ユーザーは、RAM ロールとして Alibaba Cloud アカウント A のリソースにアクセスする能力を失います。
RAM ロールを削除する前に、RAM ロールから権限を取り消す必要があります。詳細については、「RAM ロールから権限を取り消す」をご参照ください。
企業 A は、Alibaba Cloud アカウント A を使用して RAM コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[ロール] ページで、削除したい RAM ロールを見つけ、[操作] 列の [ロールの削除] をクリックします。
[ロールの削除] ダイアログボックスで、RAM ロールの名前を入力し、[ロールの削除] をクリックします。
ポリシーが RAM ロールにアタッチされている場合、RAM ロールを削除するとポリシーはデタッチされます。
削除に失敗した RAM ロールについては、RAM ロールリストの右上隅にある [ロールの削除] をクリックして詳細を表示できます。