全部产品
Search
文档中心

Elastic Compute Service:Gunakan peran RAM untuk mengontrol akses ke ECS

更新时间:Nov 25, 2025

Peran Resource Access Management (RAM) di Alibaba Cloud analog dengan lencana akses sementara yang diberikan kepada pengunjung di sebuah perusahaan. Peran RAM memungkinkan pengguna mengasumsikan identitas sementara untuk melakukan tindakan manajemen dalam cakupan tertentu, seperti akses lintas akun, Single Sign-On (SSO) berbasis peran, dan otorisasi sementara.

Kasus Penggunaan

Topik ini menggunakan skenario umum akses lintas akun untuk menggambarkan prosesnya. Misalnya, asumsikan perusahaan Anda menjalankan situs web e-commerce yang di-deploy pada Alibaba Cloud Elastic Compute Service (ECS). Departemen TI Anda menangani operasi dan pemeliharaan (O&M) harian. Kadang-kadang, Anda mungkin memerlukan bantuan mitra eksternal untuk menangani isu teknis tertentu atau tugas pemeliharaan khusus. Untuk menjaga keamanan sumber daya cloud Anda, Anda tidak ingin membagikan kredensial jangka panjang—seperti Akun Alibaba Cloud atau Pengguna RAM—kepada mitra eksternal tersebut.

Diagram berikut menggambarkan cara menggunakan peran RAM untuk memberikan izin akses lintas akun:

Akun A: Akun Alibaba Cloud perusahaan Anda.

Akun B: Akun Alibaba Cloud mitra eksternal Anda.

  1. Akun A membuat peran RAM dan memberikan izin kepada Akun B untuk mengasumsikan peran tersebut.

  2. Akun B membuat Pengguna RAM dan memberikan izin kepada pengguna tersebut untuk mengasumsikan peran tersebut.

  3. Pengguna RAM dari Akun B mengasumsikan peran RAM milik Akun A untuk mengelola sumber daya Akun A.

Prosedur

Buat peran RAM dan berikan izin di Akun A

1. Buat peran RAM

Login ke RAM console menggunakan Akun A. Buat peran RAM dan atur entitas tepercaya menjadi Akun Alibaba Cloud. Pada halaman Create Role, untuk Principal Name, pilih Other Account dan masukkan UID Akun B. Untuk informasi lebih lanjut, lihat Create a RAM role for a trusted Alibaba Cloud account.

2. Berikan izin kepada peran RAM

Buat kebijakan akses yang memungkinkan pengguna melihat informasi instans dan login ke instans ECS menggunakan Workbench. Kemudian, sambungkan kebijakan akses tersebut ke peran RAM. Untuk informasi lebih lanjut, lihat Create custom policies.

Kebijakan akses sementara untuk asumsi peran oleh pengunjung

Kebijakan akses ini memberikan izin untuk melihat informasi instans ECS dan login ke instans ECS guna melakukan operasi terkait.

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:List*",
                "ecs:Describe*",
                "ecs-workbench:LoginInstance"
            ],
            "Resource": "*"
        }
    ]
}

Buat Pengguna RAM dan berikan izin di Akun B

1. Buat pengguna RAM

Login ke RAM console menggunakan Akun B. Buat Pengguna RAM. Saat membuat Pengguna RAM, pilih Console Access dan Using permanent AccessKey to access. Untuk informasi lebih lanjut, lihat Create a RAM user.

2. Berikan izin kepada pengguna RAM

Sebelum Pengguna RAM dapat mengasumsikan peran RAM, Anda harus memberikan izin yang diperlukan kepadanya. Gunakan Akun B untuk menyambungkan kebijakan AliyunSTSAssumeRoleAccess ke Pengguna RAM. Kebijakan ini memungkinkan Pengguna RAM mengasumsikan semua peran RAM. Untuk informasi lebih lanjut, lihat Grant permissions to a RAM user.

Untuk membatasi agar Pengguna RAM hanya dapat mengasumsikan peran RAM tertentu, lihat Can I specify the RAM role that a RAM user can assume?

Mengasumsikan Peran RAM

