Alibaba Cloud アカウントを信頼する RAM ロールを作成し、Serverless App Engine (SAE) リソースへのクロスアカウントアクセスを有効にします。
ユースケース
企業 A は SAE を有効化しており、一部のビジネス運用を企業 B に委任したいと考えています。
-
企業 A は自社の業務システムに注力し、SAE リソースのオーナーとしてのみ機能し、アプリケーションのデプロイメント、管理、auto scaling、ワンクリックでの起動・停止、モニタリングなどの操作を企業 B に委任します。
-
企業 A は、企業 B の従業員が入社または退職した際に、権限管理を行う必要がありません。企業 B は、自社の RAM ユーザーによる企業 A のリソースへのアクセス(従業員やアプリケーションに対する詳細な権限を含む)を自ら管理します。
-
提携関係が終了した場合、企業 A はいつでも企業 B のアクセスを取り消すことができます。
ステップ 1:企業 A が RAM ロールを作成
企業 A および企業 B はそれぞれ Alibaba Cloud アカウント(アカウント A およびアカウント B)を保有しているものとします。
-
Alibaba Cloud アカウント A の ID は
1234************、アカウントエイリアスはcompany-aです。 -
Alibaba Cloud アカウント B の ID は
2345************、アカウントエイリアスはcompany-bです。
-
RAM コンソール に Alibaba Cloud アカウント A でログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
ロール ページで、ロール作成 をクリックします。
-
ロールの作成 ページで、ロールを設定します。
-
Trusted Entity Type を クラウドアカウント に設定します。Select Trusted Alibaba Cloud Account では、他の Alibaba Cloud アカウント を選択し、Alibaba Cloud アカウント B の ID を入力してから、OK をクリックします。
-
ロール名 に
sae-adminを入力し、OK をクリックします。重要この RAM ロールを特定の RAM ユーザーのみが偽装できるようにするには、以下のいずれかの方法を使用します。
-
RAM ロールの信頼ポリシーを変更します。詳細については、「例 1:RAM ロールの信頼できるエンティティを Alibaba Cloud アカウントに変更する」をご参照ください。
-
RAM ユーザーが偽装できるロールを指定する権限ポリシーを変更します。詳細については、「RAM ユーザーが偽装できる RAM ロールを指定する方法」をご参照ください。
-
-
-
ロールの Basic Information ページでは、RAM ロール名、作成時刻、ARN などの詳細を表示できます。
-
RAM ロール名:sae-admin
-
ARN:
acs:ram::1234************:role/sae-admin -
信頼ポリシー:
説明以下のポリシーにより、Alibaba Cloud アカウント B の RAM ユーザーがこの RAM ロールを偽装できるようになります。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::2345************:root" ] } } ], "Version": "1" }
-
ステップ 2:企業 A が RAM ロールに権限を付与
Roles ページからの操作
-
RAM コンソール に RAM 管理者としてログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
ロール ページで、対象の RAM ロールを見つけ、Actions 列の 権限の付与 をクリックします。
複数の RAM ロールに同時に権限を付与する場合は、RAM ロールを選択し、リスト下部の 権限の付与 をクリックします。
-
権限の付与 パネルで、RAM ロールに権限を付与します。
-
権限付与のスコープを選択します。
-
Alibaba Cloud Account:現在の Alibaba Cloud アカウント内のすべてのリソースに対して権限が有効になります。
-
Resource Group:指定されたリソースグループ内のリソースに対してのみ権限が有効になります。
説明リソースグループに対して付与された権限は、クラウドサービスおよびリソースタイプがリソースグループをサポートしている場合にのみ有効になります。詳細については、「リソースグループと連携するサービス」をご参照ください。
-
-
プリンシパルを選択します。
プリンシパルとは、権限を受ける RAM ロールです。システムにより、現在の RAM ロールが自動的に選択されます。
-
権限ポリシーを選択します。
権限ポリシーは、一連の権限を定義します。複数のポリシーを選択できます。
-
システムポリシー:システムポリシーは Alibaba Cloud によって作成・管理されています。使用は可能ですが、変更はできません。詳細については、「RAM と連携するサービス」トピックの「クラウドサービスとシステムポリシー」セクションをご参照ください。
説明AdministratorAccess や AliyunRAMFullAccess などの高リスクのシステムポリシーは、システムにより自動的に識別されます。必要な場合を除き、高リスクの権限を付与しないでください。
-
カスタムポリシー:カスタムポリシーはユーザー自身で作成・管理します。作成、更新、削除が可能です。カスタムポリシーの作成方法の詳細については、「カスタム権限ポリシーの作成」をご参照ください。
-
-
権限を付与 をクリックします。
-
-
閉じる をクリックします。
[付与] ページから
-
RAM コンソール に RAM 管理者としてログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
許可 ページで、権限の付与 をクリックします。

