Token STS memungkinkan Anda memberikan akses sementara ke ApsaraVideo VOD tanpa mengekspos pasangan AccessKey pengguna RAM. Untuk mendapatkan token STS, buat pengguna RAM dan peran RAM, berikan izin yang diperlukan kepada keduanya, lalu panggil operasi AssumeRole dengan pasangan AccessKey pengguna RAM untuk mengasumsikan peran RAM tersebut.
Langkah 1: Buat pengguna RAM
Buat pengguna RAM, dan perhatikan hal berikut:
-
Atur parameter Logon Name menjadi vod. Topik ini menggunakan vod sebagai nama logon di semua contoh selanjutnya.
-
Atur parameter Access Mode menjadi Using permanent AccessKey to access.
-
Simpan pasangan AccessKey yang diperoleh secara aman.
Langkah 2: Berikan izin kepada pengguna RAM untuk memanggil operasi AssumeRole dari STS
-
Di Konsol RAM, buka halaman Users. Temukan pengguna RAM bernama vod dan klik Add Permissions di kolom Actions.
-
Di panel Grant Permission, berikan izin kepada pengguna RAM.
CatatanSambungkan kebijakan AliyunSTSAssumeRoleAccess ke pengguna vod. Kebijakan ini memungkinkan pengguna memanggil operasi STS AssumeRole. Untuk menemukan kebijakan tersebut, pilih System Policy dan masukkan
AliyunSTSAssumeRoleAccessdi kotak pencarian.-
Pilih Resource Scope:
-
Account level: Izin berlaku untuk Akun Alibaba Cloud saat ini.
-
Resource group level: Izin berlaku untuk kelompok sumber daya tertentu. Jika Anda memberikan izin tingkat kelompok sumber daya kepada pengguna RAM, pengguna tersebut harus mengganti cakupan sumber daya ke kelompok sumber daya tersebut di bilah navigasi atas setelah masuk ke konsol. Hanya dengan demikian pengguna dapat mengakses dan mengelola sumber daya dalam kelompok tersebut.
Catatan-
Sistem secara otomatis memberi tanda pada kebijakan sistem berisiko tinggi seperti AdministratorAccess dan AliyunRAMFullAccess. Kebijakan ini sering memberikan kontrol penuh atas semua sumber daya cloud atau manajemen penuh terhadap Resource Access Management (RAM). Berikan dengan hati-hati.
-
Untuk contoh otorisasi kelompok sumber daya, lihat Gunakan kelompok sumber daya untuk membatasi pengguna RAM agar hanya mengelola instance ECS tertentu.
-
-
-
Pilih principal:
Principal adalah pengguna RAM yang menerima izin. Jika Anda memulai dari halaman Users, sistem akan memilih pengguna RAM saat ini secara otomatis. Jika Anda memulai dari halaman Grant Permission, pilih satu atau beberapa pengguna RAM secara manual.
-
Pilih Permission Policy:
-
System policy: Cari dan pilih langsung. Tips pencarian: Gunakan kotak pencarian untuk menemukan kebijakan dengan cepat. Anda dapat mencari berdasarkan nama produk (seperti
ECSatauOSS), tingkat izin (sepertiReadOnlyatauFullAccess), atau nama lengkap kebijakan. -
Custom policy: Pertama-tama buat kebijakan kustom. Untuk informasi lebih lanjut, lihat Buat kebijakan kustom.
-
-
Klik Confirm Grant Permission.
-
-
Tinjau hasil otorisasi dan klik Close.
Langkah 3: Buat peran RAM
Di Langkah 5 di bawah, atur parameter Role Name menjadi vodrole. Topik ini menggunakan vodrole sebagai nama peran di semua contoh selanjutnya.
-
Masuk ke Konsol RAM sebagai administrator RAM.
-
Di panel navigasi sebelah kiri, pilih .
-
Di halaman Roles, klik Create Role.
-
Di halaman Create Role, atur Principal Type menjadi Cloud Account, tentukan detail akun Alibaba Cloud, lalu klik OK.
-
Current Account: Pilih opsi ini untuk mengizinkan semua pengguna RAM dan peran RAM di bawah akun Alibaba Cloud saat ini mengasumsikan peran tersebut. Pilih Current Account.
-
Other Account: Pilih opsi ini untuk mengizinkan semua pengguna RAM dan peran RAM dari akun Alibaba Cloud lain mengasumsikan peran tersebut. Pilih Other Account, lalu masukkan ID akun Alibaba Cloud lain (akun utama). Ini terutama digunakan untuk akses sumber daya lintas akun. Untuk informasi lebih lanjut, lihat Akses sumber daya lintas akun Alibaba Cloud.Anda dapat menemukan ID akun Alibaba Cloud (akun utama) Anda di halaman Security Settings.
-
-
(Opsional) Untuk membatasi peran hanya pada pengguna RAM atau peran RAM tertentu, klik Switch to Policy Editor untuk mengubah kebijakan kepercayaan.
Editor mendukung dua mode: Visual Editor dan JSON Editor. Pada contoh berikut, peran RAM hanya dapat diasumsikan oleh pengguna RAM
Alicedi bawah akun Alibaba Cloud saat ini (AccountID=100******0719).-
Visual Editor
Di bagian Principal, tambahkan pengguna RAM.
Klik tautan Edit di samping Cloud Account dan masukkan ID akun tepercaya.
Di kotak dialog Add Principal, pilih Current Account untuk Cloud Account dan RAM user untuk Identity Type. Masukkan nama pengguna target, misalnya Alice, di bidang User Name, lalu klik OK.
-
JSON Editor
Di bidang
RAMobjekPrincipal, masukkan ARN lengkap pengguna RAM.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Principal": { "RAM": "acs:ram::100******0719:user/Alice" }, "Action": "sts:AssumeRole" } ] }
-
-
Di kotak dialog Create Role, masukkan Role Name, lalu klik OK.
Langkah 4: Berikan izin kepada peran RAM untuk mengelola ApsaraVideo VOD
-
Di Konsol RAM, buka halaman Roles. Temukan peran RAM bernama vodrole dan klik Grant Permission di kolom Actions.
-
Di panel Grant Permission, berikan izin kepada peran RAM.
Catatan-
Untuk mengurangi risiko, terapkan prinsip least privilege.
-
Jika vodrole perlu mengakses dan mengelola sumber daya ApsaraVideo VOD, sambungkan kebijakan sistem AliyunVODFullAccess ke peran tersebut. Kebijakan ini memberikan akses penuh ke semua sumber daya ApsaraVideo VOD. Untuk menemukan kebijakan tersebut, pilih System Policy dan masukkan
AliyunVODFullAccessdi kotak pencarian. Untuk informasi lebih lanjut tentang kebijakan sistem ApsaraVideo VOD dan izinnya, lihat System policies.
-
Pilih Resource Scope:
-
Account level: Izin berlaku untuk Akun Alibaba Cloud saat ini.
-
Resource group level: Izin berlaku untuk kelompok sumber daya tertentu. Jika Anda memberikan izin tingkat kelompok sumber daya kepada pengguna RAM, pengguna tersebut harus mengganti cakupan sumber daya ke kelompok sumber daya tersebut di bilah navigasi atas setelah masuk ke konsol. Hanya dengan demikian pengguna dapat mengakses dan mengelola sumber daya dalam kelompok tersebut.
Catatan-
Sistem secara otomatis memberi tanda pada kebijakan sistem berisiko tinggi seperti AdministratorAccess dan AliyunRAMFullAccess. Kebijakan ini sering memberikan kontrol penuh atas semua sumber daya cloud atau manajemen penuh terhadap Resource Access Management (RAM). Berikan dengan hati-hati.
-
Untuk contoh otorisasi kelompok sumber daya, lihat Gunakan kelompok sumber daya untuk membatasi pengguna RAM agar hanya mengelola instance ECS tertentu.
-
-
-
Pilih principal:
Principal adalah pengguna RAM yang menerima izin. Jika Anda memulai dari halaman Users, sistem akan memilih pengguna RAM saat ini secara otomatis. Jika Anda memulai dari halaman Grant Permission, pilih satu atau beberapa pengguna RAM secara manual.
-
Pilih Permission Policy:
-
System policy: Cari dan pilih langsung. Tips pencarian: Gunakan kotak pencarian untuk menemukan kebijakan dengan cepat. Anda dapat mencari berdasarkan nama produk (seperti
ECSatauOSS), tingkat izin (sepertiReadOnlyatauFullAccess), atau nama lengkap kebijakan. -
Custom policy: Pertama-tama buat kebijakan kustom. Untuk informasi lebih lanjut, lihat Buat kebijakan kustom.
-
-
Klik Confirm Grant Permission.
Setelah otorisasi selesai, catatan sukses akan muncul.
-
-
Tinjau hasil otorisasi dan klik Close.
Langkah 5: Asumsikan peran RAM dan dapatkan token STS
Panggil operasi STS AssumeRole – Dapatkan kredensial sementara untuk mengasumsikan peran sebagai pengguna RAM. Token STS yang dikembalikan dapat digunakan untuk memanggil operasi API ApsaraVideo VOD atau didistribusikan ke klien untuk tugas seperti unggahan langsung. Contoh SDK Java berikut menunjukkan prosesnya. Untuk bahasa lain, lihat Ikhtisar SDK STS.
SDK V1.0
Di Maven, tambahkan informasi dependensi berikut:
<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) {
// Dapatkan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) untuk pengguna RAM yang dibuat di Langkah 1 dari variabel lingkungan.
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Konfigurasikan parameter permintaan untuk operasi AssumeRole: RoleArn, RoleSessionName, Policy, dan DurationSeconds.
// Dapatkan nilai RoleArn dari Konsol RAM berdasarkan Langkah 3.
String roleArn = "<role-arn>";
// Atur nilai kustom untuk RoleSessionName. RoleSessionName menentukan nama sesi peran.
String roleSessionName = "session-name";
// Sesuaikan kebijakan.
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("Gagal mendapatkan token.");
System.out.println("Kode error: " + e.getErrCode());
System.out.println("Pesan error: " + e.getErrMsg());
}
}
static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy) throws ClientException {
try {
// Bangun profil default. Biarkan parameter regionId kosong.
/*
Catatan: Jika Anda mengatur SysEndpoint ke sts.aliyuncs.com, parameter regionId bersifat opsional. Jika tidak, Anda harus mengatur regionId ke wilayah layanan. Contoh: cn-shanghai.
Untuk informasi lebih lanjut, lihat titik akhir untuk setiap wilayah STS.
*/
IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
// Bangun klien menggunakan profil.
DefaultAcsClient client = new DefaultAcsClient(profile);
// Buat AssumeRoleRequest dan konfigurasikan parameter permintaan.
final AssumeRoleRequest request = new AssumeRoleRequest();
request.setSysEndpoint("sts.aliyuncs.com");
request.setSysMethod(MethodType.POST);
request.setRoleArn(roleArn);
request.setRoleSessionName(roleSessionName);
request.setPolicy(policy);
// Kirim permintaan dan dapatkan tanggapan.
final AssumeRoleResponse response = client.getAcsResponse(request);
return response;
} catch (ClientException e) {
throw e;
}
}
}
SDK V2.0
Di Maven, tambahkan informasi dependensi berikut:
<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) {
// Dapatkan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) untuk pengguna RAM yang dibuat di Langkah 1 dari variabel lingkungan.
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Konfigurasikan parameter permintaan untuk operasi AssumeRole: RoleArn, RoleSessionName, Policy, dan DurationSeconds.
// Dapatkan nilai RoleArn dari Konsol RAM berdasarkan Langkah 3.
String roleArn = "<role-arn>";
// Atur nilai kustom untuk RoleSessionName.
String roleSessionName = "session-name";
// Sesuaikan kebijakan.
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: " + 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 (Exception e) {
throw new RuntimeException(e);
}
}
public static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy) throws Exception {
Config config = new Config()
// Dapatkan ID AccessKey dari variabel lingkungan.
.setAccessKeyId(accessKeyId)
// Dapatkan Rahasia AccessKey dari variabel lingkungan.
.setAccessKeySecret(accessKeySecret);
config.endpoint = "sts.cn-hangzhou.aliyuncs.com";
Client client = new Client(config);
AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest()
.setRoleArn(roleArn)
.setRoleSessionName(roleSessionName)
.setPolicy(policy);
RuntimeOptions runtime = new RuntimeOptions();
return client.assumeRoleWithOptions(assumeRoleRequest, runtime);
}
}