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

Intelligent Media Services:RAM ロールを作成し、STS を使用して一時的なアクセスを承認する

最終更新日:Nov 09, 2025

モバイルまたは Web クライアントでインテリジェントメディアサービス (IMS) にアクセスする場合は、セキュリティトークンサービス (STS) を使用して一時的なアクセスを承認できます。これにより、Resource Access Management (RAM) ユーザーの AccessKey ペアの漏洩によるセキュリティリスクを効果的に防止できます。このトピックでは、STS を使用して IMS への一時的なアクセスを承認する方法について説明します。

背景情報

RAM ユーザーの AccessKey ペアは、有効化されると永続的に有効になります。AccessKey ペアが漏洩すると、セキュリティリスクが発生する可能性があります。STS を使用して一時的なアクセスを承認することをお勧めします。一時的な AccessKey ペアの有効期間をカスタマイズし、複雑なポリシーを指定してさまざまな RAM ロールの権限を制限し、最小権限の原則に従ってサービスアクセスのセキュリティを向上させることができます。

ステップ 1: RAM ユーザーを作成し、RAM ユーザーに AssumeRole 操作の呼び出しを承認する

  1. Alibaba Cloud アカウントまたは管理者権限を持つ RAM ユーザーを使用して RAM コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[ID] > [ユーザー] を選択します。

  3. [ユーザー] ページで、[ユーザーの作成] をクリックします。

    image

  4. [ユーザーの作成] ページで、[ユーザーアカウント情報] セクションでユーザー情報を設定します。

    • ログイン名: ログイン名には、文字、数字、ピリオド (.)、ハイフン (-)、アンダースコア (_) を使用できます。長さは 64 文字までです。

    • 表示名: 表示名は 128 文字までです。

    • タグ: edit アイコンをクリックし、タグキーとタグ値を入力します。タグは、RAM ユーザーを分類および管理するのに役立ちます。

    説明

    [ユーザーの追加] をクリックすると、複数の RAM ユーザーを同時に作成できます。

  5. [アクセスモード] セクションで、アクセスモードを選択し、対応するパラメーターを設定します。

  6. [OK] をクリックし、セキュリティ検証を完了します。RAM ユーザーの AccessKey ペアが自動的に生成されます。

    001

  7. [操作] 列の [コピー] をクリックし、コピーしたユーザー情報 (ログイン名、ログインパスワード、AccessKey など) を保存します。

    重要

    ログインパスワードと AccessKey 情報 (AccessKey ID と AccessKey Secret) は安全に保管してください。作成ページを閉じると、この情報を表示できなくなります。

  8. [ユーザー] ページに戻り、作成した RAM ユーザーを見つけて、[操作] 列の [権限の追加] をクリックします。

  9. [権限の付与] パネルで、RAM ユーザーに権限を付与します。

    1. 権限付与の範囲を指定します。

      [リソース範囲] パラメーターを [アカウント] に設定します。IMS では、[リソース範囲] パラメーターを [リソースグループ] に設定することはできません。リソースグループの詳細については、「リソースディレクトリ、リソースグループ、タグサービスの相違点と関係」をご参照ください。

    2. [ポリシー] セクションでポリシーを選択します。

      ドロップダウンリストから [システムポリシー] を選択し、検索ボックスに AliyunSTS と入力して、[AliyunSTSAssumeRoleAccess] ポリシーを選択します。

    3. [権限の付与] をクリックします。