Mengasumsikan peran di konsol

  1. Login ke RAM user logon page menggunakan Pengguna RAM yang telah Anda buat untuk Akun B.

  2. Arahkan kursor ke gambar profil di pojok kanan atas dan klik Switch Identity.

  3. Pada halaman Switch Role, masukkan informasi yang diperlukan dan klik Submit. Dalam contoh ini, masukkan UID Akun A dan nama peran RAM.

  4. Verifikasi izin akses.

    Login ke ECS console dan lihat informasi tentang instans ECS Alibaba Cloud.

    Verifikasi 1: Pengguna RAM dapat mengasumsikan peran RAM Akun A untuk melihat informasi instans ECS dan juga dapat login ke instans menggunakan alat koneksi jarak jauh Workbench.

    Verifikasi 2: Ketika Akun A mencabut otorisasi, Pengguna RAM tidak lagi dapat melihat informasi instans ECS milik Akun A.

Mengasumsikan peran saat melakukan panggilan program

Anda juga dapat mengakses sumber daya Akun A menggunakan kode program. Proses umumnya adalah sebagai berikut:

  1. Atur variabel lingkungan sistem ke AccessKey yang Anda peroleh saat membuat Pengguna RAM untuk Akun B. Metode pengaturan variabel lingkungan berbeda-beda tergantung sistem operasinya. Untuk informasi lebih lanjut, lihat Configure environment variables in Linux, macOS, and Windows.

  2. Gunakan Pengguna RAM Akun B untuk memanggil API AssumeRole. Kirimkan ARN peran RAM Akun A untuk mendapatkan token Security Token Service (STS) sementara.

  3. Gunakan token STS yang diperoleh untuk memanggil API layanan Alibaba Cloud terkait guna melihat sumber daya cloud milik Akun A.

Kode contoh Java

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>ecs20140526</artifactId>
  <version>5.4.4</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>sts20150401</artifactId>
  <version>1.1.4</version>
</dependency>
<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>credentials-java</artifactId>
   <version>0.3.10</version>
</dependency>
import com.aliyun.ecs20140526.models.DescribeInstancesRequest;
import com.aliyun.ecs20140526.models.DescribeInstancesResponse;
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;
import com.google.gson.Gson;

/**
 * Mengasumsikan peran RAM untuk mendapatkan kredensial akses sementara, lalu gunakan kredensial tersebut untuk mengakses sumber daya ECS.
 */
public class Sample {
    public static void main(String[] args) {
        // Ini hanya untuk tujuan demonstrasi. Pilih titik akhir spesifik wilayah sesuai kebutuhan bisnis aktual Anda.
        String stsEndpoint = "sts.cn-shanghai.aliyuncs.com";
        String ecsEndpoint = "ecs.cn-shanghai.aliyuncs.com";
        // Menanyakan informasi instans ECS di cn-shanghai.
        String regionId = "cn-shanghai";
        // ARN peran RAM yang akan diasumsikan.
        String ramRoleArn = "acs:ram::14************16:role/cooperativepartnerrole";

        // Gunakan Pengguna RAM Akun B untuk mengasumsikan peran RAM Akun A dan mendapatkan kredensial akses sementara.
        AssumeRoleResponse assumeRoleResponse = playRamRole(stsEndpoint, ramRoleArn);
        // Panggil API yang disediakan oleh layanan Alibaba Cloud untuk melihat sumber daya cloud milik Akun A.
        accessResources(assumeRoleResponse, ecsEndpoint, regionId);
    }

