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

ApsaraVideo VOD:STS トークンの取得

最終更新日:Feb 10, 2026

セキュリティトークンサービス (STS) のトークンは、Resource Access Management (RAM) ユーザーの AccessKey ペアが漏洩した場合に発生するセキュリティリスクを軽減します。STS トークンを取得するには、まず RAM ユーザーおよび RAM ロールを作成し、それぞれに必要な権限を付与した後、RAM ユーザーの AccessKey ペアを用いて AssumeRole 操作を呼び出して RAM ロールを引き受けます。その後、STS サービスから STS トークンを取得できます。

手順 1:RAM ユーザーの作成

RAM ユーザーの作成を行い、以下の点に注意してください。

  1. ログイン名 パラメーターを vod に設定します。本トピックでは、以降のすべての例でログイン名として vod を使用します。

  2. アクセスモード パラメーターを 永続的な AccessKey を使用してアクセス に設定します。

  3. 取得した AccessKey ペア を安全に保管してください。

手順 2:RAM ユーザーに STS の AssumeRole 操作を呼び出す権限を付与

  1. RAM コンソールで、ユーザー ページに移動します。RAM ユーザー名が vod のユーザーを検索し、操作 列の 権限の付与 をクリックします。

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

    説明

    vod ユーザーに AliyunSTSAssumeRoleAccess ポリシーをアタッチします。このポリシーにより、ユーザーは STS の AssumeRole 操作を呼び出せるようになります。ポリシーを検索するには、システムポリシー を選択し、検索ボックスに AliyunSTSAssumeRoleAccess を入力します。

    截屏2025-06-03 09

    • リソース範囲 を選択します。

      • アカウントレベル:権限は現在の Alibaba Cloud アカウント全体に適用されます。

      • リソースグループレベル:権限は特定のリソースグループに適用されます。RAM ユーザーにリソースグループレベルの権限を付与する場合、ユーザーはコンソールにログイン後に、上部ナビゲーションバーでリソース範囲を該当のリソースグループに切り替える必要があります。そのうえで初めて、当該グループ内のリソースへのアクセスおよび管理が可能になります。

        説明
        1. AdministratorAccess や AliyunRAMFullAccess などの高リスクなシステムポリシーは、システムによって自動的に警告表示されます。これらのポリシーは、クラウドリソース全体に対する完全制御または Resource Access Management (RAM) の完全管理を許可することが多いです。付与には十分に注意してください

        2. リソースグループによる権限付与の例については、「リソースグループを用いて RAM ユーザーを特定の ECS インスタンスのみの管理に制限する」をご参照ください。

    • プリンシパル を選択します。

      プリンシパルとは、権限を受領する RAM ユーザーを指します。 ユーザー ページから開始した場合は、システムが自動的に現在の RAM ユーザーを選択します。一方、権限の付与 ページから開始した場合は、手動で 1 人以上の RAM ユーザーを選択します。

    • 権限ポリシー を選択します。

      • システムポリシー:検索して直接選択します。検索のヒント:検索ボックスを活用して、ポリシーを素早く見つけましょう。プロダクト名(例:ECSOSS)、権限レベル(例:ReadOnlyFullAccess)、またはポリシー名全体で検索できます。

      • カスタムポリシー:事前にカスタムポリシーを作成します。詳細については、「カスタムポリシーの作成」をご参照ください。

    • 権限の付与を確定 をクリックします。

  3. 権限付与結果を確認し、閉じる をクリックします。

手順 3:RAM ロールの作成

説明

以下の手順 5 で、ロール名 パラメーターを vodrole に設定します。本トピックでは、以降のすべての例でロール名として vodrole を使用します。

  1. Resource Access Management (RAM) コンソール に RAM 管理者としてログインします。

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

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

    image

  4. ロールの作成 ページで、信頼エンティティの種類Alibaba Cloud アカウント に設定します。次に、Alibaba Cloud アカウントを設定し、OK をクリックします。

    image

    • 現在の Alibaba Cloud アカウント:すべての RAM ユーザーおよび RAM ロールがこのロールを引き受けられるようにするには、現在の Alibaba Cloud アカウント を選択します。

    • 他の Alibaba Cloud アカウント:別の Alibaba Cloud アカウントのすべての RAM ユーザーおよび RAM ロールがこの RAM ロールを引き受けられるようにするには、他の Alibaba Cloud アカウント を選択し、そのアカウント ID を入力します。このオプションは、クロスアカウント間のリソースアクセスに使用されます。詳細については、「Alibaba Cloud アカウント間でのリソースアクセス」をご参照ください。Alibaba Cloud アカウント ID は、セキュリティ設定 ページで確認できます。

  5. (任意)信頼される Alibaba Cloud アカウント内において、特定の RAM ユーザーまたは RAM ロールのみが当該 RAM ロールを引き受けられるようにする場合は、エディターの切り替え をクリックして信頼ポリシーを編集します。

    エディターは、ビジュアルエディターとスクリプトエディターの 2 つのモードをサポートしています。以下に、現在の Alibaba Cloud アカウント(AccountID=100******0719)内の RAM ユーザー Alice のみが当該 RAM ロールを引き受けられるように設定する例を示します。

    • ビジュアルエディター

      プリンシパル セクションで、RAM ユーザー名を指定します。

      image

      image

    • スクリプトエディター

      Principal 要素の RAM フィールドに、RAM ユーザーを指定します。

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

  6. ロールの作成 ダイアログボックスで、ロール名 を入力し、OK をクリックします。

