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

ApsaraVideo VOD:STSを使用した動画のアップロード

最終更新日:Oct 25, 2024

Security Token Service (STS) を使用して一時的なアクセス資格情報を生成し、その資格情報を使用してApsaraVideo VODにビデオをアップロードできます。 これにより、RAMユーザーパスワードの漏洩によるセキュリティリスクを防ぎます。 このトピックでは、STSを使用してApsaraVideo VODへの一時アクセスを許可する方法について説明します。

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

説明
  • ステップ4では、ログイン名vodに設定することを推奨します。 このトピックでは、例としてvodを使用します。

  • ステップ5では、アクセスモードOpenAPI Accessに設定することを推奨します。

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

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

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

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

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

    • 表示名: 表示名の長さは最大128文字です。

    • タグ: editアイコンをクリックして、タグキーとタグ値を入力します。 RAMユーザーに1つ以上のタグを追加できます。 これにより、タグに基づいてRAMユーザーを管理できます。

    説明

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

  5. アクセスモードセクションでアクセスモードを選択し、必要なパラメーターを設定します。

    Alibaba Cloudアカウントのセキュリティを確保するため、RAMユーザーには1つのアクセスモードのみを選択することを推奨します。 これにより、個人のRAMユーザーはプログラムのRAMユーザーから分離されます。

    • コンソールアクセス

      RAMユーザーが個人を表す場合は、RAMユーザーに対してコンソールアクセスを選択することを推奨します。 これにより、RAMユーザーはユーザー名とパスワードを使用してAlibaba Cloudにアクセスできます。 コンソールアクセスを選択した場合、次のパラメーターを設定する必要があります。

      • コンソールパスワードの設定: デフォルトパスワードの自動再生成またはカスタムパスワードのリセットを選択できます。 [カスタムパスワードのリセット] を選択した場合、パスワードを指定する必要があります。 パスワードは複雑さの要件を満たす必要があります。 詳細については、「RAM ユーザーのパスワードポリシーの設定」をご参照ください。

      • パスワードリセット: RAMユーザーが次回のログイン時にパスワードをリセットする必要があるかどうかを指定します。

      • MAFを有効にする: RAMユーザーの多要素認証 (MFA) を有効にするかどうかを指定します。 MFAを有効にした後、MFAデバイスをRAMユーザーにバインドするか、RAMユーザーがMFAデバイスをバインドできるようにする必要があります。 詳細については、「RAM ユーザーの MFA デバイスの有効化」をご参照ください。

    • OpenAPIアクセス

      RAMユーザーがプログラムを表している場合は、RAMユーザーにOpenAPI Accessを選択することを推奨します。 これにより、RAMユーザーはAccessKeyペアを使用してAlibaba Cloudにアクセスできます。 OpenAPI Accessを選択すると、RAMユーザーのAccessKey IDとAccessKeyシークレットが自動的に生成されます。 詳細については、「AccessKeyペアの取得」をご参照ください。

      重要

      RAMユーザーのAccessKeyシークレットは、[AccessKeyの作成] をクリックした後にのみ表示されます。 その後の操作でAccessKeyシークレットを照会することはできません。 したがって、AccessKeyシークレットをバックアップする必要があります。

  6. OKをクリックします。

  7. プロンプトに従って完全なセキュリティ検証。

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

  1. RAMコンソールにログインします。 左側のナビゲーションウィンドウで、[アイデンティティ]> [ユーザー] を選択します。 [ユーザー] ページで、vodという名前のRAMユーザーを見つけ、[操作] 列の [権限付与] をクリックします。

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

    説明

    AliyunSTSAssumeRoleAccessポリシーをvodユーザーにアタッチします。 これにより、ユーザーはAssumeRole操作を呼び出すことができます。 システムポリシーを検索するには、検索ボックスにAliyunSTSAssumeRoleAccessと入力します。

    选择策略

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

      • アカウント: 権限付与は、現在のAlibaba Cloudアカウントで有効になります。

      • ResourceGroup: 特定のリソースグループに対して権限付与が有効になります。

        重要

        [リソーススコープ] パラメーターで [リソースグループ] を選択した場合、必要なクラウドサービスがリソースグループをサポートしていることを確認します。 詳細については、「リソースグループで動作するサービス」をご参照ください。 リソースグループに権限を付与する方法の詳細については、「リソースグループを使用した ECS インスタンスの管理」をご参照ください。

    2. Principalパラメーターを設定します。

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

    3. Policyパラメーターを設定します。

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

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

        説明

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

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

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

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

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

説明

手順5で説明したロール名vodroleに設定することを推奨します。 このトピックでは、例としてvodroleを使用します。

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

  2. 左側のナビゲーションウィンドウで、アイデンティティ > ロールを選択します。

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

  4. ロールの作成ページで、[ロールタイプの選択] セクションのAlibaba Cloudアカウントを選択して、次へをクリックします。

  5. RAMロールのパラメーターを設定します。

    1. RAMロール名を指定します。

    2. を指定します。

    3. [信頼できるAlibaba Cloudアカウントの選択] セクションで、現在のAlibaba Cloudアカウントまたはその他のAlibaba Cloudアカウントを選択します。

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

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

        Alibaba CloudアカウントのIDは、 [セキュリティ設定] ページで確認できます。

      重要

      Alibaba Cloudアカウントに属するすべてのRAMユーザーではなく、特定のRAMユーザーにRAMロールを引き受けたい場合は、次のいずれかの方法を使用できます。

  6. [OK] をクリックします。

  7. 閉じるをクリックします。

