Peran RAM instans adalah jenis Peran RAM yang dapat diasumsikan oleh instans Elastic Compute Service (ECS) untuk memiliki izin tertentu. Jika aplikasi yang Anda kelola sendiri diterapkan di server ECS, Anda dapat menetapkan peran RAM instans ke instans ECS untuk mengakses Key Management Service (KMS). Topik ini menjelaskan cara menetapkan peran RAM instans ke instans ECS untuk mengakses KMS.
SDK yang mendukung peran RAM instans dari instans ECS
Alibaba Cloud SDK: digunakan untuk melakukan operasi manajemen.
Secret SDKs: Jenis-jenis Secret SDK berikut tersedia: Secrets Manager Client, Secret JDBC client, dan RAM secret plug-in. Mereka digunakan untuk mendapatkan nilai rahasia. JDBC adalah singkatan dari Java Database Connectivity.
Catatan penggunaan
Instans ECS harus diterapkan dalam virtual private cloud (VPC).
Hanya satu peran RAM instans yang dapat ditetapkan ke instans ECS.
Jika akun Anda adalah pengguna RAM, hubungi pemilik akun Alibaba Cloud terkait untuk mendapatkan izin mengonfigurasi peran RAM. Untuk informasi lebih lanjut, lihat Peran RAM instans.
Langkah 1: Buat peran RAM instans dan berikan izin yang diperlukan kepada peran tersebut
Gunakan konsol RAM
Buat peran RAM instans dengan entitas tepercaya layanan Alibaba Cloud.
Masuk ke Konsol RAM.
Di bilah navigasi sisi kiri, pilih .
Di halaman Roles, klik Create Role.
Di halaman Create Role, atur Principal Type menjadi Cloud Service, pilih Elastic Compute Service / ECS untuk Principal Name, lalu klik OK.
Tetapkan nama peran. Dalam contoh ini, gunakan EcsRamRoleTest.
Berikan izin kepada peran RAM instans untuk mengakses KMS.
Setelah peran RAM instans dibuat, peran tersebut tidak memiliki izin. Anda perlu memberikan izin kepada peran tersebut.
Di halaman Roles, temukan peran RAM instans yang diinginkan dan klik Grant Permission di kolom Actions.
Di panel Grant Permission, temukan dan pilih kebijakan sistem AliyunKMSFullAccess dari KMS di tab System Policy dan klik OK.
Panggil operasi API RAM
Buat peran RAM instans dengan entitas tepercaya layanan Alibaba Cloud.
Panggil operasi CreateRole dari RAM. Atur parameter permintaan berikut:
RoleName: nama peran RAM instans. Untuk contoh ini, masukkan EcsRamRoleTest.AssumeRolePolicyDocument: isi kebijakan yang mengizinkan instans ECS Anda untuk mengasumsikan peran RAM instans. Untuk contoh ini, masukkan konten berikut:{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "ecs.aliyuncs.com" ] } } ], "Version": "1" }
Berikan izin kepada peran RAM instans untuk mengakses KMS.
Panggil operasi AttachPolicyToRole untuk melampirkan kebijakan sistem AliyunKMSFullAccess ke peran RAM instans EcsRamRoleTest. Tentukan parameter permintaan berikut untuk operasi ini:
PolicyType: tipe kebijakan. Atur parameter ini ke System, yang menunjukkan kebijakan sistem.PolicyName: nama kebijakan sistem. Untuk contoh ini, masukkan AliyunKMSFullAccess, yang menunjukkan kebijakan sistem untuk KMS.RoleName: nama peran RAM instans. Untuk contoh ini, masukkan EcsRamRoleTest.
Langkah 2: Lampirkan peran RAM instans ke instans ECS Anda
Gunakan konsol ECS
Jika Anda tidak memiliki instans ECS, beli instans ECS terlebih dahulu. Untuk informasi tentang cara membuat instans, lihat Buat instans di tab Peluncuran Kustom.
Masuk ke Konsol ECS.
Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah dan grup sumber daya tempat sumber daya tersebut berada.
Temukan instans ECS yang diinginkan dan pilih di kolom Tindakan.
Di kotak dialog yang muncul, pilih peran RAM instans yang Anda buat dari daftar drop-down Peran RAM dan klik Confirm.
Panggil operasi API ECS
Lampirkan peran RAM instans ke instans ECS yang ada.
Panggil operasi AttachInstanceRamRole dari ECS untuk melampirkan peran RAM instans ke instans ECS yang ada yang berada di VPC. Tentukan parameter permintaan berikut untuk operasi ini:
RegionId: ID wilayah tempat instans ECS berada.RamRoleName: nama peran RAM instans. Untuk contoh ini, masukkan EcsRamRoleTest.InstanceIds: ID instans ECS yang berada di VPC. Atur parameter ini ke nilai dalam format ["i-bXXXXXXXX"].
Tentukan peran RAM instans saat Anda membuat instans ECS.
Buat instans ECS.
Panggil operasi CreateInstance dari ECS untuk membuat instans ECS. Tentukan parameter permintaan berikut untuk operasi ini:
RegionId: ID wilayah tempat Anda ingin membuat instans ECS.ImageId: ID gambar yang digunakan untuk membuat instans ECS. Untuk contoh ini, masukkan centos_7_03_64_40G_alibase_****.vhd.InstanceType: tipe instans ECS. Untuk contoh ini, masukkan ecs.g6.large.VSwitchId: ID vSwitch di VPC tempat Anda ingin membuat instans ECS.CatatanAnda hanya dapat melampirkan peran RAM instans ke instans ECS yang berada di VPC. Oleh karena itu, parameter ini diperlukan.
RamRoleName: nama peran RAM instans. Untuk contoh ini, masukkan EcsRamRoleTest.
Anda juga dapat mengotorisasi pengguna RAM untuk mengasumsikan peran RAM instans. Untuk informasi lebih lanjut, lihat Peran RAM instans.
Panggil operasi ModifyInstanceVncPasswd dan StartInstance dari ECS untuk mengatur kata sandi dan memulai instans.
Langkah 3: Gunakan peran RAM instans dari instans ECS untuk mengakses KMS
Contoh berikut menunjukkan cara memanggil operasi ListKeys dari KMS di Java untuk menanyakan semua kunci di wilayah saat ini. Untuk informasi lebih lanjut tentang cara menggunakan SDK, lihat Referensi SDK.
Alibaba Cloud SDK V1.0
package com.aliyuncs.kms.examples;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.auth.AlibabaCloudCredentialsProvider;
import com.aliyuncs.auth.InstanceProfileCredentialsProvider;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.kms.model.v20160120.*;
import com.aliyuncs.profile.DefaultProfile;
public class RamRoleTest {
public static void main(final String[] args) throws Exception {
String regionId = "<region-id>";
DefaultProfile profile = DefaultProfile.getProfile(regionId);
// Tentukan peran RAM instans. Dalam contoh ini, EcsRamRoleTest digunakan.
String roleName = "EcsRamRoleTest";
// Konfigurasikan penyedia kredensial peran RAM instans.
AlibabaCloudCredentialsProvider provider = new InstanceProfileCredentialsProvider(roleName);
IAcsClient client = new DefaultAcsClient(profile, provider);
ListKeysRequest request = new ListKeysRequest();
try {
ListKeysResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
}Alibaba Cloud SDK V2.0
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
public static com.aliyun.kms20160120.Client createClient() throws Exception {
com.aliyun.credentials.models.Config credentialConfig = new com.aliyun.credentials.models.Config();
// Tipe kredensial.
credentialConfig.type = "ecs_ram_role";
// Opsional. Nama peran RAM instans dari instans ECS. Jika Anda tidak menyetel parameter ini, nama peran akan diperoleh secara otomatis. Namun, kami sarankan Anda memasukkan nama peran untuk mengurangi jumlah permintaan.
credentialConfig.roleName = "<your-ecsRamRoleName>";
com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(credentialConfig);
com.aliyun.teaopenapi.models.Config kmsClientConfig = new com.aliyun.teaopenapi.models.Config()
// Tetapkan titik akhir KMS, misalnya, kms.cn-hangzhou.aliyuncs.com.
.setEndpoint( "kms.cn-hangzhou.aliyuncs.com").
setCredential(credentialClient);
return new com.aliyun.kms20160120.Client(kmsClientConfig);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.kms20160120.Client client = Sample.createClient();
com.aliyun.kms20160120.models.ListKeysRequest listKeysRequest = new com.aliyun.kms20160120.models.ListKeysRequest();
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
client.listKeysWithOptions(listKeysRequest, runtime);
} catch (TeaException error) {
System.out.println(error.getMessage());
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
_error.printStackTrace();
}
}
}Secrets Manager Client
Untuk informasi lebih lanjut, lihat Klien rahasia.
Konfigurasikan parameter berikut dalam variabel lingkungan sistem atau file konfigurasi secretsmanager.properties.
Parameter
Nilai
credentials_type
Atur nilainya menjadi ecs_ram_role.
credentials_role_session_name
Nama peran RAM.
cache_client_region_id
ID wilayah dalam format [{"regionId":"<your region id>"}]. Ganti
<your region id>dengan ID wilayah Anda sebenarnya.Buat Klien Secrets Manager untuk mendapatkan nilai rahasia.
import com.aliyuncs.kms.secretsmanager.client.SecretCacheClient; import com.aliyuncs.kms.secretsmanager.client.SecretCacheClientBuilder; import com.aliyuncs.kms.secretsmanager.client.exception.CacheSecretException; import com.aliyuncs.kms.secretsmanager.client.model.SecretInfo; public class CacheClientEnvironmentSample { public static void main(String[] args) { try { // Buat Klien Secrets Manager. SecretCacheClient client = SecretCacheClientBuilder.newClient(); // Gunakan Klien Secrets Manager untuk mendapatkan informasi rahasia. SecretInfo secretInfo = client.getSecretInfo("#secretName#"); System.out.println(secretInfo); } catch (CacheSecretException e) { e.printStackTrace(); } } }
Klien Secret JDBC
Contoh berikut menjelaskan cara terhubung ke database MySQL menggunakan JDBC. Untuk informasi lebih lanjut, lihat Klien Secret JDBC.
Tambahkan file konfigurasi secretsmanager.properties ke kode proyek Anda.
## Tipe kredensial akses. credentials_type=ecs_ram_role ## Nama peran RAM instans yang dilampirkan ke instans ECS Anda. credentials_role_name=#credentials_role_name# ## Wilayah instans KMS. cache_client_region_id=[{"regionId":"#regionId#"}] ## Interval rotasi kustom. Nilai default: 21600000. Nilai minimum: 300000. Unit: milidetik. Nilai default setara dengan 6 jam, dan nilai minimum setara dengan 5 menit. refresh_secret_ttl=21600000Gunakan JDBC untuk terhubung ke database MySQL.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class SecretManagerJDBCSample { public static void main(String[] args) throws Exception { // Muat klien Secret JDBC (Nama SDK: com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver). Class.forName("com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver"); Connection connect = null; try { connect = DriverManager.getConnection("secrets-manager:mysql://<YOUR-MYSQL-IP>:<YOUR-MYSQL-PORT>/<YOUR-DATABASE-NAME>", "#your-mysql-secret-name#",""); } catch(SQLException e) { e.printStackTrace(); } } }
RAM secret plug-in
Untuk informasi lebih lanjut, lihat Plugin rahasia RAM.
Tambahkan file konfigurasi managed_credentials_providers.properties ke direktori kerja aplikasi Anda.
credentials_type=ecs_ram_role ## Nama peran RAM instans yang dilampirkan ke instans ECS Anda. credentials_role_name=#credentials_role_name# ## Wilayah instans KMS. cache_client_region_id=[{"regionId":"#regionId#"}]Buat klien Alibaba Cloud SDK untuk Java dan panggil layanan cloud.
Kode sampel berikut memberikan contoh cara memanggil operasi DescribeInstanceStatus dari ECS.
Saat menjalankan kode sampel berikut, tambahkan dependensi aliyun-java-sdk-ecs dari ECS ke file pom.xml.
import com.aliyuncs.IAcsClient; import com.aliyuncs.ecs.model.v20140526.DescribeInstanceStatusRequest; import com.aliyuncs.ecs.model.v20140526.DescribeInstanceStatusResponse; import com.aliyun.kms.secretsmanager.plugin.sdkcore.ProxyAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; public class AliyunSdkProviderSample { public static void main(String[]args) { String secretName="******"; /* Jika aplikasi tidak dapat diatur untuk membaca file konfigurasi default (managed_credentials_providers.properties) dari classpath dan paket executable jar, atau jika Anda ingin menentukan nama file kustom, Anda dapat menggunakan kode berikut untuk mengonfigurasi file kustom: 1. Jika your-config-name disetel ke nilai dalam format Jalur absolut + Nama file, sistem membaca file konfigurasi di jalur absolut. 2. Jika your-config-name disetel ke nama file, sistem pertama kali mengakses classpath untuk membaca file konfigurasi lalu mengakses paket JAR yang dapat dieksekusi untuk membaca file konfigurasi. */ //ConfigLoader.setConfigName("your-config-name"); // 1. Buat klien (Nama SDK: aliyun-java-sdk-managed-credentials-provider). IAcsClient client = null; try { client = new ProxyAcsClient("<the regionId of ECS>", secretName); } catch (ClientException e) { e.printStackTrace(); } // 2. Panggil operasi API ECS untuk mengimplementasikan fungsionalitas bisnis. DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest(); DescribeInstanceStatusResponse response; try { response = client.getAcsResponse(request); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } // 3. Matikan klien untuk melepaskan sumber daya terkait plugin. client.shutdown(); } }
Referensi
Kelola kredensial akses (Alibaba Cloud SDK V1.0)
Kelola kredensial akses (Alibaba Cloud SDK V2.0)
Untuk informasi lebih lanjut tentang peran RAM, lihat bagian berikut:
> Instance Settings > Attach/Detach RAM Role