Peran Resource Access Management (RAM) instans merupakan peran layanan yang dapat dihubungkan ke instans Elastic Compute Service (ECS). Entitas tepercaya untuk peran RAM instans adalah ECS. Anda dapat menggunakan peran RAM instans untuk mendapatkan Token Layanan Keamanan (STS) dari dalam instans ECS tanpa perlu memberikan Pasangan Kunci Akses. Token STS tersebut kemudian dapat digunakan untuk memanggil operasi API layanan Alibaba Cloud lainnya. Dengan menggunakan kredensial identitas sementara yang hanya dapat diperoleh dari dalam instans, tidak diperlukan konfigurasi Pasangan Kunci Akses. Pendekatan ini meningkatkan keamanan Pasangan Kunci Akses akun Alibaba Cloud Anda serta memungkinkan pengelolaan izin secara lebih rinci melalui RAM.
Manfaat
Pemanggilan API yang aman dan nyaman di dalam instans: Saat proyek diterapkan di Alibaba Cloud ECS, Anda tidak perlu mengonfigurasi Pasangan Kunci Akses di kode. Sebagai gantinya, gunakan kemampuan ECS untuk mendapatkan token STS guna memanggil API. Hal ini mengurangi risiko kebocoran Pasangan Kunci Akses.
Pengalihan identitas RAM yang disederhanakan: Jika menggunakan Pasangan Kunci Akses tradisional, Anda harus mengubah konfigurasi atau kode serta memulai ulang layanan untuk mengubah identitas RAM yang memanggil layanan tersebut. Dengan menggunakan Peran RAM Instans, cukup sesuaikan peran RAM yang diberikan kepada instans ECS untuk beralih identitas tanpa perubahan tambahan.
Pengelolaan izin dengan detail halus: Tetapkan peran RAM dengan kebijakan otorisasi spesifik ke instans ECS yang berbeda. Ini memungkinkan penerapan kontrol akses dengan detail halus sesuai kebutuhan.
Batasan
Batasan berikut berlaku saat menyambungkan peran RAM ke instans ECS:
Jenis jaringan instans ECS harus berupa virtual private cloud (VPC).
Hanya satu peran RAM yang dapat disambungkan ke instans ECS.
Prosedur
Jika menggunakan akun Alibaba Cloud, Anda dapat melewati langkah-langkah otorisasi berikut. Namun, jika menggunakan Pengguna RAM atau Peran RAM untuk operasi ini, pastikan memberikan izin yang diperlukan kepada identitas tersebut.
Buat peran RAM dan sambungkan ke instans ECS
Buat dan sambungkan peran di Konsol
Masuk ke Konsol Resource Access Management (RAM) untuk membuat peran RAM dan memberikan izin.
Buat Peran RAM untuk Layanan Alibaba Cloud yang terpercaya.
Pilih Identities > Roles, klik Create Role, dan ikuti petunjuk di layar untuk membuat peran. Perhatikan parameter berikut dan konfigurasikan parameter lainnya sesuai kebutuhan. Untuk informasi lebih lanjut, lihat Buat peran layanan reguler:
Untuk Jenis entitas tepercaya, pilih Alibaba Cloud Service.
Untuk Layanan Tepercaya, pilih Elastic Compute Service.
Berikan izin kepada peran RAM yang dibuat.
Sambungkan kebijakan sistem atau kebijakan kustom ke peran RAM untuk memberikannya akses sumber daya atau izin operasi yang diperlukan. Misalnya, berikan kebijakan sistem AliyunOSSReadOnlyAccess kepada peran RAM.
Jika kebijakan sistem tidak memenuhi kebutuhan Anda, berikan izin kepada peran RAM dengan membuat kebijakan kustom. Untuk informasi lebih lanjut, lihat Buat kebijakan kustom.
Sambungkan peran RAM ke instans ECS.
Pergi ke Konsol ECS - Instans. Di bilah navigasi atas, pilih wilayah dan kelompok sumber daya target.
Temukan instans ECS target, dan pilih .
Di kotak dialog, pilih peran RAM instans yang telah dibuat, lalu klik OK.
Buat dan sambungkan peran menggunakan API
Buat peran RAM dan berikan izin.
Panggil operasi CreateRole untuk membuat peran RAM.
Atur parameter AssumeRolePolicyDocument ke kebijakan kepercayaan berikut:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "ecs.aliyuncs.com" ] } } ], "Version": "1" }(Opsional) Panggil operasi CreatePolicy untuk membuat kebijakan akses baru.
Jika memiliki kebijakan akses yang tersedia, Anda dapat melewati langkah ini.
Atur parameter
PolicyDocumentsebagai berikut:{ "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" }Panggil operasi AttachPolicyToRole untuk memberikan izin kepada peran RAM instans.
Panggil operasi AttachInstanceRamRole untuk menyambungkan peran RAM ke instans ECS.
Dapatkan kredensial identitas sementara untuk peran RAM instans
Anda dapat memperoleh kredensial akses sementara dari dalam instans ECS dengan mengakses layanan metadata. Validitas kredensial akses sementara dikelola secara otomatis. Untuk informasi lebih lanjut, lihat Metadata instans.
Metode 1: Gunakan alat Credentials dalam program
Alat Credentials mencakup logika pemanggilan ECS Instance Metadata Service (IMDS) untuk mendapatkan token STS serta mendukung pembaruan berkala.
Python
Instal alat Credentials.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, versi alibabacloud_credentials harus 0.3.6 atau lebih baru.
pip install alibabacloud_credentialsKonfigurasikan peran RAM instans ECS sebagai kredensial akses.
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_credentials.models import Config as CredConfig credentialsConfig = CredConfig( type='ecs_ram_role', # Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami sarankan Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat menyetel nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. role_name='<role_name>', # Opsional. Nilai defaultnya adalah false. Jika Anda menyetel ini ke true, mode penguatan keamanan diterapkan. Jika Anda menyetel ini ke false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika upaya gagal, sistem mencoba lagi dalam mode normal (IMDSv1). enable_imds_v1=True, ) credentialsClient = CredClient(credentialsConfig)Untuk informasi lebih lanjut, lihat Metode 5: Peran RAM Instans ECS.
Java
Tambahkan dependensi credentials.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, versi credentials-java harus 0.3.10 atau lebih baru.
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.10</version> </dependency>Anda dapat mengonfigurasi peran RAM instans ECS sebagai kredensial akses.
import com.aliyun.credentials.Client; import com.aliyun.credentials.models.Config; public class DemoTest { public static void main(String[] args) throws Exception { Config credentialConfig = new Config(); credentialConfig.setType("ecs_ram_role"); // Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami sarankan Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat menyetel nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. credentialConfig.setRoleName("<RoleName>"); // Opsional. Nilai defaultnya adalah false. Jika Anda menyetel ini ke true, mode penguatan keamanan diterapkan. Jika Anda menyetel ini ke false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika upaya gagal, sistem mencoba lagi dalam mode normal (IMDSv1). credentialConfig.setDisableIMDSv1(true); Client credentialClient = new Client(credentialConfig); } }Untuk informasi lebih lanjut, lihat Metode 5: Peran RAM instans ECS.
Go
Instal alat Credentials.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, versi credentials-go harus 1.3.10 atau lebih baru.
Gunakan
go getuntuk mengunduh dan menginstal alat tersebut.go get -u github.com/aliyun/credentials-goJika menggunakan
depuntuk mengelola dependensi, jalankan perintah berikut.dep ensure -add github.com/aliyun/credentials-go
Konfigurasikan peran RAM instans ECS sebagai kredensial akses.
package main import ( "fmt" "github.com/aliyun/credentials-go/credentials" ) func _main(args []*string) { credentialsConfig := new(credentials.Config). SetType("ecs_ram_role"). // Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami sarankan Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat menyetel nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. SetRoleName("<RoleName>"). // Opsional. Nilai defaultnya adalah false. Jika Anda menyetel ini ke true, mode penguatan keamanan diterapkan. Jika Anda menyetel ini ke false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika upaya gagal, sistem mencoba lagi dalam mode normal (IMDSv1). SetDisableIMDSv1(true) credentialClient, err := credentials.NewCredential(credentialsConfig) if err != nil { panic(err) } }Untuk informasi lebih lanjut dan contoh pemanggilan, lihat Metode 5: Menggunakan peran RAM instans ECS.
Node.js
Instal alat Credentials.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, versi credentials harus 2.3.1 atau lebih baru.
npm install @alicloud/credentialsKonfigurasikan peran RAM instans ECS sebagai kredensial akses.
const Credential = require('@alicloud/credentials'); const credentialsConfig = new Credential.Config({ type: 'ecs_ram_role', // Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami sarankan Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat menyetel nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. roleName: '<RoleName>', // Opsional. Nilai defaultnya adalah false. Jika Anda menyetel ini ke true, mode penguatan keamanan diterapkan. Jika Anda menyetel ini ke false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika upaya gagal, sistem mencoba lagi dalam mode normal (IMDSv1). disableIMDSv1: true, }); const cred = new Credential.default(credentialsConfig);Untuk detail lebih lanjut dan contoh pemanggilan, lihat Metode 5: Menggunakan peran RAM instans ECS.
.NET
Instal alat Credentials.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, versi credentials harus 1.4.2 atau lebih baru.
dotnet add package Aliyun.CredentialsKonfigurasikan peran RAM instans ECS sebagai kredensial akses.
using Aliyun.Credentials.Models; namespace credentials_demo { class Program { static void Main(string[] args) { var config = new Config() { Type = "ecs_ram_role", // Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami sarankan Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat menyetel nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. RoleName = "<RoleName>", // Opsional. Nilai defaultnya adalah false. Jika Anda menyetel ini ke true, mode penguatan keamanan diterapkan. Jika Anda menyetel ini ke false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika upaya gagal, sistem mencoba lagi dalam mode normal (IMDSv1). DisableIMDSv1 = true } } } }Untuk informasi lebih lanjut dan contoh pemanggilan, lihat Metode 5: Gunakan peran RAM instans ECS.
PHP
Instal alat Credentials.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, versi credentials harus 1.2.0 atau lebih baru.
composer require alibabacloud/credentialsAnda dapat mengonfigurasi peran RAM instans untuk ECS sebagai kredensial akses.
<?php use AlibabaCloud\Credentials\Credential; use AlibabaCloud\Credentials\Credential\Config; $credConfig = new Config([ 'type' => 'ecs_ram_role', // Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami sarankan Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat menyetel nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. 'roleName' => '<RoleName>', // Opsional. Nilai defaultnya adalah false. Jika Anda menyetel ini ke true, mode penguatan keamanan diterapkan. Jika Anda menyetel ini ke false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika upaya gagal, sistem mencoba lagi dalam mode normal (IMDSv1). 'disableIMDSv1' => true, ]);Untuk informasi lebih lanjut, termasuk contoh pemanggilan, lihat Metode 5: Gunakan peran RAM instans ECS.
Metode 2: Gunakan perintah shell
Layanan metadata menyediakan titik akhir HTTP untuk mengambil kredensial akses sementara.
Mode penguatan keamanan
Instans Linux
# Dapatkan token akses server metadata untuk autentikasi. TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:<periode_validitas_token_akses_server_metadata>"` # Dapatkan kredensial akses sementara peran RAM instans. curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/ram/security-credentials/<nama_peran_RAM_instans>
Instans Windows (PowerShell)
# Dapatkan token akses server metadata untuk autentikasi. $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "<periode_validitas_token_akses_server_metadata>"} -Method PUT -Uri http://100.100.100.200/latest/api/token # Dapatkan kredensial akses sementara peran RAM instans. Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/ram/security-credentials/<nama_peran_RAM_instans>
<periode_validitas_token_akses_server_metadata>: Sebelum mengambil kredensial akses sementara peran RAM instans, Anda harus mendapatkan token akses server metadata dan menyetel periode validitasnya untuk meningkatkan keamanan data. Setelah periode validitas berakhir, Anda harus mendapatkan token lagi. Jika tidak, Anda tidak dapat mengambil kredensial akses sementara peran RAM instans.
Nilai valid: 1 hingga 21600. Unit: detik. Untuk informasi lebih lanjut, lihat Metadata instans.
<nama_peran_RAM_instans>: Ganti ini dengan nama peran RAM instans Anda. Misalnya, EcsRamRole.
Jika menggunakan Asisten Cloud untuk menjalankan perintah di atas, pastikan bahwa Agen Asisten Cloud memenuhi persyaratan versi minimum berikut:
Platform | Versi minimum Agen Asisten Cloud |
windows | 2.1.3.857 |
linux | 2.2.3.857 |
linux arm | 2.4.3.857 |
freebsd | 2.3.3.857 |
Mode Normal
Instans Linux
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<nama_peran_RAM_instans>Instans Windows (PowerShell)
Invoke-RestMethod http://100.100.100.200/latest/meta-data/ram/security-credentials/<nama_peran_RAM_instans>Ganti
<nama_peran_RAM_instans>dengan nama peran RAM instans Anda. Misalnya, EcsRamRoleDocumentTesting.
Kode berikut memberikan contoh tanggapan:
Token akses sementara terdiri dari nilai
AccessKeyId,AccessKeySecret, danSecurityToken.Expiration: Waktu kedaluwarsa kredensial akses sementara.{ "AccessKeyId" : "STS.*******6YSE", "AccessKeySecret" : "aj******jDU", "Expiration" : "2017-11-01T05:20:01Z", "SecurityToken" : "CAISng********", "LastUpdated" : "2023-07-18T14:17:28Z", "Code" : "Success" }
Metode 3: Gunakan CLI Alibaba Cloud
Antarmuka baris perintah (CLI) mendukung pemanggilan ECS IMDS untuk mendapatkan token STS. Ini juga mendukung pembaruan berkala dan otomatis.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, versi CLI harus 3.0.248 atau lebih baru.
Instal CLI.
Konfigurasikan kredensial identitas.
Jalankan perintah berikut untuk mengonfigurasi informasi kredensial. Ganti <ProfileName> dengan nama konfigurasi Anda.
aliyun configure --profile <ProfileName> --mode EcsRamRoleIni adalah perintah interaktif. Ikuti petunjuk untuk memasukkan informasi yang diperlukan. Untuk informasi lebih lanjut, lihat Konfigurasikan kredensial.
Panggil operasi API.
Misalnya, gunakan CLI untuk menanyakan daftar instans ECS.
aliyun ecs DescribeInstancesUntuk informasi lebih lanjut tentang perintah CLI, lihat Struktur perintah.
Gunakan peran RAM instans untuk memanggil API
Contoh berikut menunjukkan cara menggunakan Peran RAM instans. Aplikasi Python yang diterapkan pada instans Elastic Compute Service (ECS) Linux memanggil operasi API OSS untuk mengunduh file.
pip install oss2
pip install alibabacloud_credentialsimport oss2
from alibabacloud_credentials.client import Client
from alibabacloud_credentials.models import Config
from oss2 import CredentialsProvider
from oss2.credentials import Credentials
class CredentialProviderWarpper(CredentialsProvider):
def __init__(self, client):
self.client = client
def get_credentials(self):
access_key_id = self.client.get_access_key_id()
access_key_secret = self.client.get_access_key_secret()
security_token = self.client.get_security_token()
return Credentials(access_key_id, access_key_secret, security_token)
def download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name):
config = Config(
type='ecs_ram_role', # Jenis kredensial akses. Nilai ini tetap sebagai ecs_ram_role.
role_name=role_name
)
cred = Client(config)
credentials_provider = CredentialProviderWarpper(cred)
auth = oss2.ProviderAuth(credentials_provider)
# Inisialisasi objek Bucket OSS.
bucket = oss2.Bucket(auth, endpoint, bucket_name)
# Unduh gambar ke instans lokal.
bucket.get_object_to_file(object_key, local_file)
print("Gambar berhasil diunduh")
if __name__ == "__main__":
# Tentukan variabel global.
role_name = 'role_name' # Ganti dengan nama peran RAM instans Anda.
bucket_name = 'bucket_name' # Ganti dengan nama bucket Anda.
endpoint = 'oss-cn-beijing.aliyuncs.com' # Ganti dengan titik akhir publik bucket OSS Anda.
object_key = 'testfolder/example.png' # Ganti dengan jalur lengkap gambar yang ingin Anda unduh dari OSS. Jangan sertakan nama bucket.
local_file = '/localpath/to/image.png' # Ganti dengan jalur root di instans ECS tempat Anda ingin menyimpan gambar, dan tentukan nama gambar.
download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name)
Operasi lainnya
Lepas atau ubah peran RAM instans ECS
Lepas atau ubah peran di Konsol
Buka Konsol ECS - Instans. Di bilah navigasi atas, pilih wilayah dan kelompok sumber daya target.
Cari instans ECS yang ingin dikelola, lalu pilih .
Untuk melepas peran RAM instans: Atur Action ke Detach, lalu klik OK.
Untuk mengubah peran RAM instans: Atur Action ke Attach, pilih peran RAM instans yang diinginkan, lalu klik OK.
Lepas atau ubah peran menggunakan API
Untuk melepas peran RAM instans, panggil operasi DetachInstanceRamRole.
Untuk mengubah peran RAM instans:
Panggil operasi DetachInstanceRamRole untuk melepas peran RAM instans saat ini.
Panggil operasi AttachInstanceRamRole untuk menyambungkan peran RAM baru ke instans.
Referensi
Jika aplikasi yang dikelola sendiri diimplementasikan pada instans ECS, Anda dapat menyambungkan peran RAM instans ke instans ECS dan menggunakan peran RAM instans untuk mengakses Key Management Service (KMS) dari instans tersebut. Untuk informasi lebih lanjut, lihat Gunakan peran RAM instans yang disambungkan ke instans ECS untuk mengakses KMS secara aman.
Jika instans ECS tidak lagi memerlukan izin tertentu, Anda dapat mencabut izin dari peran RAM instans yang disambungkan ke instans tersebut. Untuk informasi lebih lanjut, lihat Cabut izin dari peran RAM.
Jika Anda melakukan hard-code AccessKey teks biasa di kode Anda untuk mengakses Alibaba Cloud OpenAPI, AccessKey mungkin bocor karena pengelolaan izin repositori kode yang tidak tepat. Kami sarankan Anda menggunakan kredensial akses alih-alih AccessKey hard-code untuk mengakses Alibaba Cloud OpenAPI. Untuk informasi lebih lanjut, lihat Praktik terbaik menggunakan kredensial akses untuk mengakses Alibaba Cloud OpenAPI.
> Instance Settings > Attach/Detach RAM Role