手順 4:RAM ロールに ApsaraVideo VOD の管理権限を付与

  1. RAM コンソールで、ロールページに移動します。RAM ロール名が vodrole のロールを検索し、操作 列の 権限の付与 をクリックします。

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

    説明
    • リスクを低減するため、最小権限の原則を適用してください。

    • vodrole ロールが ApsaraVideo VOD リソースにアクセス・管理する必要がある場合、システムポリシー AliyunVODFullAccess をロールにアタッチします。このポリシーにより、すべての ApsaraVideo VOD リソースに対する完全なアクセス権が付与されます。ポリシーを検索するには、システムポリシー を選択し、検索ボックスに AliyunVODFullAccess を入力します。ApsaraVideo VOD のシステムポリシーおよびその権限について詳しくは、「システムポリシー」をご参照ください。

    授权

    • リソース範囲 を選択します。

      • アカウントレベル:権限は現在の Alibaba Cloud アカウント全体に適用されます。

      • リソースグループレベル:権限は特定のリソースグループに適用されます。RAM ユーザーにリソースグループレベルの権限を付与する場合、ユーザーはコンソールにログイン後に、上部ナビゲーションバーでリソース範囲を該当のリソースグループに切り替える必要があります。そのうえで初めて、当該グループ内のリソースへのアクセスおよび管理が可能になります。

        説明
        1. AdministratorAccess や AliyunRAMFullAccess などの高リスクなシステムポリシーは、システムによって自動的に警告表示されます。これらのポリシーは、クラウドリソース全体に対する完全制御または Resource Access Management (RAM) の完全管理を許可することが多いです。付与には十分に注意してください

        2. リソースグループによる権限付与の例については、「リソースグループを用いて RAM ユーザーを特定の ECS インスタンスのみの管理に制限する」をご参照ください。

    • プリンシパル を選択します。

      プリンシパルとは、権限を受領する RAM ユーザーを指します。 ユーザー ページから開始した場合は、システムが自動的に現在の RAM ユーザーを選択します。一方、権限の付与 ページから開始した場合は、手動で 1 人以上の RAM ユーザーを選択します。

    • 権限ポリシー を選択します。

      • システムポリシー:検索して直接選択します。検索のヒント:検索ボックスを活用して、ポリシーを素早く見つけましょう。プロダクト名(例:ECSOSS)、権限レベル(例:ReadOnlyFullAccess)、またはポリシー名全体で検索できます。

      • カスタムポリシー:事前にカスタムポリシーを作成します。詳細については、「カスタムポリシーの作成」をご参照ください。

    • 権限の付与を確定 をクリックします。

    権限付与が完了すると、成功レコードが表示されます。授权成功

  3. 権限付与結果を確認し、閉じる をクリックします。

手順 5:RAM ロールの引き受けと STS トークンの取得

RAM ユーザーを使用して、STS の AssumeRole – ロールを引き受けるための一時的な資格情報を取得 操作を呼び出します。これにより、RAM ロールの STS トークンが返されます。この STS トークンは、ApsaraVideo VOD の API 操作を直接呼び出す際に使用したり、クライアントに配布して、クライアント直アップロードなどのタスクを実行させたりできます。本トピックでは Java SDK の例を提供します。他の言語の例については、「STS SDK の概要」をご参照ください。

SDK V1.0

Maven で、以下の依存関係情報を追加します。

<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>aliyun-java-sdk-sts</artifactId>
   <version>3.1.2</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.7.3</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-vod</artifactId>
  <version>2.16.32</version>
</dependency>
package pop;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;

public class TestStsService {

