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

ApsaraVideo VOD:STS トークンの取得

最終更新日:Jun 04, 2025

Security Token Service (STS) トークンは、Resource Access Management (RAM) ユーザーの AccessKey ペアの漏洩によるセキュリティリスクを効果的に防ぐことができます。 STS からトークンを取得するには、RAM ユーザーと RAM ロールを作成し、必要な権限を付与してから、RAM ユーザーの AccessKey ペアを認証情報として使用して AssumeRole 操作を呼び出し、RAM ロールをアシュームする必要があります。 このトピックでは、STS トークンを取得する方法について説明します。

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

RAM ユーザーを作成します。 詳細については、「RAM ユーザーの作成」をご参照ください。 次の構成に注意してください。

  1. 推奨。 [ログイン名] パラメーターを vod に設定します。 ログイン名 vod は、このトピックの後続の説明で例として使用されます。

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

  3. 取得した AccessKey ペア は機密にしてください。

ステップ 2:RAM ユーザーに STS の AssumeRole 操作を呼び出す権限を付与する

  1. RAM コンソールの [ユーザー] ページで、ログイン名が vod の RAM ユーザーを見つけ、[権限の追加] 列の [アクション] をクリックします。

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

    説明

    必要な権限を付与するには、AliyunSTSAssumeRoleAccess ポリシーを RAM ユーザーにアタッチします。 このポリシーにより、RAM ユーザー vod は STS の AssumeRole 操作を呼び出すことができます。 ポリシーを検索するには、ドロップダウンリストから [システムポリシー] を選択し、検索ボックスに AliyunSTSAssumeRoleAccess と入力します。

    截屏2025-06-03 09

    1. [リソーススコープ] パラメーターを構成します。

    2. プリンシパルパラメーターを構成します。

      プリンシパルとは、権限を付与する RAM ユーザーのことです。 現在の RAM ユーザーが自動的に選択されます。

    3. ポリシーパラメーターを構成します。

      ポリシーには、一連の権限が含まれています。 ポリシーは、システムポリシーとカスタムポリシーに分類できます。 一度に複数のポリシーを選択できます。

      • システムポリシー:Alibaba Cloud によって作成されたポリシー。 これらのポリシーは使用できますが、変更することはできません。 ポリシーのバージョン更新は Alibaba Cloud によって管理されています。 詳細については、「RAM で動作するサービス」をご参照ください。

        説明

        システムは、AdministratorAccess や AliyunRAMFullAccess などの高リスクのシステムポリシーを自動的に識別します。 高リスクのポリシーをアタッチして不要な権限を付与しないことをお勧めします。

      • カスタムポリシー:ビジネス要件に基づいてカスタムポリシーを管理および更新できます。 カスタムポリシーの作成、更新、削除ができます。 詳細については、「カスタムポリシーの作成」をご参照ください。

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

  3. [閉じる] をクリックします。

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

説明

サブステップ 7 では、[ロール名] パラメーターを vodrole に設定することをお勧めします。 ロール名 vodrole は、このトピックの後続の説明で例として使用されます。

  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 アカウントに属するリソースに権限を付与するために提供されています。 詳細については、「RAM ロールを使用して 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. [ロールの作成] ダイアログボックスで、[ロール名] パラメーターを構成し、[OK] をクリックします。

