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

ApsaraVideo VOD:STS トークンの取得

最終更新日:Aug 14, 2026

STS トークンを使用すると、RAM ユーザーの AccessKey ペアを公開することなく、ApsaraVideo VOD への一時的なアクセスを許可できます。 STS トークンを取得するには、RAM ユーザーと RAM ロールを作成し、両方に必要な権限を付与してから、RAM ユーザーの AccessKey ペアで AssumeRole API を呼び出して RAM ロールを引き受けます。

ステップ1:RAM ユーザーの作成

RAM ユーザーを作成し、次の点にご注意ください。

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

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

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

ステップ2:RAM ユーザーへの STS AssumeRole API 呼び出し権限の付与

  1. RAM コンソールで、[ユーザー] ページに移動します。 vod という名前の RAM ユーザーを見つけ、[操作] 列の [権限の追加] をクリックします。

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

    説明

    vod ユーザーに AliyunSTSAssumeRoleAccess ポリシーをアタッチします。 このポリシーにより、ユーザーは STS の AssumeRole API を呼び出すことができます。 ポリシーを見つけるには、[システムポリシー] を選択し、検索ボックスに AliyunSTSAssumeRoleAccess を入力します。

    • [リソーススコープ] を選択します。

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

      • [リソースグループレベル]:権限は特定のリソースグループに適用されます。 RAM ユーザーにリソースグループレベルの権限を付与した場合、ユーザーはコンソールにログイン後、上部メニューでリソーススコープをそのリソースグループに切り替える必要があります。 そうして初めて、ユーザーはそのグループ内のリソースにアクセスして管理できます。

        説明
        1. システムは、AdministratorAccess や AliyunRAMFullAccess などのリスクの高いシステムポリシーに自動的にフラグを立てます。 これらのポリシーは、多くの場合、すべてのクラウドリソースに対する完全な制御、または Resource Access Management (RAM) の完全な管理を許可します。 付与には注意が必要です。

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

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

      プリンシパルは、権限の付与対象となる RAM ユーザーです。 [ユーザー] ページから開始した場合、システムは現在の RAM ユーザーを自動的に選択します。 [権限の付与] ページから開始した場合は、1 つ以上の RAM ユーザーを手動で選択します。

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

      • システムポリシー:直接検索して選択します。 検索のヒント:検索ボックスを使用して、ポリシーをすばやく見つけることができます。 製品名 (例: ECS や OSS)、権限レベル (例: ReadOnly や FullAccess)、または完全なポリシー名で検索できます。

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

    • [権限付与の確認] をクリックします。

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

ステップ3:RAM ロールの作成

説明

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

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

  2. 左側メニューで、アイデンティティ > ロール を選択します。

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

  4. ロール作成 ページで、信頼プリンシパルタイプ を アカウント に設定し、Alibaba Cloud アカウントの詳細を指定してから、OK をクリックします。

    • 現在のアカウント:このオプションを選択すると、現在の Alibaba Cloud アカウント配下のすべての RAM ユーザーと RAM ロールが、このロールを引き受けられるようになります。現在のアカウント を選択します。

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

  5. (オプション) 特定の RAM ユーザーまたは RAM ロールにロールを制限するには、エディターを切り替え をクリックして信頼ポリシーを変更します。

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

    • ビジュアルエディター

      Principal セクションで、RAM ユーザーを追加します。

      [Cloud Account] の横にある [編集] リンクをクリックし、信頼されたアカウントの ID を入力します。

      [プリンシパルの追加] ダイアログボックスで、[Cloud Account] として [このアカウント] を、[アイデンティティタイプ] として [RAM ユーザー] を選択します。[ユーザー名] フィールドに対象のユーザー名 (例:Alice) を入力し、[OK] をクリックします。

    • JSONエディター

      Principal オブジェクトの RAM フィールドに、RAM ユーザーの完全な ARN を入力します。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "RAM": "acs:ram::100******0719:user/Alice"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
  6. ロール作成 ダイアログボックスで、ロール名 を入力し、OK をクリックします。

ステップ4:RAM ロールへの ApsaraVideo VOD 管理権限の付与

  1. RAM コンソールで、[ロール] ページに移動します。 vodrole という名前の RAM ロールを見つけ、[操作] 列の [権限の付与] をクリックします。

  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 ユーザーを手動で選択します。

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

      • システムポリシー:直接検索して選択します。 検索のヒント:検索ボックスを使用して、ポリシーをすばやく見つけることができます。 製品名 (例: ECS や OSS)、権限レベル (例: ReadOnly や FullAccess)、または完全なポリシー名で検索できます。

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

    • [権限付与の確認] をクリックします。

    権限付与が完了すると、成功の記録が表示されます。

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

ステップ5:RAM ロールの引き受けと STS トークンの取得

RAM ユーザーとして STS の AssumeRole – ロールを引き受けるための一時的な認証情報を取得する API を呼び出します。 返された 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シークレット) を環境変数から取得します。
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // AssumeRole APIのリクエストパラメーター (RoleArn、RoleSessionName、Policy、DurationSeconds) を設定します。
        // ステップ3に基づいて、RAMコンソールからRoleArn値を取得します。
        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 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 {
            // デフォルトプロファイルを作成します。 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シークレット) を環境変数から取得します。
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // AssumeRole APIのリクエストパラメーター (RoleArn、RoleSessionName、Policy、DurationSeconds) を設定します。
        // ステップ3に基づいて、RAMコンソールからRoleArn値を取得します。
        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("Expiration: " + 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("Security Token: " + assumeRoleResponse.getBody().getCredentials().getSecurityToken());
            System.out.println("RequestId: " + assumeRoleResponse.getBody().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シークレットを取得します。
                .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);
    }
}