全部产品
Search
文档中心

Resource Access Management:Gunakan token STS untuk mengizinkan aplikasi seluler mengakses sumber daya Alibaba Cloud

更新时间:Nov 10, 2025

Topik ini menjelaskan cara menggunakan token Security Token Service (STS) dari peran Resource Access Management (RAM) untuk mengizinkan aplikasi seluler mengakses sumber daya Alibaba Cloud.

Informasi latar belakang

Sebuah perusahaan mengembangkan aplikasi seluler dan mengaktifkan Object Storage Service (OSS). Aplikasi tersebut berjalan di perangkat seluler yang tidak dikendalikan oleh perusahaan. Perusahaan harus memberikan izin yang diperlukan agar aplikasi seluler dapat mengunggah dan mengunduh data ke/dari OSS.

Perusahaan memiliki persyaratan berikut:

  • Transmisi data langsung: Perusahaan tidak ingin semua aplikasi mentransfer data melalui server aplikasi sisi server. Sebaliknya, mereka ingin terhubung langsung ke OSS untuk mengunggah atau mengunduh data.

  • Kontrol keamanan: Perusahaan tidak ingin menyimpan Pasangan Kunci Akses di perangkat seluler karena perangkat tersebut dikendalikan oleh pengguna dan beroperasi di lingkungan yang tidak tepercaya.

  • Kontrol risiko: Risiko keamanan diminimalkan. Selama akses langsung ke OSS, setiap klien aplikasi diberi otorisasi berdasarkan prinsip hak istimewa minimal, dan durasi akses dikontrol secara ketat.

Solusi

Sebelum aplikasi seluler dapat langsung mengunggah atau mengunduh data dari OSS, aplikasi tersebut harus meminta kredensial akses dari server aplikasi. Server aplikasi menggunakan identitas Pengguna RAM untuk mengasumsikan Peran RAM, memanggil operasi API STS AssumeRole guna mendapatkan token STS, lalu meneruskan token tersebut ke aplikasi seluler. Aplikasi seluler kemudian dapat menggunakan token STS ini untuk mengakses OSS.

移动设备应用访问阿里云

  1. Aplikasi seluler meminta token STS dari server aplikasi.

  2. Perusahaan menggunakan Akun Alibaba Cloud-nya untuk membuat Peran RAM dan memberikan izin yang diperlukan kepada peran tersebut.

  3. Perusahaan menggunakan Akun Alibaba Cloud-nya untuk membuat Pengguna RAM bagi server aplikasi dan mengizinkan server aplikasi untuk mengasumsikan Peran RAM.

  4. Server aplikasi memanggil operasi STS AssumeRole untuk mendapatkan token STS dari Peran RAM.

    Untuk informasi selengkapnya, lihat Dapatkan token STS dari Peran RAM.

  5. Server aplikasi dapat meminta token STS yang memiliki izin lebih sedikit daripada kebijakan yang disambungkan ke Peran RAM. Dengan cara ini, server aplikasi mengontrol akses aplikasi seluler ke OSS.

  6. Aplikasi seluler menggunakan token STS untuk langsung mengunggah atau mengunduh data dari OSS.

    Untuk informasi selengkapnya, lihat Gunakan token STS untuk mengakses OSS.

Buat Peran RAM dan sambungkan kebijakan yang diperlukan ke peran tersebut