ステップ 2: RAM ロールを作成し、RAM ロールに IMS リソースの操作を承認する

  1. 管理者権限を持つ RAM ユーザーとして RAM コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。

  3. [ロール] ページで、[ロールの作成] をクリックします。

    image

  4. [ロールの作成] ページで、[プリンシパルタイプ] パラメーターを [クラウドアカウント] に設定し、Alibaba Cloud アカウントを指定して、[OK] をクリックします。

    image

    • 現在のアカウント: Alibaba Cloud アカウントに属する RAM ユーザーまたは RAM ロールに RAM ロールを引き受けさせたい場合は、[現在のアカウント] を選択します。

    • その他のアカウント: 別の Alibaba Cloud アカウントに属する RAM ユーザーまたは RAM ロールに RAM ロールを引き受けさせたい場合は、[その他のアカウント] を選択し、Alibaba Cloud アカウントの ID を入力します。このオプションは、異なる Alibaba Cloud アカウントに属するリソースに対する権限を付与するために提供されます。詳細については、「Alibaba Cloud アカウント間のリソースへのアクセス」をご参照ください。Alibaba Cloud アカウントの ID は、セキュリティ設定 ページで確認できます。

  5. オプション。信頼できる Alibaba Cloud アカウントに属する特定の RAM ユーザーまたは RAM ロールのみに RAM ロールを引き受けさせたい場合は、[ポリシーエディターに切り替え] をクリックし、エディターで RAM ロールの信頼ポリシーを変更します。

    エディターは、ビジュアルエディターと JSON モードをサポートしています。次の例では、ID が 100******0719 の Alibaba Cloud アカウント内の RAM ユーザー Alice のみが RAM ロールを引き受けることができます。

    • ビジュアルエディター

      [プリンシパル] 要素に RAM ユーザーを指定します。

      image

      image

    • JSON

      Principal パラメーターの RAM フィールドに RAM ユーザーを指定します。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "RAM": "acs:ram::100******0719:user/Alice"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }

  6. [権限の付与] パネルで、RAM ロールに権限を付与します。

    1. 権限付与の範囲を指定します。

      [リソース範囲] パラメーターを [アカウント] に設定します。IMS では、[リソース範囲] パラメーターを [リソースグループ] に設定することはできません。リソースグループの詳細については、「リソースディレクトリ、リソースグループ、タグサービスの相違点と関係」をご参照ください。

    2. プリンシパルを指定します。

      プリンシパルは、権限が付与される RAM ロールです。デフォルトでは、現在の RAM ロールが指定されます。別の RAM ロールを指定することもできます。

    3. [ポリシー] セクションでポリシーを選択します。

      • システムポリシーの使用

        ドロップダウンリストから [システムポリシー] を選択し、検索ボックスに AliyunICE と入力して、必要に応じてシステムポリシーを選択します。

        ポリシー

        説明

        API 操作

        AliyunICEFullAccess

        すべての IMS リソースを管理および操作する権限

        このポリシーは、IMS のすべての操作に対する権限を付与します。

        AliyunICEReadOnlyAccess

        すべての IMS リソースに対する読み取り専用権限

        このポリシーは、Get、Describe、Search、List 操作など、IMS のすべての読み取り専用操作に対する権限を付与します。

      • カスタムポリシーの使用

        ドロップダウンリストから [カスタムポリシー] を選択し、必要に応じてカスタムポリシーを選択します。利用可能なカスタムポリシーがない場合は、ポリシーを作成できます。詳細については、「カスタムポリシーの作成」またはこのトピックの「カスタムポリシーのサンプル」セクションをご参照ください。

      説明
      • 一度に最大 5 つのポリシーを RAM ユーザーにアタッチできます。RAM ユーザーに 5 つ以上のポリシーをアタッチする場合は、操作を繰り返してください。

      • リスクをコントロールするために、最小権限の原則に従うことをお勧めします。

      • IMS SDK for iOS または Android を使用する場合は、必要に応じて AliyunOSSFullAccess ポリシーまたはカスタム Object Storage Service (OSS) ポリシーを指定する必要があります。これは、SDK がファイルを OSS にアップロードする必要があるためです。

    4. [権限の付与] をクリックします。