手順4: ApsaraVideo VODへのアクセス権限をRAMロールに付与する

  1. RAMコンソールにログインします。 左側のナビゲーションウィンドウで、[アイデンティティ]> [ロール] を選択します。 [ロール] ページで、vodroleという名前のRAMロールを見つけ、[操作] 列の [権限付与] をクリックします。

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

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

    • vodroleロールでApsaraVideo VODのリソースにアクセスして管理する場合は、AliyunVODFullAccessポリシーをvodroleロールにアタッチすることを推奨します。 検索ボックスにAliyunVODFullAccessと入力して、ポリシーを検索できます。 ApsaraVideo VODのシステムポリシーと権限の詳細については、「システムポリシー」をご参照ください。

    授权

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

      • アカウント: 権限付与は、現在のAlibaba Cloudアカウントで有効になります。

      • ResourceGroup: 特定のリソースグループに対して権限付与が有効になります。

        重要

        [リソーススコープ] パラメーターで [リソースグループ] を選択した場合、必要なクラウドサービスがリソースグループをサポートしていることを確認します。 詳細については、「リソースグループで動作するサービス」をご参照ください。 リソースグループに権限を付与する方法の詳細については、「リソースグループを使用した ECS インスタンスの管理」をご参照ください。

    2. Principalパラメーターを設定します。

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

    3. Policyパラメーターを設定します。

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

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

        説明

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

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

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

    ロールに権限を付与すると、成功した権限付与レコードが生成されます。授权成功

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

ステップ5: STSを使用してApsaraVideo VODにアクセスする

説明

このセクションでは、API操作を呼び出してRAMロールを引き受け、STSトークンを使用してApsaraVideo VODにアクセスする方法について説明します。

作成したRAMユーザーを使用してAssumeRole操作を呼び出し、STSトークンを取得します。 次に、STSトークンを使用してApsaraVideo VODにアクセスします。

次の内容は、STSトークンを取得するためのJavaサンプルコードです。 STS SDKとサンプルコードを他の言語で統合する方法の詳細については、「概要」をご参照ください。

サンプルコードin Java

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;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoRequest;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse;

/**
 * @author jack
 * @date 2020/5/25
 */
public class TestStsService {

    public static void main(String[] args) {
        // Obtain the AccessKey pair (AccessKey ID and AccessKey secret) that is generated in Step 1 from the environment variables. 
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // Request parameters for the AssumeRole operation include RoleArn, RoleSessionName, Policy, and DurationSeconds.
        // Obtain RoleArn in the RAM console in Step 3.
        String roleArn = "<role-arn>";
        // RoleSessionName specifies the session name of the role. You can specify a custom value for this parameter.
        String roleSessionName = "session-name";
        // Specify a 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());

            createUploadVideo(response.getCredentials().getAccessKeyId(), response.getCredentials().getAccessKeySecret(), response.getCredentials().getSecurityToken());
        } 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 {
            // Construct a default profile. Leave the parameters empty. The regionId parameter is not required.
            /*
            Note: If you set SysEndpoint to sts.aliyuncs.com, the regionId parameter is optional. Otherwise, you must set the regionId parameter to the region in which you use STS. Example: cn-shanghai.
            For more information, see the STS endpoints in different regions. 
             */
            IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
            // Use the profile to construct a client.
            DefaultAcsClient client = new DefaultAcsClient(profile);
            // Create an AssumeRole request and configure the request parameters.
            final AssumeRoleRequest request = new AssumeRoleRequest();
            request.setSysEndpoint("sts.aliyuncs.com");
            request.setSysMethod(MethodType.POST);
            request.setRoleArn(roleArn);
            request.setRoleSessionName(roleSessionName);
            request.setPolicy(policy);
            // Initiate the request and obtain the response.
            final AssumeRoleResponse response = client.getAcsResponse(request);
            return response;
        } catch (ClientException e) {
            throw e;
        }
    }

    static void createUploadVideo(String accessKeyId, String accessKeySecret, String token) {
        // Specify the region of ApsaraVideo VOD. For example, if the service region is Shanghai, set regionId to cn-shanghai.
        String regionId = "cn-shanghai";
        IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);

        CreateUploadVideoRequest request = new CreateUploadVideoRequest();
        request.setSecurityToken(token);
        request.setTitle("t5");
        request.setFileName("D:\\TestVideo\\t4.mp4");
        request.setFileSize(10240L);

        try {
            CreateUploadVideoResponse response = client.getAcsResponse(request);
            System.out.println("CreateUploadVideoRequest, " + request.getUrl());
            System.out.println("CreateUploadVideoRequest, requestId:" + response.getRequestId());
            System.out.println("UploadAddress, " + response.getUploadAddress());
            System.out.println("UploadAuth, " + response.getUploadAuth());
            System.out.println("VideoId, " + response.getVideoId());
        } catch (ClientException e) {
            System.out.println("action, error:" + e);
            e.printStackTrace();
        }
    }
}