ID Akun Alibaba Cloud yang digunakan oleh perusahaan dalam bagian ini adalah 123456789012****.

  1. Perusahaan menggunakan Akun Alibaba Cloud-nya untuk membuat Peran RAM bernama oss-objectmanager. Akun Cloud dipilih sebagai tipe entitas tepercaya.

    Catatan

    Saat membuat Peran RAM, pilih Current Account sebagai entitas tepercaya, yang berarti hanya Pengguna RAM di bawah Akun Alibaba Cloud A yang dapat mengasumsikan Peran RAM ini.

    Untuk informasi selengkapnya, lihat Buat Peran RAM untuk akun Alibaba Cloud tepercaya.

    Setelah Peran RAM dibuat, perusahaan dapat melihat informasi tentang peran tersebut di halaman informasi dasar.

    • ARN Peran RAM adalah acs:ram::123456789012****:role/oss-objectmanager.

    • Kebijakan berikut disambungkan ke Peran RAM:

      Catatan

      Kebijakan ini menentukan bahwa hanya Pengguna RAM yang termasuk dalam Akun Alibaba Cloud A yang dapat mengasumsikan Peran RAM.

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                "acs:ram::123456789012****:root"
              ]
            }
          }
        ],
        "Version": "1"
      }
  2. Perusahaan menggunakan Akun Alibaba Cloud-nya untuk menyambungkan kebijakan AliyunOSSFullAccess ke Peran RAM oss-objectmanager. Kebijakan AliyunOSSFullAccess memberikan izin manajemen pada OSS.

    Untuk informasi selengkapnya, lihat Berikan izin kepada Peran RAM.

Buat Pengguna RAM dan izinkan pengguna tersebut untuk mengasumsikan Peran RAM

  1. Perusahaan menggunakan Akun Alibaba Cloud-nya untuk membuat Pengguna RAM bernama appserver.

    Untuk informasi selengkapnya, lihat Buat Pengguna RAM.

  2. Perusahaan menggunakan Akun Alibaba Cloud-nya untuk menyambungkan kebijakan AliyunSTSAssumeRoleAccess ke Pengguna RAM. Dengan demikian, Pengguna RAM dapat mengasumsikan Peran RAM.

    Untuk informasi selengkapnya, lihat Berikan izin kepada Pengguna RAM.

Dapatkan token STS dari Peran RAM

  1. Server aplikasi menggunakan Pasangan Kunci Akses Pengguna RAM untuk memanggil operasi AssumeRole STS.

    Catatan
    • Sebelum menggunakan Alibaba Cloud CLI, Anda perlu menginstal alat CLI di server aplikasi dan mengonfigurasi kredensial menggunakan Pasangan Kunci Akses Pengguna RAM. Untuk informasi selengkapnya, lihat Referensi CLI STS.

    • Dalam contoh CLI ini, parameter Policy tidak ditentukan. Oleh karena itu, token STS yang dikembalikan memiliki semua izin dari Peran RAM oss-objectmanager. Server aplikasi juga dapat meminta token STS dengan izin lebih sedikit daripada kebijakan yang disambungkan ke Peran RAM. Untuk informasi selengkapnya, lihat Minta token STS yang memiliki izin lebih sedikit daripada kebijakan yang disambungkan ke Peran RAM.

    Contoh berikut menunjukkan cara menggunakan Alibaba Cloud CLI untuk memanggil operasi AssumeRole:

    aliyun sts AssumeRole --RoleArn 'acs:ram::123456789012****:role/oss-objectmanager' --RoleSessionName 'client-001'
  2. Layanan STS mengirimkan token STS ke server aplikasi. Token STS berisi elemen-elemen berikut: AccessKeyId, AccessKeySecret, dan SecurityToken.

    Output berikut dikembalikan:

    {
         "AssumedRoleUser": {
             "AssumedRoleId": "391578752573****:client-001",
             "Arn": "acs:ram::123456789012****:role/oss-objectmanager/client-001"
         }, 
         "Credentials": {
             "AccessKeySecret": "yourAccessKeySecret",
             "SecurityToken": "yourSecurityToken",
             "Expiration": "2016-01-13T15:02:37Z",
             "AccessKeyId": "yourAccessKeyId"
         }, 
         "RequestId": "E1779AAB-E7AF-47D6-A9A4-53128708B6CE"
     }
    Catatan

    Token STS SecurityToken hanya berlaku untuk periode singkat. Jika aplikasi seluler memerlukan akses ke OSS dalam jangka waktu lama, server aplikasi harus meminta token STS baru secara berkala. Misalnya, server aplikasi dapat meminta token STS baru setiap 1.800 detik.

Minta token STS yang memiliki izin lebih sedikit daripada kebijakan yang disambungkan ke Peran RAM

Anda dapat menggunakan parameter Policy untuk membatasi izin token STS yang berbeda berdasarkan pengguna atau perangkat guna mencegah akses tidak sah.

