Token Layanan Keamanan (STS) dapat secara efektif mencegah risiko keamanan yang disebabkan oleh kebocoran pasangan AccessKey dari pengguna Resource Access Management (RAM). Untuk mendapatkan token dari STS, Anda harus membuat pengguna RAM dan peran RAM, memberi mereka izin yang diperlukan, lalu menggunakan pasangan AccessKey dari pengguna RAM sebagai kredensial untuk memanggil operasi AssumeRole guna mengasumsikan peran RAM. Topik ini menjelaskan cara memperoleh token STS.
Langkah 1: Buat pengguna RAM
Buat pengguna RAM. Untuk informasi lebih lanjut, lihat Buat pengguna RAM. Perhatikan konfigurasi berikut:
Disarankan. Atur parameter Logon Name menjadi vod. Nama masuk vod digunakan sebagai contoh dalam deskripsi selanjutnya di topik ini.
Atur parameter Access Mode menjadi Using permanent AccessKey to access.
Jaga kerahasiaan pasangan AccessKey yang diperoleh.
Langkah 2: Berikan izin kepada pengguna RAM untuk memanggil operasi AssumeRole dari STS
Di halaman Users di konsol RAM, temukan pengguna RAM dengan nama masuk vod dan klik Add Permissions di kolom Actions.
Di panel Grant Permission, berikan izin yang diperlukan kepada pengguna RAM.
CatatanUntuk memberikan izin yang diperlukan, lampirkan kebijakan AliyunSTSAssumeRoleAccess ke pengguna RAM. Kebijakan ini memungkinkan pengguna RAM vod untuk memanggil operasi AssumeRole dari STS. Untuk mencari kebijakan tersebut, Anda dapat memilih System Policy dari daftar drop-down dan memasukkan
AliyunSTSAssumeRoleAccessdi kotak pencarian.
Konfigurasikan parameter Resource Scope.
Account: Otorisasi berlaku untuk akun Alibaba Cloud saat ini.
ResourceGroup: Otorisasi berlaku untuk grup sumber daya tertentu.
PentingJika Anda memilih Grup Sumber Daya untuk parameter Cakupan Sumber Daya, pastikan layanan cloud yang diperlukan mendukung grup sumber daya. Untuk informasi lebih lanjut, lihat Layanan yang bekerja dengan Grup Sumber Daya. Untuk informasi lebih lanjut tentang cara memberikan izin pada grup sumber daya, lihat Gunakan grup sumber daya untuk memberikan izin kepada pengguna RAM mengelola instance ECS tertentu.
Konfigurasikan parameter Principal.
Principal adalah pengguna RAM yang ingin Anda berikan izin. Pengguna RAM saat ini dipilih secara otomatis.
Konfigurasikan parameter Policy.
Kebijakan berisi satu set izin. Kebijakan dapat diklasifikasikan menjadi kebijakan sistem dan kebijakan kustom. Anda dapat memilih beberapa kebijakan sekaligus.
Kebijakan sistem: kebijakan yang dibuat oleh Alibaba Cloud. Anda dapat menggunakannya tetapi tidak dapat memodifikasinya. Pembaruan versi kebijakan dipertahankan oleh Alibaba Cloud. Untuk informasi lebih lanjut, lihat Layanan yang bekerja dengan RAM.
CatatanSistem secara otomatis mengidentifikasi kebijakan sistem berisiko tinggi, seperti AdministratorAccess dan AliyunRAMFullAccess. Kami menyarankan agar Anda tidak memberikan izin yang tidak perlu dengan melampirkan kebijakan berisiko tinggi.
Kebijakan kustom: Anda dapat mengelola dan memperbarui kebijakan kustom berdasarkan kebutuhan bisnis Anda. Anda dapat membuat, memperbarui, dan menghapus kebijakan kustom. Untuk informasi lebih lanjut, lihat Buat kebijakan kustom.
Klik Grant permissions.
Klik Close.
Langkah 3: Buat peran RAM
Pada Sublangkah 7, kami sarankan Anda mengatur parameter Role Name menjadi vodrole. Nama peran vodrole digunakan sebagai contoh dalam deskripsi selanjutnya di topik ini.
Masuk ke konsol RAM sebagai pengguna RAM yang memiliki hak administratif.
Di panel navigasi sisi kiri, pilih .
Di halaman Roles, klik Create Role.

Di halaman Create Role, atur parameter Principal Type menjadi Cloud Account, tentukan akun Alibaba Cloud, lalu klik OK.

Current Account: Jika Anda ingin pengguna RAM atau peran RAM yang termasuk dalam akun Alibaba Cloud Anda mengasumsikan peran RAM, pilih Current Account.
Other Account: Jika Anda ingin pengguna RAM atau peran RAM yang termasuk dalam akun Alibaba Cloud lain mengasumsikan peran RAM, pilih Other Account dan masukkan ID akun Alibaba Cloud. Opsi ini disediakan untuk memberikan izin pada sumber daya yang termasuk dalam akun Alibaba Cloud berbeda. Untuk informasi lebih lanjut, lihat Gunakan peran RAM untuk memberikan izin lintas akun Alibaba Cloud. Anda dapat melihat ID akun Alibaba Cloud Anda di halaman Pengaturan Keamanan.
Opsional. Jika Anda ingin peran RAM diasumsikan hanya oleh pengguna RAM atau peran RAM tertentu yang termasuk dalam akun Alibaba Cloud tepercaya, klik Switch to Policy Editor dan modifikasi kebijakan kepercayaan peran RAM di editor.
Editor mendukung mode Editor Visual dan JSON. Dalam contoh berikut, hanya pengguna RAM
Alicedalam akun Alibaba Cloud dengan ID 100******0719 yang dapat mengasumsikan peran RAM.Editor Visual
Tentukan pengguna RAM untuk elemen Principal.


