Security Token Service (STS) を使用して一時的なアクセス資格情報を生成し、その資格情報を使用してApsaraVideo VODにビデオをアップロードできます。 これにより、RAMユーザーパスワードの漏洩によるセキュリティリスクを防ぎます。 このトピックでは、STSを使用してApsaraVideo VODへの一時アクセスを許可する方法について説明します。
手順1: RAMユーザーの作成
ステップ4では、ログイン名をvodに設定することを推奨します。 このトピックでは、例としてvodを使用します。
ステップ5では、アクセスモードをOpenAPI Accessに設定することを推奨します。
Alibaba Cloudアカウントまたは管理者権限を持つRAMユーザーを使用してRAMコンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
[ユーザー] ページで、[ユーザーの作成] をクリックします。
[ユーザーの作成] ページの [ユーザーアカウント情報] セクションで、次のパラメーターを設定します。
ログオン名: ログオン名の長さは最大64文字で、英数字、ピリオド (.) 、ハイフン (-) 、アンダースコア (_) を使用できます。
表示名: 表示名の長さは最大128文字です。
タグ: アイコンをクリックして、タグキーとタグ値を入力します。 RAMユーザーに1つ以上のタグを追加できます。 これにより、タグに基づいてRAMユーザーを管理できます。
説明[ユーザーの追加] をクリックすると、一度に複数のRAMユーザーを作成できます。
アクセスモードセクションでアクセスモードを選択し、必要なパラメーターを設定します。
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シークレットをバックアップする必要があります。
OKをクリックします。
プロンプトに従って完全なセキュリティ検証。
手順2: RAMユーザーにSTSのAssumeRole操作を呼び出す権限を付与する
RAMコンソールにログインします。 左側のナビゲーションウィンドウで、[アイデンティティ]> [ユーザー] を選択します。 [ユーザー] ページで、vodという名前のRAMユーザーを見つけ、[操作] 列の [権限付与] をクリックします。
権限付与パネルで、RAMユーザーに権限を付与します。
説明AliyunSTSAssumeRoleAccessポリシーをvodユーザーにアタッチします。 これにより、ユーザーはAssumeRole操作を呼び出すことができます。 システムポリシーを検索するには、検索ボックスに
AliyunSTSAssumeRoleAccess
と入力します。[リソーススコープ] パラメーターを設定します。
アカウント: 権限付与は、現在のAlibaba Cloudアカウントで有効になります。
ResourceGroup: 特定のリソースグループに対して権限付与が有効になります。
重要[リソーススコープ] パラメーターで [リソースグループ] を選択した場合、必要なクラウドサービスがリソースグループをサポートしていることを確認します。 詳細については、「リソースグループで動作するサービス」をご参照ください。 リソースグループに権限を付与する方法の詳細については、「リソースグループを使用した ECS インスタンスの管理」をご参照ください。
Principalパラメーターを設定します。
プリンシパルは、権限を付与するRAMユーザーです。 現在のRAMユーザーが自動的に選択されます。
Policyパラメーターを設定します。
ポリシーには、一連の権限が含まれています。 ポリシーは、システムポリシーとカスタムポリシーに分類できます。 一度に複数のポリシーを選択できます。
システムポリシー: Alibaba Cloudによって作成されたポリシー。 これらのポリシーは使用できますが、変更することはできません。 ポリシーのバージョン更新は、Alibaba Cloudによって管理されます。 詳細については、「RAM をサポートする Alibaba Cloud サービス」をご参照ください。
説明システムは、AdministratorAccessやAliyunRAMFullAccessなどのリスクの高いシステムポリシーを自動的に識別します。 リスクの高いポリシーをアタッチして、不要な権限を付与しないことを推奨します。
カスタムポリシー: ビジネス要件に基づいてカスタムポリシーを管理および更新できます。 カスタムポリシーは作成、更新、削除できます。 詳細については、「カスタマイズポリシーの作成」をご参照ください。
[権限付与] をクリックします。
閉じるをクリックします。
ステップ3: RAMロールの作成
手順5で説明したロール名をvodroleに設定することを推奨します。 このトピックでは、例としてvodroleを使用します。
管理者権限を持つRAMユーザーとしてRAMコンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
ロールページで、ロールの作成をクリックします。
ロールの作成ページで、[ロールタイプの選択] セクションのAlibaba Cloudアカウントを選択して、次へをクリックします。
RAMロールのパラメーターを設定します。
RAMロール名を指定します。
注を指定します。
[信頼できる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ロールを引き受けたい場合は、次のいずれかの方法を使用できます。
RAMロールの信頼ポリシーを変更します。 詳細については、「RAM ロールの信頼できるエンティティの変更」をご参照ください。
RAMユーザーにアタッチされているロール引き受けポリシーを変更します。 詳細については、「STS に関するよくある質問」をご参照ください。
[OK] をクリックします。
閉じるをクリックします。
手順4: ApsaraVideo VODへのアクセス権限をRAMロールに付与する
RAMコンソールにログインします。 左側のナビゲーションウィンドウで、[アイデンティティ]> [ロール] を選択します。 [ロール] ページで、vodroleという名前のRAMロールを見つけ、[操作] 列の [権限付与] をクリックします。
権限付与パネルで、RAMロールに権限を付与します。
説明セキュリティを向上させるために、必要最小限の権限のみをRAMロールに付与することを推奨します。
vodroleロールでApsaraVideo VODのリソースにアクセスして管理する場合は、AliyunVODFullAccessポリシーをvodroleロールにアタッチすることを推奨します。 検索ボックスに
AliyunVODFullAccess
と入力して、ポリシーを検索できます。 ApsaraVideo VODのシステムポリシーと権限の詳細については、「システムポリシー」をご参照ください。
[リソーススコープ] パラメーターを設定します。
アカウント: 権限付与は、現在のAlibaba Cloudアカウントで有効になります。
ResourceGroup: 特定のリソースグループに対して権限付与が有効になります。
重要[リソーススコープ] パラメーターで [リソースグループ] を選択した場合、必要なクラウドサービスがリソースグループをサポートしていることを確認します。 詳細については、「リソースグループで動作するサービス」をご参照ください。 リソースグループに権限を付与する方法の詳細については、「リソースグループを使用した ECS インスタンスの管理」をご参照ください。
Principalパラメーターを設定します。
プリンシパルは、権限を付与するRAMユーザーです。 現在のRAMユーザーが自動的に選択されます。
Policyパラメーターを設定します。
ポリシーには、一連の権限が含まれています。 ポリシーは、システムポリシーとカスタムポリシーに分類できます。 一度に複数のポリシーを選択できます。
システムポリシー: Alibaba Cloudによって作成されたポリシー。 これらのポリシーは使用できますが、変更することはできません。 ポリシーのバージョン更新は、Alibaba Cloudによって管理されます。 詳細については、「RAM をサポートする Alibaba Cloud サービス」をご参照ください。
説明システムは、AdministratorAccessやAliyunRAMFullAccessなどのリスクの高いシステムポリシーを自動的に識別します。 リスクの高いポリシーをアタッチして、不要な権限を付与しないことを推奨します。
カスタムポリシー: ビジネス要件に基づいてカスタムポリシーを管理および更新できます。 カスタムポリシーは作成、更新、削除できます。 詳細については、「カスタマイズポリシーの作成」をご参照ください。
[権限付与] をクリックします。
ロールに権限を付与すると、成功した権限付与レコードが生成されます。
閉じるをクリックします。
ステップ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();
}
}
}