ステップ 3: 作成した RAM ユーザーを使用して AssumeRole 操作を呼び出し、一時的な AccessKey ペアを取得する

  1. STS SDK をダウンロードして統合します。STS SDK のダウンロード方法の詳細については、「STS SDK の概要」をご参照ください。

  2. AssumeRole 操作を呼び出して、作成した RAM ロールを引き受け、STS の一時的な AccessKey ペアを取得します。

    この例では、Java のサンプルコードが提供されています。他のプログラミング言語のサンプルコードの詳細については、「SDK サンプルコード」をご参照ください。

    Java

    import com.aliyun.credentials.Client;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.http.MethodType;
    
    import com.aliyun.teaopenapi.models.Config;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
    import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
    
    /**
     * @author xxx
     * @date 2022/12/25
     */
    public class TestStsService {
    
        public static void main(String[] args) throws Exception {
            // AssumeRole 操作を呼び出せるのは RAM ユーザーのみです。
            // Alibaba Cloud アカウントの AccessKey ペアを使用して AssumeRole リクエストを開始することはできません。
            // Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対するアクセス権限を持っています。RAM ユーザーの AccessKey ペアを使用して API 操作を呼び出すか、日常の O&M を実行することをお勧めします。
            // この例では、AccessKey ID と AccessKey Secret は環境変数から取得されます。
            String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
            String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    
            // AccessKey ID と AccessKey Secret をハードコーディングするには、次のコードを使用します。ただし、プロジェクトコードに AccessKey ID と AccessKey Secret を保存しないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースのセキュリティが損なわれる可能性があります。
            // config.accessKeyId = <yourAccessKeyId>;
            // config.accessKeySecret = <yourAccessKeySecret>;
            // AssumeRole 操作のリクエストパラメーターには、RoleArn、RoleSessionName、Policy、DurationSeconds が含まれます。
            // RAM コンソールで RoleArn パラメーターの値を取得する必要があります。
            //String roleArn = "<role-arn>";
            String roleArn = "<role-arn>";
            // RoleSessionName パラメーターは、一時的なトークンのセッション名を指定します。このパラメーターを使用して、監査でユーザーを識別したり、トークンを発行するユーザーを識別したりできます。
            // ただし、RoleSessionName パラメーターの長さと命名規則に注意する必要があります。RoleSessionName パラメーターの値には、文字、数字、ハイフン (-)、アンダースコア (_) のみを含めることができ、スペースを含めることはできません。
            // 命名規則の詳細については、API リファレンスのフォーマット要件をご参照ください。
            String roleSessionName = "session-name";// カスタムセッション名を指定します。
            // ポリシーを指定します。
            String policy = "{\n" +
                    "  \"Version\": \"1\",\n" +
                    "  \"Statement\": [\n" +
                    "    {\n" +
                    "      \"Action\": \"ice:*\",\n" +
                    "      \"Resource\": \"*\",\n" +
                    "      \"Effect\": \"Allow\"\n" +
                    "    }\n" +
                    "  ]\n" +
                    "}";
            try {
                AssumeRoleResponse response = assumeRole(accessKeyId, accessKeySecret, roleArn, roleSessionName, policy);
                System.out.println("Expiration: " + response.getCredentials().getExpiration());
                System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId());
                System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());
                System.out.println("Security Token: " + response.getCredentials().getSecurityToken());
                System.out.println("RequestId: " + response.getRequestId());
    
            } catch (ClientException e) {
                System.out.println("Failed to get a token.");
                System.out.println("Error code: " + e.getErrCode());
                System.out.println("Error message: " + e.getErrMsg());
            }
        }
    
        static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy) throws ClientException {
            try {
                // デフォルトのプロファイルを構築します (パラメーターは空のままにし、リージョン ID を追加する必要はありません)
            /*
            注: SysEndpoint パラメーターを sts.aliyuncs.com に設定した場合、regionId パラメーターはオプションです。それ以外の場合は、regionId パラメーターを STS を使用するリージョンに設定する必要があります。例: cn-shanghai。
            詳細については、さまざまなリージョンの STS エンドポイントをご参照ください。
             */
                IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", accessKeyId, accessKeySecret);
                // プロファイルを使用してクライアントを構築します
                DefaultAcsClient client = new DefaultAcsClient(profile);
                // AssumeRole リクエストを作成し、リクエストパラメーターを設定します
                final AssumeRoleRequest request = new AssumeRoleRequest();
                request.setSysEndpoint("sts.aliyuncs.com");
                request.setSysMethod(MethodType.POST);
                request.setRoleArn(roleArn);
                request.setRoleSessionName(roleSessionName);
                request.setPolicy(policy);
                // リクエストを開始し、応答を取得します
                final AssumeRoleResponse response = client.getAcsResponse(request);
                return response;
            } catch (ClientException e) {
                throw e;
            }
        }
    }

リファレンス

AssumeRole