JSON
Tentukan pengguna RAM untuk bidang
RAMdari parameterPrincipal.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Principal": { "RAM": "acs:ram::100******0719:user/Alice" }, "Action": "sts:AssumeRole" } ] }
Di kotak dialog Create Role, konfigurasikan parameter Role Name dan klik OK.
Langkah 4: Berikan izin kepada peran RAM untuk mengelola ApsaraVideo VOD
Di halaman Roles di konsol RAM, temukan peran RAM yang telah dibuat vodrole dan klik Grant Permission di kolom Actions.
Di panel Grant Permission, berikan izin yang diperlukan kepada peran RAM.
CatatanUntuk meningkatkan keamanan, kami sarankan Anda memberikan izin minimum yang diperlukan kepada peran RAM.
Jika Anda ingin peran RAM vodrole mengakses dan mengelola sumber daya ApsaraVideo VOD, kami sarankan Anda melampirkan kebijakan sistem AliyunVODFullAccess ke peran RAM. Kebijakan ini memungkinkan peran RAM vodrole mengelola semua sumber daya ApsaraVideo VOD. Untuk mencari kebijakan sistem tersebut, Anda dapat memilih Syetem Policy dari daftar drop-down dan memasukkan
AliyunVODFullAccessdi kotak pencarian. Untuk informasi lebih lanjut tentang definisi dan izin kebijakan sistem ApsaraVideo VOD, lihat Kebijakan sistem.

Konfigurasikan parameter Resource Scope.
Account: Otorisasi berlaku untuk akun Alibaba Cloud saat ini.
ResourceGroup: Otorisasi berlaku untuk grup sumber daya tertentu.
PentingJika Anda memilih Grup Sumber Daya untuk parameter Cakupan Sumber Daya, pastikan layanan cloud yang diperlukan mendukung grup sumber daya. Untuk informasi lebih lanjut, lihat Layanan yang bekerja dengan Grup Sumber Daya. Untuk informasi lebih lanjut tentang cara memberikan izin pada grup sumber daya, lihat Gunakan grup sumber daya untuk memberikan izin kepada pengguna RAM mengelola instance ECS tertentu.
Konfigurasikan parameter Principal.
Principal adalah pengguna RAM yang ingin Anda berikan izin. Pengguna RAM saat ini dipilih secara otomatis.
Konfigurasikan parameter Policy.
Kebijakan berisi satu set izin. Kebijakan dapat diklasifikasikan menjadi kebijakan sistem dan kebijakan kustom. Anda dapat memilih beberapa kebijakan sekaligus.
Kebijakan sistem: kebijakan yang dibuat oleh Alibaba Cloud. Anda dapat menggunakannya tetapi tidak dapat memodifikasinya. Pembaruan versi kebijakan dipertahankan oleh Alibaba Cloud. Untuk informasi lebih lanjut, lihat Layanan yang bekerja dengan RAM.
CatatanSistem secara otomatis mengidentifikasi kebijakan sistem berisiko tinggi, seperti AdministratorAccess dan AliyunRAMFullAccess. Kami menyarankan agar Anda tidak memberikan izin yang tidak perlu dengan melampirkan kebijakan berisiko tinggi.
Kebijakan kustom: Anda dapat mengelola dan memperbarui kebijakan kustom berdasarkan kebutuhan bisnis Anda. Anda dapat membuat, memperbarui, dan menghapus kebijakan kustom. Untuk informasi lebih lanjut, lihat Buat kebijakan kustom.
Klik Grant permissions.
Setelah otorisasi selesai, catatan yang menunjukkan otorisasi berhasil akan dihasilkan.

Klik Close.
Langkah 5: Asumsikan peran RAM dan peroleh token STS
Gunakan pengguna RAM untuk memanggil operasi AssumeRole dari STS untuk memperoleh token STS dari peran RAM. Operasi ini memperoleh kredensial identitas sementara untuk mengasumsikan peran. Anda dapat langsung menggunakan token STS untuk mengakses operasi API ApsaraVideo VOD atau mendistribusikan token STS ke klien untuk melakukan operasi, seperti unggah langsung dari klien. Dalam contoh ini, SDK untuk Java digunakan. Untuk contoh lain dari bahasa pemrograman 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) yang dihasilkan 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 operasi AssumeRole, termasuk RoleArn, RoleSessionName, Policy, dan DurationSeconds.
// Dapatkan nilai RoleArn dari konsol RAM berdasarkan Langkah 3.
String roleArn = "<role-arn>";
// Tentukan nilai kustom untuk RoleSessionName. RoleSessionName menentukan nama sesi peran.
String roleSessionName = "session-name";
// Tentukan nilai kustom untuk 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());
} catch (ClientException e) {
System.out.println("Gagal mendapatkan token.");
System.out.println("Kode kesalahan: " + e.getErrCode());
System.out.println("Pesan kesalahan: " + 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 parameter regionId ke wilayah layanan. Contoh: cn-shanghai.
Untuk informasi lebih lanjut, lihat titik akhir setiap wilayah STS.
*/
IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
// Gunakan profil untuk membangun klien.
DefaultAcsClient client = new DefaultAcsClient(profile);
// Buat permintaan AssumeRole 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);
// Ajukan permintaan dan dapatkan respons.
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) yang dihasilkan 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 operasi AssumeRole, termasuk RoleArn, RoleSessionName, Policy, dan DurationSeconds.
// Dapatkan nilai RoleArn dari konsol RAM berdasarkan Langkah 3.
String roleArn = "<role-arn>";
// Tentukan nilai kustom untuk RoleSessionName.
String roleSessionName = "session-name";
// Tentukan nilai kustom untuk Policy.
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);
}
}