    /**
     * Gunakan kredensial akses sementara untuk mengakses sumber daya cloud.
     *
     * @param assumeRoleResponse Objek respons yang berisi kredensial akses sementara.
     */
    private static void accessResources(AssumeRoleResponse assumeRoleResponse, String ecsEndpoint, String regionId) {
        try {
            // Ekstrak informasi kredensial akses sementara.
            AssumeRoleResponseBody.AssumeRoleResponseBodyCredentials assumeRoleResponseBodyCredentials = assumeRoleResponse.body.credentials;
            com.aliyun.credentials.models.Config credentialsConfig = new com.aliyun.credentials.models.Config()
                    .setType("sts") // Jenis kredensial.
                    .setAccessKeyId(assumeRoleResponseBodyCredentials.accessKeyId)
                    .setAccessKeySecret(assumeRoleResponseBodyCredentials.accessKeySecret)
                    .setSecurityToken(assumeRoleResponseBodyCredentials.securityToken);
            com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(credentialsConfig);

            // Buat klien ECS.
            Config ecsConfig = new Config()
                    .setEndpoint(ecsEndpoint)
                    .setCredential(credentialClient);
            com.aliyun.ecs20140526.Client ecsClient = new com.aliyun.ecs20140526.Client(ecsConfig);
            DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest()
                    .setRegionId(regionId);
            RuntimeOptions runtimeOptions = new RuntimeOptions();

            // Panggil API DescribeInstances dan dapatkan respons.
            DescribeInstancesResponse response = ecsClient.describeInstancesWithOptions(describeInstancesRequest, runtimeOptions);
            // Cetak respons.
            System.out.println(new Gson().toJson(response.body));
        } catch (Exception e) {
            throw new RuntimeException("AccessResources failed: " + e.getMessage());
        }
    }

    /**
     * Mengasumsikan peran RAM untuk mendapatkan kredensial akses sementara.
     *
     * @return Objek respons yang berisi kredensial akses sementara.
     */
    private static AssumeRoleResponse playRamRole(String stsEndpoint, String ramRoleArn) {
        try {
            // Buat objek StsClient dan panggil operasi assumeRole untuk mendapatkan token STS.
            Config config = new Config()
                    // System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") mengambil nilai ID AccessKey dari variabel lingkungan.
                    .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                    // System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") mengambil nilai Rahasia AccessKey dari variabel lingkungan.
                    .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            config.endpoint = stsEndpoint;
            Client client = new Client(config);
            // Buat objek AssumeRoleRequest dan tentukan ARN peran RAM yang akan diasumsikan serta nama sesi peran.
            AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest()
                    .setRoleArn(ramRoleArn)
                    .setRoleSessionName("CooperativePartner");
            RuntimeOptions runtime = new RuntimeOptions();
            return client.assumeRoleWithOptions(assumeRoleRequest, runtime);
        } catch (Exception e) {
            throw new RuntimeException("play RAM role failed: " + e.getMessage());
        }
    }
}

Hasil: Program mengembalikan daftar sumber daya ECS milik Akun A di wilayah China (Shanghai).

{
    "instances":{
        "instance":[
            {
                "creationTime":"2024-10-23T09:12Z",
                "expiredTime":"2099-12-31T15:59Z",
                "hostName":"iZ********************pZ",
                "imageId":"m-uf****************jf",
                "instanceChargeType":"PostPaid",
                "instanceId":"i-uf****************ap",
                "instanceName":"launch-advisor-20241023-c6",
                "instanceNetworkType":"vpc",
                "instanceType":"ecs.c6.xlarge",
                ...
                // Beberapa parameter dihilangkan.
                ...
                "vpcAttributes":{
                    "natIpAddress":"",
                    "privateIpAddress":{
                        "ipAddress":[
                            "17*.**.**.*15"
                        ]
                    },
                    "vSwitchId":"vsw-uf*****************tk",
                    "vpcId":"vpc-uf*****************kr"
                },
                "zoneId":"cn-shanghai-b"
            }
        ]
    },
    "nextToken":"",
    "pageNumber":1,
    "pageSize":10,
    "requestId":"C1468F7E********************7A3A712",
    "totalCount":1
}

Referensi

  • RAM adalah layanan Alibaba Cloud yang dapat Anda gunakan untuk mengelola identitas pengguna dan izin akses sumber daya. Untuk informasi lebih lanjut, lihat What is RAM?

  • Untuk informasi lebih lanjut tentang cara Pengguna RAM mengasumsikan peran RAM, lihat Assume a RAM role.

  • Untuk informasi lebih lanjut tentang SSO berbasis peran, lihat Role-based SSO.