Topik ini menjelaskan cara menggunakan Konsol Resource Access Management (RAM) dan SDK untuk memperoleh token keamanan sementara dari Security Token Service (STS) serta menerapkan otorisasi lintas akun guna melihat sumber daya di Function Compute.
Skenario
Perusahaan A menggunakan Function Compute dan memerlukan Perusahaan B untuk mengelola sumber daya Function Compute-nya. Perusahaan A memiliki persyaratan berikut:
Perusahaan A ingin fokus pada sistem bisnisnya dan hanya bertindak sebagai pemilik sumber daya Function Compute-nya. Perusahaan A dapat memberi otorisasi kepada Perusahaan B untuk mengelola sumber daya tertentu, seperti layanan dan fungsi.
Perusahaan A tidak ingin mengubah izin ketika seorang karyawan Perusahaan B bergabung atau keluar. Perusahaan B dapat memberikan izin tertentu kepada pengguna RAM-nya sendiri untuk mengakses sumber daya milik Perusahaan A.
Jika kontrak antara kedua perusahaan berakhir, Perusahaan A dapat mencabut otorisasi dari Perusahaan B kapan saja.
Gunakan konsol
Asumsikan bahwa Perusahaan A perlu memberi otorisasi kepada karyawan Perusahaan B untuk mengakses semua layanan di Function Compute. Perusahaan A menggunakan Akun Alibaba Cloud A, sedangkan Perusahaan B menggunakan Akun Alibaba Cloud B.
ID Akun A adalah
123456789012****, dan alias akun (alias perusahaan)-nya adalahcompany-a.ID Akun B adalah
134567890123****, dan alias akun (alias perusahaan)-nya adalahcompany-b.
Step 1: Create A RAM Role By Using Account A
Gunakan Akun A untuk membuat peran RAM dan memberikan izin yang diperlukan. Saat membuat peran tersebut, pilih Akun B untuk opsi Other Alibaba Cloud Account. Hal ini memungkinkan Akun B untuk mengasumsikan peran tersebut.
Gunakan Akun A untuk masuk ke Konsol RAM.
Di panel navigasi sebelah kiri, pilih .
Pada halaman Roles, klik Create Role.