    public static void main(String[] args) {
        // 手順 1 で作成した RAM ユーザーの AccessKey ペア(AccessKey ID および AccessKey Secret)を環境変数から取得します。
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // AssumeRole 操作のリクエストパラメーター(RoleArn、RoleSessionName、Policy、DurationSeconds)を設定します。
        // RoleArn の値は、手順 3 に基づき RAM コンソールから取得します。
        String roleArn = "<role-arn>";
        // RoleSessionName には任意の値を設定します。RoleSessionName はロールセッションの名前を指定します。
        String roleSessionName = "session-name";
        // ポリシーをカスタマイズします。
        String policy = "{\n" +
                "  \"Version\": \"1\",\n" +
                "  \"Statement\": [\n" +
                "    {\n" +
                "      \"Action\": \"vod:*\",\n" +
                "      \"Resource\": \"*\",\n" +
                "      \"Effect\": \"Allow\"\n" +
                "    }\n" +
                "  ]\n" +
                "}";
        try {
            AssumeRoleResponse response = assumeRole(accessKeyId, accessKeySecret, roleArn, roleSessionName, policy);
            System.out.println("有効期限: " + response.getCredentials().getExpiration());
            System.out.println("Access Key ID: " + response.getCredentials().getAccessKeyId());
            System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());
            System.out.println("セキュリティトークン: " + response.getCredentials().getSecurityToken());
            System.out.println("リクエスト ID: " + response.getRequestId());

        } catch (ClientException e) {
            System.out.println("トークンの取得に失敗しました。");
            System.out.println("エラーコード: " + e.getErrCode());
            System.out.println("エラーメッセージ: " + e.getErrMsg());
        }
    }

    static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy) throws ClientException {
        try {
            // デフォルトプロファイルを構築します。regionId パラメーターは空のままにします。
            /*
            注:SysEndpoint を sts.aliyuncs.com に設定した場合、regionId パラメーターは省略可能です。それ以外の場合は、regionId をサービスのリージョン(例:cn-shanghai)に設定する必要があります。
            各 STS リージョンのエンドポイントについては、公式ドキュメントをご参照ください。
             */
            IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
            // プロファイルを使用してクライアントを構築します。
            DefaultAcsClient client = new DefaultAcsClient(profile);
            // AssumeRoleRequest を作成し、リクエストパラメーターを設定します。
            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;
        }
    }
}

SDK V2.0

Maven で、以下の依存関係情報を追加します。

<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>sts20150401</artifactId>
   <version>1.1.7</version>
</dependency>
<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>vod20170321</artifactId>
   <version>3.6.4</version>
</dependency>
import com.aliyun.sts20150401.Client;
import com.aliyun.sts20150401.models.AssumeRoleRequest;
import com.aliyun.sts20150401.models.AssumeRoleResponse;
import com.aliyun.sts20150401.models.AssumeRoleResponseBody;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

public class TestStsService {
    public static void main(String[] args) {
        // 手順 1 で作成した RAM ユーザーの AccessKey ペア(AccessKey ID および AccessKey Secret)を環境変数から取得します。
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // AssumeRole 操作のリクエストパラメーター(RoleArn、RoleSessionName、Policy、DurationSeconds)を設定します。
        // RoleArn の値は、手順 3 に基づき RAM コンソールから取得します。
        String roleArn = "<role-arn>";
        // RoleSessionName には任意の値を設定します。
        String roleSessionName = "session-name";
        // ポリシーをカスタマイズします。
        String policy = "{\n" +
                "  \"Version\": \"1\",\n" +
                "  \"Statement\": [\n" +
                "    {\n" +
                "      \"Action\": \"vod:*\",\n" +
                "      \"Resource\": \"*\",\n" +
                "      \"Effect\": \"Allow\"\n" +
                "    }\n" +
                "  ]\n" +
                "}";
        try {
            AssumeRoleResponse assumeRoleResponse = assumeRole(accessKeyId, accessKeySecret, roleArn, roleSessionName, policy);
            System.out.println("有効期限: " + assumeRoleResponse.getBody().getCredentials().getExpiration());
            System.out.println("Access Key ID: " + assumeRoleResponse.getBody().getCredentials().getAccessKeyId());
            System.out.println("Access Key Secret: " + assumeRoleResponse.getBody().getCredentials().getAccessKeySecret());
            System.out.println("セキュリティトークン: " + assumeRoleResponse.getBody().getCredentials().getSecurityToken());
            System.out.println("リクエスト ID: " + assumeRoleResponse.getRequestId());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy) throws Exception {
        Config config = new Config()
                // 環境変数から AccessKey ID を取得します。
                .setAccessKeyId(accessKeyId)
                // 環境変数から AccessKey Secret を取得します。
                .setAccessKeySecret(accessKeySecret);
        config.endpoint = "sts.cn-hangzhou.aliyuncs.com";
        Client client = new Client(config);
        AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest()
                .setRoleArn(roleArn)
                .setRoleSessionName(roleSessionName)
                .setPolicy(policy);
        RuntimeOptions runtime = new RuntimeOptions();
        return client.assumeRoleWithOptions(assumeRoleRequest, runtime);
    }
}