ステップ 4:RAM ロールに ApsaraVideo VOD を管理する権限を付与する

  1. RAM コンソールの [ロール] ページで、作成した RAM ロール vodrole を見つけ、[権限の付与] 列の [アクション] をクリックします。

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

    説明
    • セキュリティを向上させるために、RAM ロールには最小限の必要な権限のみを付与することをお勧めします。

    • RAM ロール vodrole に ApsaraVideo VOD リソースへのアクセスと管理を許可する場合は、システムポリシー AliyunVODFullAccess を RAM ロールにアタッチすることをお勧めします。 このポリシーにより、RAM ロール vodrole はすべてのアサパラビデオ VOD リソースを管理できます。 システムポリシーを検索するには、ドロップダウンリストから [システムポリシー] を選択し、検索ボックスに AliyunVODFullAccess と入力します。 ApsaraVideo VOD システムポリシーの定義と権限の詳細については、「システムポリシー」をご参照ください。

    授权

    1. [リソーススコープ] パラメーターを構成します。

    2. プリンシパルパラメーターを構成します。

      プリンシパルとは、権限を付与する RAM ユーザーのことです。 現在の RAM ユーザーが自動的に選択されます。

    3. ポリシーパラメーターを構成します。

      ポリシーには、一連の権限が含まれています。 ポリシーは、システムポリシーとカスタムポリシーに分類できます。 一度に複数のポリシーを選択できます。

      • システムポリシー:Alibaba Cloud によって作成されたポリシー。 これらのポリシーは使用できますが、変更することはできません。 ポリシーのバージョン更新は Alibaba Cloud によって管理されています。 詳細については、「RAM で動作するサービス」をご参照ください。

        説明

        システムは、AdministratorAccess や AliyunRAMFullAccess などの高リスクのシステムポリシーを自動的に識別します。 高リスクのポリシーをアタッチして不要な権限を付与しないことをお勧めします。

      • カスタムポリシー:ビジネス要件に基づいてカスタムポリシーを管理および更新できます。 カスタムポリシーの作成、更新、削除ができます。 詳細については、「カスタムポリシーの作成」をご参照ください。

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

    承認が完了すると、承認が成功したことを示すレコードが生成されます。授权成功

  3. [閉じる] をクリックします。

ステップ 5:RAM ロールをアシュームし、STS トークンを取得する

RAM ユーザーを使用して STS の AssumeRole 操作を呼び出し、RAM ロールの STS トークンを取得します。 この操作では、ロールをアシュームするための一時的な ID 認証情報を取得します。 STS トークンを直接使用して ApsaraVideo VOD API 操作にアクセスしたり、STS トークンをクライアントに配布して、クライアントの直接アップロードなどの操作を実行したりできます。 この例では、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 で生成された AccessKey ペア (AccessKey ID と AccessKey シークレット) を環境変数から取得します。
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // AssumeRole 操作のリクエストパラメーター (RoleArn、RoleSessionName、Policy、DurationSeconds など) を構成します。
        // ステップ 3 に基づいて、RAM コンソールから RoleArn の値を取得します。
        String roleArn = "<role-arn>";
        // RoleSessionName にカスタム値を指定します。 RoleSessionName はロールセッションの名前を指定します。
        String roleSessionName = "session-name";
        // Policy にカスタム値を指定します。
        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("トークンの取得に失敗しました。");
            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);
            // 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;
        }
    }
}

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 で生成された AccessKey ペア (AccessKey ID と AccessKey シークレット) を環境変数から取得します。
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // AssumeRole 操作のリクエストパラメーター (RoleArn、RoleSessionName、Policy、DurationSeconds など) を構成します。
        // ステップ 3 に基づいて、RAM コンソールから RoleArn の値を取得します。
        String roleArn = "<role-arn>";
        // RoleSessionName にカスタム値を指定します。
        String roleSessionName = "session-name";
        // Policy にカスタム値を指定します。
        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) {
            System.out.println("トークンの取得に失敗しました。");
            System.out.println("エラーメッセージ: " + e.getMessage());
        }
    }

    public static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy) throws Exception {
        Config config = new Config()
                .setAccessKeyId(accessKeyId)
                .setAccessKeySecret(accessKeySecret);
        // エンドポイントを sts.aliyuncs.com に設定します。
        config.endpoint = "sts.aliyuncs.com";
        Client client = new Client(config);
        AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest()
                .setRoleArn(roleArn)
                .setRoleSessionName(roleSessionName)
                .setPolicy(policy);
        RuntimeOptions runtime = new RuntimeOptions();
        try {
            // リクエストを開始し、レスポンスを取得します。
            AssumeRoleResponse response = client.assumeRoleWithOptions(assumeRoleRequest, runtime);
            return response;
        } catch (Exception e) {
            throw e;
        }
    }
}