Dalam contoh ini, token STS yang dikembalikan memiliki izin hanya untuk mengunduh objek yang cocok dengan pola sample-bucket/2015/01/01/*.jpg.

  • Contoh permintaan

    aliyun sts AssumeRole --RoleArn 'acs:ram::123456789012****:role/oss-objectmanager' --RoleSessionName 'client-002' --Policy '{"Version":"1", "Statement": [{"Effect":"Allow", "Action":"oss:GetObject", "Resource":"acs:oss:*:*:sample-bucket/2015/01/01/*.jpg"}]}'
    Catatan

    Periode validitas default token STS adalah 3.600 detik. Anda dapat menentukan parameter DurationSeconds untuk membatasi periode validitas token STS. Untuk informasi selengkapnya, lihat AssumeRole - Dapatkan kredensial identitas sementara untuk peran.

  • Contoh tanggapan

    {
       "AssumedRoleUser": {
           "AssumedRoleId": "391578752573****:client-002",
           "Arn": "acs:ram::123456789012****:role/oss-objectmanager/client-002"
       },
       "Credentials": {
           "AccessKeySecret": "yourAccessKeySecret",
           "SecurityToken": "yourSecurityToken",
           "Expiration": "2016-01-13T15:03:39Z",
           "AccessKeyId": "yourAccessKeyId"
       }, 
       "RequestId": "98835D9B-86E5-4BB5-A6DF-9D3156ABA567"
    }

Gunakan token STS untuk mengakses OSS

  1. Server aplikasi meneruskan token keamanan sementara ke aplikasi.

  2. Aplikasi seluler menggunakan token STS untuk mengakses OSS.

    Contoh ini menunjukkan cara mengintegrasikan OSS Android SDK dalam aplikasi Android dan menggunakan token STS untuk mengakses OSS guna mengunduh file jarak jauh ke perangkat lokal. Kode contoh berikut memberikan ilustrasi:

    // Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
    String endpoint = "yourEndpoint";
    // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah menjadi cn-hangzhou.
    String region = "yourRegion";
    
    // Pasangan AccessKey sementara (AccessKeyID dan AccessKeySecret) yang diperoleh dari layanan STS.
    String accessKeyId = "yourAccessKeyId";
    String accessKeySecret = "yourAccessKeySecret";
    // Token keamanan sementara (SecurityToken) yang diperoleh dari layanan STS.
    String securityToken = "yourSecurityToken";
    
    OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
    ClientConfiguration config = new ClientConfiguration();
    config.setSignVersion(SignVersion.V4);
    // Buat instance OSSClient.
    OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
    oss.setRegion(region);
    // Buat permintaan pengunduhan objek.
    GetObjectRequest get = new GetObjectRequest("sample-bucket", "2015/01/01/grass.jpg");
    
    OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
        @Override
        public void onSuccess(GetObjectRequest request, GetObjectResult result) {
            // Objek berhasil diunduh.
            Log.d("asyncGetObject", "DownloadSuccess");
            Log.d("Content-Length", "" + result.getContentLength());
            
            try (InputStream inputStream = result.getObjectContent()) {
                byte[] buffer = new byte[2048];
                int len;
                while ((len = inputStream.read(buffer)) != -1) {
                // Proses data
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        // Jika permintaan GetObject berhasil, GetObjectResult dikembalikan. GetObjectResult mencakup instance aliran input. Anda perlu menangani aliran input yang dikembalikan.
        public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
            // Tangani pengecualian permintaan.
            if (clientExcepion != null) {
                // Tangani pengecualian klien, seperti pengecualian jaringan.
                clientExcepion.printStackTrace();
            }
            if (serviceException != null) {
                // Tangani pengecualian layanan.
                Log.e("ErrorCode", serviceException.getErrorCode());
                Log.e("RequestId", serviceException.getRequestId());
                Log.e("HostId", serviceException.getHostId());
                Log.e("RawMessage", serviceException.getRawMessage());
            }
        }
    });
    // Batalkan tugas pengunduhan.
    // task.cancel(); 
    // Tunggu hingga objek selesai diunduh.
    // task.waitUntilFinished();