ApsaraVideo Media Processing (MPS) の暗号化された動画は、メディア ID を使用して再生する必要があります。これには、アクセスコントロールのために STS トークンが必要です。STS トークンは、プライマリアカウントの認証情報を公開することなく、一時的で範囲を限定したアクセスを許可します。本トピックでは、RAM STS SDK (Java) を使用して STS トークンをリクエストする方法について説明します。
前提条件
開始する前に、次のものが揃っていることを確認してください。
RAM STS SDK がインストール済みであること。セットアップ手順については、「Javaの例」をご参照ください。その他の言語については、「STS SDKの概要」をご参照ください。
STS トークンが引き受ける Resource Access Management (RAM) ロールの
roleArnが取得済みであること。ARN を取得するには、RAM コンソールにログインし、 を選択して、対象の [ロール] をクリックし、[ARN] フィールドの値をコピーします。
STS トークンのリクエスト
STS トークンは、一時的な認証情報です。アプリケーションが assumeRole を呼び出すと、設定された期間が経過すると有効期限が切れる一時的なアクセスキーペアとセキュリティトークンを受け取ります。このアプローチにより、クライアント側のコードに長期的な認証情報を埋め込むことを回避できます。
-
STS SDK の依存関係を
pom.xmlファイルに追加します。<repositories> <repository> <id>sonatype-nexus-staging</id> <name>Sonatype Nexus Staging</name> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <dependencies> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-sts</artifactId> <version>2.1.6</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>2.2.0</version> </dependency> </dependencies>説明「Mavenリポジトリ」にアクセスして、
aliyun-java-sdk-coreの最新バージョンを取得してください。 -
assumeRoleを呼び出して、一時的なアクセスキーペアとセキュリティトークンを生成します。主要なリクエストパラメーターは次のとおりです。
パラメーター
説明
値の例
roleArn引き受ける RAM ロールの Alibaba Cloud リソースネーム (ARN) です。
acs:ram::174*****11242:role/sts-roleDurationSecondsトークンの有効期間 (秒単位) です。範囲は 900~3,600 です。
900RoleSessionNameこのセッションのラベルです。監査ログで使用されます。
test-tokenimport com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.http.MethodType; import com.aliyuncs.http.ProtocolType; import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest; import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse; /** * AssumeRole を呼び出して、RAM ロールの一時的なセキュリティトークンを取得します。 */ public class STSTokenDemo { public static void main(String[] args) throws Exception { // クライアントを初期化します。 DefaultAcsClient client = InitClient.initMpsClient(); // roleArn は RAM コンソールから取得する必要があります。 String roleArn = "acs:ram::174*********11242:role/sts-role"; try { AssumeRoleResponse response = assumeRole(client, roleArn); 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()); } } /** 一時的なアクセスキーペアとセキュリティトークンを生成します。 */ private static AssumeRoleResponse assumeRole( DefaultAcsClient client, String roleArn) throws ClientException { final AssumeRoleRequest request = new AssumeRoleRequest(); request.setVersion("2015-04-01"); request.setMethod(MethodType.POST); request.setProtocol(ProtocolType.HTTPS); request.setDurationSeconds(900L); request.setRoleArn(roleArn); request.setRoleSessionName("test-token"); return client.getAcsResponse(request); } } -
トークンの有効期間を設定します。
DurationSecondsを 900~3,600 秒の値に設定します。予想される再生時間をカバーできる十分な期間を選択してください。再生中にトークンの有効期限が切れると、動画は停止し、ユーザーは新しいトークンを取得する必要があります。長時間の動画や、ユーザーが一時停止して再開する可能性があるセッションでは、より長い有効期間を使用します。トークンは有効期限が切れるまで再利用できます。新しいリクエストを行う前に、次のヘルパーを使用してトークンの有効期限を確認してください。
private static boolean isTimeExpire(String expiration) { Date nowDate = new Date(); Date expireDate = javax.xml.bind.DatatypeConverter.parseDateTime(expiration).getTime(); if (expireDate.getTime() <= nowDate.getTime()) { return true; } else { return false; } }