-
権限の付与 パネルで、RAM ロールに権限を付与します。
-
権限付与のスコープを選択します。
-
Account:現在の Alibaba Cloud アカウント内のすべてのリソースに対して権限が有効になります。
-
ResourceGroup:指定されたリソースグループ内のリソースに対してのみ権限が有効になります。
説明リソースグループに対して付与された権限は、クラウドサービスおよびリソースタイプがリソースグループをサポートしている場合にのみ有効になります。詳細については、「リソースグループと連携するサービス」をご参照ください。
-
-
プリンシパルを選択します。
プリンシパルとは、権限を受ける RAM ロールです。複数の RAM ロールを選択できます。
-
権限ポリシーを選択します。
権限ポリシーは、一連の権限を定義します。複数のポリシーを選択できます。
-
システムポリシー:システムポリシーは Alibaba Cloud によって作成・管理されています。使用は可能ですが、変更はできません。詳細については、「RAM と連携するサービス」トピックの「クラウドサービスとシステムポリシー」セクションをご参照ください。
説明AdministratorAccess や AliyunRAMFullAccess などの高リスクのシステムポリシーは、システムにより自動的に識別されます。必要な場合を除き、高リスクの権限を付与しないでください。
-
カスタムポリシー:カスタムポリシーはユーザー自身で作成・管理します。作成、更新、削除が可能です。カスタムポリシーの作成方法の詳細については、「カスタム権限ポリシーの作成」をご参照ください。
-
-
権限を付与 をクリックします。
-
-
閉じる をクリックします。
ステップ 3:企業 B が RAM ユーザーを作成
-
RAM コンソール に Alibaba Cloud アカウント B でログインします。
-
RAM ユーザーを作成します。詳細については、「RAM ユーザーを作成する」をご参照ください。
ステップ 4:企業 B が RAM ユーザーに権限を付与
-
RAM コンソール に Alibaba Cloud アカウント B でログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
Users ページで、対象の RAM ユーザーを見つけ、Actions 列の Add Permissions をクリックします。
複数の RAM ユーザーに同時に権限を付与する場合は、RAM ユーザーを選択し、リスト下部の Add Permissions をクリックします。
-
ポリシー セクションで、検索ボックスに AliyunSTSAssumeRoleAccess と入力し、ポリシーを選択して右側の Selected リストに追加してから、OK をクリックします。
-
Complete をクリックします。
ステップ 5:クロスアカウントリソースへのアクセス
セキュリティトークンサービス (STS) は、カスタムの有効期間と特定の権限を持つ一時的なアクセストークンを提供します。RAM ユーザーやロールなどの認可されたプリンシパルは、トークンを取得し、以下のいずれかの方法で Alibaba Cloud リソースにアクセスできます。
方法 1:コンソールの使用
企業 B の RAM ユーザーは、コンソールにログインして企業 A の SAE リソースにアクセスできます。
-
企業 B の RAM ユーザーとして RAM コンソール にログインします。
詳細については、「RAM ユーザーとして Alibaba Cloud 管理コンソールにログインする」をご参照ください。
-
コンソールの右上隅で、プロフィール画像にポインターを合わせて、Switch Role をクリックします。
-
Switch Role ページで、企業 A の Account Alias および Role Name を入力してから、Submit をクリックします。
ロールの切り替え後、企業 B の RAM ユーザーは企業 A の Serverless App Engine リソースを管理できます。
方法 2:SDK の使用
-
アクセス認証情報を取得します。この例では Java SDK を使用します。
-
実行環境で以下の環境変数を設定します。
パラメーター
値
ALIBABA_CLOUD_ACCESS_KEY_ID
企業 B の RAM ユーザーの AccessKey ID
ALIBABA_CLOUD_ACCESS_KEY_SECRET
企業 B の RAM ユーザーの AccessKey Secret
-
以下のコードを実行します。詳細については、「Java SDK の例」および「AssumeRole」をご参照ください。
package com.aliyun.sample; import com.aliyun.sts20150401.models.AssumeRoleResponse; import com.aliyun.tea.TeaException; import com.google.gson.Gson; public class Sample { /** * 説明 : * <p> * 認証情報を使用してクライアントを初期化します。 * </p> * * @return Client * * @throws Exception */ public static com.aliyun.sts20150401.Client createClient() throws Exception { com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client(); com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config().setCredential(credential); // エンドポイントの詳細については、https://api.aliyun.com/product/Sts をご参照ください。 config.endpoint = "sts.cn-hangzhou.aliyuncs.com"; return new com.aliyun.sts20150401.Client(config); } public static void main(String[] args_) throws Exception { com.aliyun.sts20150401.Client client = Sample.createClient(); com.aliyun.sts20150401.models.AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest(); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); // RoleArn の値を自分のロールの ARN に置き換え、カスタムの RoleSessionName を指定します。 assumeRoleRequest.setRoleArn("acs:ram::1234************:role/sae-admin"); assumeRoleRequest.setRoleSessionName("Alice"); try { // コードをコピーして実行する場合は、API 応答を出力します。 AssumeRoleResponse response = client.assumeRoleWithOptions(assumeRoleRequest, runtime); System.out.println(new Gson().toJson(response.body)); } catch (TeaException error) { // これはデモ用です。本番プロジェクトでは、例外を慎重に処理し、無視しないでください。 // エラーメッセージ System.out.println(error.getMessage()); // トラブルシューティング URL System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // これはデモ用です。本番プロジェクトでは、例外を慎重に処理し、無視しないでください。 // エラーメッセージ System.out.println(error.getMessage()); // トラブルシューティング URL System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } } }説明SAE API オペレーションは、HTTP リクエスト、SDK、OpenAPI Explorer を使用して呼び出すことができます。詳細については、「API 概要」をご参照ください。
期待される出力:
{ "requestId": "964E0EC5-575B-4FF5-8FD0-D4BD8025****", "assumedRoleUser": { "arn": "acs:ram::*************", "assumedRoleId": "*************" }, "credentials": { "securityToken": "*************", "accessKeyId": "STS.*************", "accessKeySecret": "*************", "expiration": "2021-05-28T11:23:19Z" } }
-
-
返されたアクセスキーとセキュリティトークンを使用して新しいクライアントを作成します。これにより、企業 B の RAM ユーザーは Alibaba Cloud アカウント A の SAE リソースを管理する権限を取得します。以下の例では、SAE の 中国 (杭州) リージョンにある名前空間を照会します。
-
コードの実行環境で以下の環境変数を設定します。
パラメーター
値
ALIBABA_CLOUD_ACCESS_KEY_ID
前のステップの応答における
credentials.accessKeyIdALIBABA_CLOUD_ACCESS_KEY_SECRET
前のステップの応答における
credentials.accessKeySecretALIBABA_CLOUD_SECURITY_TOKEN
前のステップの応答における
credentials.securityToken -
以下のコードを実行します。
package com.aliyun.sample; import com.aliyun.sae20190506.models.DescribeNamespacesResponse; import com.aliyun.tea.*; import com.google.gson.Gson; public class Sample { /** * description : * <p> * 認証情報を使用してクライアントを初期化します。 * </p> * * @return Client * * @throws Exception */ public static com.aliyun.sae20190506.Client createClient() throws Exception { com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client(); com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config().setCredential(credential); // エンドポイントの詳細については、https://api.aliyun.com/product/sae をご参照ください。 config.endpoint = "sae.cn-hangzhou.aliyuncs.com"; return new com.aliyun.sae20190506.Client(config); } public static void main(String[] args_) throws Exception { com.aliyun.sae20190506.Client client = Sample.createClient(); com.aliyun.sae20190506.models.DescribeNamespacesRequest describeNamespacesRequest = new com.aliyun.sae20190506.models.DescribeNamespacesRequest(); com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); java.util.Map<String, String> headers = new java.util.HashMap<>(); // 次のパラメーターを要件に基づいて置き換えてください。 describeNamespacesRequest.setCurrentPage(1); describeNamespacesRequest.setPageSize(10); try { DescribeNamespacesResponse response = client .describeNamespacesWithOptions(describeNamespacesRequest, headers, runtime); System.out.println(new Gson().toJson(response.body)); } catch (TeaException error) { // これはデモ用です。本番プロジェクトでは、例外を慎重に処理し、無視しないでください。 // エラーメッセージ System.out.println(error.getMessage()); // トラブルシューティング URL System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // これはデモ用です。本番プロジェクトでは、例外を慎重に処理し、無視しないでください。 // エラーメッセージ System.out.println(error.getMessage()); // トラブルシューティング URL System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } } }
-
アクセスの取り消し
企業 A と企業 B の提携関係が終了した場合、企業 A は RAM ロールから権限を削除してからロールを削除することで、アクセスを取り消すことができます。これにより、Alibaba Cloud アカウント B の RAM ユーザーがロールを偽装して Alibaba Cloud アカウント A のリソースにアクセスできなくなります。
RAM ロールを削除する前に、そのロールに付与された権限を取り消す必要があります。詳細については、「RAM ロールからの権限取り消し」をご参照ください。
-
RAM コンソール に Alibaba Cloud アカウント A でログインします。
-
左側のナビゲーションウィンドウで、 に移動します。
-
ロール ページで、削除する RAM ロールを見つけ、操作 列の ロールの削除 をクリックします。
-
ロールの削除 ダイアログボックスで、RAM ロール名を入力し、ロールの削除 をクリックします。
ロール名は大文字と小文字を区別します。入力する名前は、ロールリストに表示されている名前と完全に一致する必要があります。一致しない場合、Delete Role ボタンは無効のままです。サービスリンクロールは、
AliyunServiceRoleForSmartServiceのように camelCase 形式の名前を使用することがよくあります。エラーを回避するため、ロールリストからロール名をコピーして確認用テキストボックスに貼り付けてください。RAM ロールにポリシーがアタッチされている場合、ロールを削除すると自動的にデタッチされます。
対応するクラウドサービスで利用中のサービスリンクロールを削除しようとすると失敗します。まずクラウドサービスコンソールにアクセスしてロールへの依存関係を削除した後、再度削除を試行してください。サービスリンクロールの詳細については、「サービスリンクロール」をご参照ください。
削除リクエストを送信すると、ロールのステータスは「Deleting」に変化します。非同期の削除が完了すると、ロールはロールリストから削除されます。
削除タスクが失敗した場合は、ロールリストの右上隅にある ロール削除タスク をクリックして詳細を確認してください。