クライアントからApsaraVideo VODによって割り当てられたObject Storage Service (OSS) バケットにメディアファイルをアップロードする前に、一時的なSecurity Token Service (STS) トークンを取得する必要があります。 このトピックでは、STSトークンを取得する方法について説明します。 これにより、クライアントアップロードSDKを使用してファイルをアップロードするときのアップロードインスタンスの初期化に備えます。
背景情報
クライアントのアップロードSDKは、次の権限付与方法をサポートします。
アップロードURLと資格情報を使用します。
STSトークンを使用します。
STSは、Alibaba Cloudで使用される一般的な認証方法です。 STSトークンを使用してメディアファイルをアップロードするクライアントSDKは、すべてのアップロードロジックをカプセル化します。 STSトークンを取得し、STSトークンの有効期限が切れたときに更新し、アップロード完了のコールバックを設定するための設定にのみ注目する必要があります。 アップロードURLと資格情報またはSTSトークンを使用してメディアファイルをアップロードするかどうかの詳細については、「資格情報とSTSの比較」をご参照ください。 アップロードURLと資格情報を使用してメディアファイルをアップロードする方法の詳細については、「アップロードURLと資格情報の取得」をご参照ください。
アップロードのプロセス
次の図は、STSトークンを使用してメディアファイルをアップロードする完全なプロセスを示しています。
ユーザーは、ApsaraVideo VOD SDKなどのアプリケーションサーバーに認証サービスをデプロイして、一時的なSTSトークンを取得します。
クライアントは、STSトークンを要求する要求をアプリケーションサーバーに送信します。
アプリケーションサーバーは、STSトークンを要求する要求をSTSに送信します。
STSはトークンを返します。
アプリケーションサーバーはSTSトークンをクライアントに返します。
クライアントはSTSトークンを使用してアップロードインスタンスを初期化します。
クライアントはアップロードパラメータを構築してアップロード要求を送信します。
OSSはアップロード結果を返します。
説明 事前にコールバックを設定して、アップロードイベントに関する通知を受け取ることもできます。
STSトークンの取得
STS SDKを統合し、 AssumeRoleを使用してSTSトークンを取得します。 これにより、複雑な署名計算から解放されます。 STS SDKを統合する前に、RAMユーザーを作成し、ApsaraVideo VODにアクセスする権限を持つロールをRAMユーザーに割り当てる必要があります。
RAMユーザーを作成します。 詳細については、「STSを使用した動画のアップロード」をご参照ください。
オプション。 カスタム権限付与ポリシーをRAMユーザーにアタッチします。 詳細については、「カスタムポリシーの作成」をご参照ください。
STS SDKを統合し、 AssumeRole操作を呼び出してSTSトークンを取得します。 このステップのサブステップは、サーバのプログラミング言語に基づいて変化します。
Javaのサンプルコード
STSトークンの取得方法に関するサンプルJavaコード
説明 次のサンプルコードでは、STS SDK V3.1.1を使用してSTSトークンを取得する方法を説明します。 他のバージョンのSTS SDKを統合する方法の詳細については、「概要」をご参照ください。
STS SDKを統合します。
STS SDKの依存関係を追加します。
<dependencies>
<!-- STS SDK in the earlier version -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-sts</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
STS SDKのコアライブラリを追加します。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.1</version>
</dependency>
AssumeRole操作を呼び出して、STSトークンを取得します。
コードを表示
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;
/**
* @author jack
* @date 2020/5/25
*/
public class TestStsService {
public static void main(String[] args) {
// Only a RAM user can call the AssumeRole operation.
// AccessKey pairs of Alibaba Cloud accounts cannot be used to initiate AssumeRole requests.
// Create a RAM user in the RAM console and create an AccessKey pair for the RAM user.
// Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables are configured.
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.
// You must obtain the value of RoleArn in the RAM console.
String roleArn = "acs:ram::174809843091****:role/vodrole";
// RoleSessionName specifies the session name of the role. You can specify a custom value for this parameter.
String roleSessionName = "session-name";// Specify a 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 ID of the region in which you use STS. Example: cn-shanghai.
For more information about the STS endpoints in different regions, see Endpoints.
*/
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;
}
}
パラメーター | 説明 |
RoleArn | RAMユーザーに割り当てるロールのAlibaba Cloudリソース名 (ARN) 。 RAMユーザーのロールを作成した後、RAMコンソールからロールのARNを取得できます。左側のナビゲーションウィンドウで、 を選択します。 [ロール] ページで、ロールの名前をクリックします。 [基本情報] セクションで、ARNをコピーします。 |
RoleSessionName | ロールセッションの名前。 ビジネス要件に基づいてこのパラメーターを設定します。 ほとんどの場合、このパラメーターをAPI呼び出し元のIDに設定できます。 たとえば、ユーザー名を指定できます。 ActionTrailログでは、RoleSessionNameパラメーターの値に基づいて、同じRAMロールを引き受けて操作を実行するユーザーを区別できます。 これにより、ユーザー固有の監査を実行できます。 値は2 ~ 64文字で、英数字、ピリオド (.) 、アットサイン (@) 、ハイフン (-) 、アンダースコア (_) を使用できます。 |
ポリシー | ロールが引き受けられるときに追加される権限。
説明 Policyパラメーターは、ユーザーがロールを引き受けた後の一時的なアクセス資格情報の権限を制御するために使用されます。 一時的なアクセス資格情報によって取得される最終的な権限は、ロールの権限とPolicyパラメーターで指定された権限の共通部分です。 Policyパラメーターは、柔軟性を向上させるために渡されます。 たとえば、このパラメーターを設定して、CreateUploadVideo操作のみを呼び出すことができます。
|
DurationSeconds | 一時的なアクセス資格情報の有効期間。 有効値:900 〜 3600。 単位は秒です。 |
accessKeyIdおよびaccessKeySecret | ロールを引き受けるRAMユーザーのAccessKey IDとAccessKeyシークレット。 |
STSトークンを使用したメディアファイルのアップロード
各メディアファイルにはSTSトークンが必要です。 したがって、AppServerからSTSトークンを取得し、onUploadStartedコールバックでアップロードインスタンスのSTSトークンを指定する必要があります。 具体的な設定は、クライアントによって異なります。