Pada 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 tersebut, pilih Current Account.
Other Account: Jika Anda ingin pengguna RAM atau peran RAM yang termasuk dalam akun Alibaba Cloud berbeda mengasumsikan peran RAM tersebut, pilih Other Account dan masukkan ID akun Alibaba Cloud tersebut. Opsi ini disediakan untuk memberikan izin atas sumber daya yang dimiliki oleh akun Alibaba Cloud berbeda. Untuk informasi selengkapnya, lihat Akses sumber daya lintas akun Alibaba Cloud. Anda dapat melihat ID akun Alibaba Cloud Anda di halaman Security Settings.
Konfigurasikan informasi untuk peran fc-admin.
Masukkan Role Name.
Masukkan note.
Atur Other Alibaba Cloud Account menjadi ID Akun B.
Catatan
Jika Anda hanya ingin pengguna RAM tertentu yang dapat mengasumsikan peran RAM ini, bukan semua pengguna RAM dari akun Alibaba Cloud tersebut, gunakan salah satu metode berikut:
Ubah kebijakan kepercayaan peran RAM tersebut. Untuk informasi selengkapnya, lihat Ubah kebijakan kepercayaan peran RAM.
Ubah kebijakan yang disambungkan ke pengguna RAM agar mereka dapat mengasumsikan peran tersebut. Untuk informasi selengkapnya, lihat FAQ tentang peran RAM dan token STS.
Anda dapat melihat ID akun Alibaba Cloud Anda di halaman .
Klik Finish.
Klik Close.
Gunakan Akun A untuk menyambungkan izin AliyunFCReadOnlyAccess ke peran RAM yang baru dibuat. Untuk informasi selengkapnya, lihat Berikan izin kepada peran RAM.
Setelah peran RAM dibuat, Anda dapat melihat Nama Sumber Daya Alibaba Cloud (ARN) dan kebijakan kepercayaannya di halaman detail peran:
ARN peran RAM tersebut adalah:
acs:ram::123456789012****:role/fc-admin.Kebijakan kepercayaan peran RAM tersebut adalah sebagai berikut:
CatatanKebijakan ini menunjukkan bahwa hanya pengguna RAM yang termasuk dalam Akun B yang dapat mengasumsikan peran RAM ini.
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::134567890123****:root" ] } } ], "Version": "1" }
Step 2: Create A RAM User By Using Account B
Gunakan Akun B untuk membuat pengguna RAM bagi karyawannya. Untuk informasi selengkapnya, lihat Buat pengguna RAM.
Gunakan Akun B untuk menyambungkan izin AliyunSTSAssumeRoleAccess ke pengguna RAM yang baru dibuat. Hal ini memungkinkan pengguna RAM tersebut untuk mengasumsikan peran RAM. Untuk informasi selengkapnya, lihat Berikan izin kepada pengguna RAM.
Step 3: Switch Logon Identity
Jika pengguna RAM dari Akun B perlu mengakses sumber daya milik Akun A, pengguna RAM tersebut dapat mengasumsikan peran RAM milik Akun A untuk mengakses sumber daya tersebut. Lakukan langkah-langkah berikut:
Gunakan pengguna RAM dari Akun B untuk masuk ke Konsol RAM.
Untuk informasi selengkapnya tentang cara pengguna RAM masuk ke konsol, lihat Masuk ke Konsol Manajemen Alibaba Cloud sebagai pengguna RAM.
Arahkan kursor ke gambar profil di pojok kanan atas dan klik Switch Identity.
Masukkan alias perusahaan (alias akun), nama domain default, atau ID akun Alibaba Cloud tempat peran RAM tersebut berada. Untuk informasi selengkapnya, lihat Lihat dan ubah nama domain default.
Masukkan nama peran RAM tersebut. Untuk informasi selengkapnya, lihat Lihat informasi tentang peran RAM.
Untuk informasi selengkapnya, lihat Mengasumsikan peran RAM.
(Optional) Revoke Authorization
Jika kerja sama antara Perusahaan A dan Perusahaan B berakhir, Perusahaan A dapat mencabut izin bagi Akun B untuk mengasumsikan peran RAM tersebut. Dengan demikian, semua pengguna RAM Akun B secara otomatis kehilangan izin untuk mengasumsikan peran RAM tersebut. Lakukan langkah-langkah berikut:
Gunakan Akun A untuk masuk ke Konsol RAM.
Di panel navigasi kiri, pilih .
Pada halaman Roles, temukan peran RAM yang dituju dan klik Delete Role di kolom Actions.
Di kotak dialog Delete Role, masukkan nama peran RAM tersebut dan klik Delete Role.
Sebelum menghapus peran RAM, Anda harus menghapus izin-izinnya terlebih dahulu. Untuk informasi selengkapnya, lihat Hapus izin dari peran RAM.
Gunakan SDK
Anda dapat menggunakan STS untuk memberikan akses sementara ke Function Compute. STS adalah layanan web yang menyediakan token akses sementara bagi pengguna komputasi awan. Contoh berikut menunjukkan bagaimana Akun B dapat memperoleh izin untuk melihat semua layanan di Akun A.
Prerequisites
Procedure
Gunakan Akun A untuk membuat peran RAM dan pilih Akun B sebagai akun tepercaya.
Untuk informasi selengkapnya, lihat Buat peran RAM untuk akun Alibaba Cloud tepercaya.
Gunakan Akun B untuk membuat pengguna RAM dan berikan izin kepada pengguna tersebut untuk mengasumsikan peran RAM.
Untuk informasi selengkapnya, lihat Buat pengguna RAM dan Berikan izin kepada pengguna RAM.
Dalam fungsi milik Akun B, masukkan kode contoh berikut untuk memperoleh kredensial akses sementara. Untuk informasi selengkapnya, lihat Ikhtisar SDK STS dan AssumeRole.
const Core = require('@alicloud/pop-core'); // Bangun klien Alibaba Cloud untuk mengirim permintaan. /* Pasangan AccessKey akun Alibaba Cloud memiliki izin atas semua operasi API. Kami menyarankan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Jangan menyematkan ID AccessKey dan Rahasia AccessKey secara langsung dalam kode proyek Anda. Jika tidak, pasangan AccessKey tersebut dapat bocor, sehingga membahayakan keamanan semua sumber daya Anda. Contoh ini menunjukkan cara menggunakan variabel lingkungan untuk menyimpan pasangan AccessKey guna verifikasi identitas. Sebelum menjalankan contoh ini, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET di lingkungan lokal Anda. Di lingkungan runtime Function Compute, variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET dikonfigurasi secara otomatis setelah Anda mengatur izin eksekusi. */ var client = new Core({ accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], endpoint: 'https://sts.aliyuncs.com', apiVersion: '2015-04-01' }); // Atur parameter. var params = { "RegionId": "cn-hangzhou", "RoleArn": "<RoleARN>", "RoleSessionName": "<RoleSessionName>" } var requestOption = { method: 'POST' }; // Kirim permintaan dan dapatkan tanggapan. client.request('AssumeRole', params, requestOption).then((result) => { console.log(JSON.stringify(result)); }, (ex) => { console.log(ex); })# -*- coding: utf-8 -*- from alibabacloud_tea_openapi.models import Config from alibabacloud_sts20150401.client import Client from alibabacloud_sts20150401.models import AssumeRoleRequest def main(): # Masukkan pasangan AccessKey sementara, termasuk token sementara. # Pasangan AccessKey akun Alibaba Cloud memiliki izin atas semua operasi API. Kami menyarankan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. # Jangan menyematkan ID AccessKey dan Rahasia AccessKey secara langsung dalam kode proyek Anda. Jika tidak, pasangan AccessKey tersebut dapat bocor, sehingga membahayakan keamanan semua sumber daya Anda. # Contoh ini menunjukkan cara menggunakan variabel lingkungan untuk menyimpan pasangan AccessKey guna verifikasi identitas. # Sebelum menjalankan contoh ini, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET di lingkungan lokal Anda. # Di lingkungan runtime Function Compute, variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET dikonfigurasi secara otomatis setelah Anda mengatur izin eksekusi. AccessKeySecret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') AccessKeyId=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID') regionId ='cn-hangzhou' config = Config( access_key_id='<ACCESS-KEY-ID>', access_key_secret='<ACCESS-KEY-SECRET>', region_id='cn-hangzhou' ) client = Client(config) assume_role_request = AssumeRoleRequest( duration_seconds=3600, role_arn='<RoleARN>', role_session_name='fc-python-sdk' ) response = client.assume_role(assume_role_request) response_json = json.loads(str(response.body).replace("'", "\"")) result = json.dumps(response_json) print(result) if __name__ == "__main__": main()Keluaran yang diharapkan.
{ "RequestId": "964E0EC5-575B-4FF5-8FD0-D4BD8025602A", "AssumedRoleUser": { "Arn": "acs:ram::****:role/wss/wss", "AssumedRoleId": "***********:wss" }, "Credentials": { "SecurityToken": "*************", "AccessKeyId": "STS.*************", "AccessKeySecret": "*************", "Expiration": "2023-05-28T11:23:19Z" } }CatatanUntuk jawaban atas pertanyaan umum mengenai cara memperoleh
SecurityToken, lihat FAQ tentang peran RAM dan token STS.Ubah kode fungsi milik Akun B untuk memberikan izin kepada pengguna RAM-nya agar dapat melihat semua layanan milik Akun A di Function Compute.
Kode contoh:
const FC = require('@alicloud/fc2'); // Bangun klien. // Atur informasi kunci ke informasi kunci sementara yang diperoleh. /* Pasangan AccessKey akun Alibaba Cloud memiliki izin atas semua operasi API. Kami menyarankan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Jangan menyematkan ID AccessKey dan Rahasia AccessKey secara langsung dalam kode proyek Anda. Jika tidak, pasangan AccessKey tersebut dapat bocor, sehingga membahayakan keamanan semua sumber daya Anda. Contoh ini menunjukkan cara menggunakan variabel lingkungan untuk menyimpan pasangan AccessKey guna verifikasi identitas. Sebelum menjalankan contoh ini, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan ALIBABA_CLOUD_SECURITY_TOKEN di lingkungan lokal Anda. Di lingkungan runtime Function Compute, variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan ALIBABA_CLOUD_SECURITY_TOKEN dikonfigurasi secara otomatis setelah Anda mengatur izin eksekusi. */ const client = new FC('<accountID>', { region: '<yourRegionID>', accessKeyID: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], securityToken: process.env['ALIBABA_CLOUD_SECURITY_TOKEN'], accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], }); // Dapatkan daftar layanan. client.listServices().then(res => { console.log(JSON.stringify(res, null, ' ')) }).catch(ex=> console.log(ex))PentingPastikan bahwa peran yang dibuat oleh Akun A—yaitu peran yang diotorisasi oleh kunci sementara—memiliki izin untuk mengambil daftar layanan.