Instance Resource Access Management (RAM) role adalah peran layanan yang dapat Anda sambungkan ke instans Elastic Compute Service (ECS). Entitas tepercaya dari instance RAM role adalah ECS. Dengan instance RAM role, Anda dapat memperoleh token Security Token Service (STS) dari dalam instans ECS tanpa menyediakan pasangan AccessKey, lalu menggunakan token tersebut untuk memanggil operasi API layanan Alibaba Cloud lainnya. Kredensial identitas sementara hanya dapat diperoleh dari dalam instans, sehingga menghilangkan kebutuhan untuk mengonfigurasi pasangan AccessKey. Pendekatan ini meningkatkan keamanan pasangan AccessKey akun Alibaba Cloud Anda dan memungkinkan penerapan pengelolaan izin detail halus melalui RAM.
Manfaat
Pemanggilan API yang aman dan praktis di dalam instans: Saat proyek Anda dideploy di Alibaba Cloud ECS, Anda dapat menggunakan instance RAM role untuk memperoleh token STS guna memanggil API, tanpa perlu mengonfigurasi pasangan AccessKey di dalam kode. Hal ini mengurangi risiko kebocoran pasangan AccessKey.
Perpindahan identitas RAM yang disederhanakan: Jika menggunakan pasangan AccessKey tradisional, Anda harus mengubah konfigurasi atau kode serta me-restart layanan untuk mengganti identitas RAM yang memanggil layanan tersebut. Dengan instance RAM role, Anda cukup mengganti peran RAM yang disambungkan ke instans ECS untuk berpindah identitas—tanpa perubahan tambahan.
Pengelolaan izin detail halus: Anda dapat menetapkan peran RAM dengan kebijakan otorisasi tertentu ke instans ECS yang berbeda, sehingga menerapkan kontrol akses detail halus sesuai kebutuhan.
Batasan
Anda hanya dapat menyambungkan satu peran RAM ke satu instans ECS.
Prosedur
Jika Anda menggunakan pengguna RAM atau peran RAM untuk melakukan operasi berikut, berikan izin yang diperlukan kepada identitas tersebut.
Create a RAM role and attach it to an ECS instance
Create and attach a role in the console
Login ke RAM console untuk membuat peran RAM dan memberikan izin.
Buat peran RAM untuk layanan Alibaba Cloud tepercaya.
Pilih Identities > Roles, klik Create Role, lalu ikuti petunjuk di layar untuk membuat peran tersebut. Perhatikan parameter berikut dan konfigurasikan parameter lain sesuai kebutuhan. Untuk informasi selengkapnya, lihat Create a service role:
Untuk Trusted Entity Type, pilih Alibaba Cloud Service.
Untuk Trusted Service, pilih Elastic Compute Service.
Berikan izin kepada peran RAM yang telah dibuat.
Sambungkan kebijakan sistem atau kebijakan kustom ke peran RAM untuk memberikan izin akses resource atau operasi yang diperlukan. Misalnya, berikan kebijakan sistem AliyunOSSReadOnlyAccess ke peran RAM tersebut.
Jika kebijakan sistem tidak memenuhi kebutuhan Anda, Anda dapat memberikan izin ke peran RAM dengan membuat kebijakan kustom. Untuk informasi selengkapnya, lihat Create a custom policy.
Sambungkan peran RAM ke instans ECS.
Buka ECS console - Instances. Di bilah navigasi atas, pilih wilayah dan kelompok sumber daya yang dituju.
Temukan instans ECS yang dituju, lalu pilih .
Di kotak dialog, pilih instance RAM role lalu klik OK.
Creation via API and granting
Buat peran RAM dan berikan izin.
Panggil operasi CreateRole untuk membuat peran RAM.
Parameter untuk kebijakan kepercayaan (AssumeRolePolicyDocument):
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "ecs.aliyuncs.com" ] } } ], "Version": "1" }(Opsional) Panggil operasi CreatePolicy untuk membuat kebijakan akses baru.
Jika Anda sudah 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 instance RAM role.
Panggil operasi AttachInstanceRamRole untuk menyambungkan peran RAM ke instans ECS.
Obtain temporary identity credentials for an instance RAM role
Anda dapat memperoleh kredensial akses sementara dari dalam instans ECS dengan mengakses Instance Metadata Service (IMDS). Periode validitas kredensial akses sementara dikelola secara otomatis. Untuk informasi selengkapnya tentang metadata, lihat Instance metadata.
Method 1: Use the Credentials tool in a program
Tool Credentials mengenkapsulasi logika pemanggilan ECS IMDS untuk memperoleh token STS dan mendukung perpanjangan berkala.
Python
Instal tool 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 instance RAM role. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. role_name='<role_name>', # Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama akan mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem akan mencoba lagi dalam mode NAT (IMDSv1). disable_imds_v1=False, ) credentialsClient = CredClient(credentialsConfig)Untuk informasi selengkapnya dan contoh pemanggilan, lihat Method 5: ECS instance RAM role.
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 instans ECS untuk menggunakan instance RAM role-nya 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 instance RAM role. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. credentialConfig.setRoleName("<RoleName>"); // Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama akan mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem akan mencoba lagi dalam mode NAT (IMDSv1). credentialConfig.setDisableIMDSv1(true); Client credentialClient = new Client(credentialConfig); } }Untuk informasi selengkapnya dan contoh pemanggilan, lihat Method 5: ECS instance RAM role.
Go
Instal tool 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 tool tersebut.go get -u github.com/aliyun/credentials-goJika Anda menggunakan
depuntuk mengelola dependensi, jalankan perintah berikut.dep ensure -add github.com/aliyun/credentials-go
Konfigurasikan instance RAM role 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 instance RAM role. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. SetRoleName("<RoleName>"). // Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama akan mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem akan mencoba lagi dalam mode NAT (IMDSv1). SetDisableIMDSv1(true) credentialClient, err := credentials.NewCredential(credentialsConfig) if err != nil { panic(err) } }Untuk informasi selengkapnya dan contoh pemanggilan, lihat Method 5: Use an ECS instance RAM role.
Node.js
Instal tool Credentials.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, versi credentials harus 2.3.1 atau lebih baru.
npm install @alicloud/credentialsKonfigurasikan instance RAM role instans ECS sebagai kredensial akses.
const Credential = require('@alicloud/credentials'); const credentialsConfig = new Credential.Config({ type: 'ecs_ram_role', // Opsional. Nama instance RAM role. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. roleName: '<RoleName>', // Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama akan mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem akan mencoba lagi dalam mode NAT (IMDSv1). disableIMDSv1: true, }); const cred = new Credential.default(credentialsConfig);Untuk informasi selengkapnya dan contoh pemanggilan, lihat Method 5: Use an ECS instance RAM role.
.NET
Instal tool Credentials.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, versi credentials harus 1.4.2 atau lebih baru.
dotnet add package Aliyun.CredentialsKonfigurasikan instance RAM role 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 instance RAM role. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. RoleName = "<RoleName>", // Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama akan mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem akan mencoba lagi dalam mode NAT (IMDSv1). DisableIMDSv1 = true } } } }Untuk informasi selengkapnya dan contoh pemanggilan, lihat Method 5: Use an ECS instance RAM role.
PHP
Instal tool Credentials.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, versi credentials harus 1.2.0 atau lebih baru.
composer require alibabacloud/credentialsKonfigurasikan instans ECS untuk menggunakan instance RAM role-nya sebagai kredensial akses.
<?php use AlibabaCloud\Credentials\Credential; use AlibabaCloud\Credentials\Credential\Config; $credConfig = new Config([ 'type' => 'ecs_ram_role', // Opsional. Nama instance RAM role. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. 'roleName' => '<RoleName>', // Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama akan mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem akan mencoba lagi dalam mode NAT (IMDSv1). 'disableIMDSv1' => true, ]);Untuk informasi selengkapnya, lihat Method 5: Use an ECS instance RAM role.
Method 2: Use shell commands
Layanan metadata menyediakan titik akhir HTTP untuk mengambil kredensial akses sementara.
Security hardening mode
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:<validity_period_of_the_metadata_server_access_token>"` # Dapatkan kredensial akses temporary instance RAM role. curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>
Instans Windows (PowerShell)
# Dapatkan token akses server metadata untuk autentikasi. $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "<validity_period_of_the_metadata_server_access_token>"} -Method PUT -Uri http://100.100.100.200/latest/api/token # Dapatkan kredensial akses temporary instance RAM role. Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>
<validity_period_of_the_metadata_server_access_token>: Sebelum Anda mengambil kredensial akses sementara instance RAM role, Anda harus terlebih dahulu memperoleh token akses untuk server metadata. Token ini memiliki periode validitas yang dapat dikonfigurasi untuk meningkatkan keamanan data. Setelah token kedaluwarsa, Anda harus memperoleh token baru sebelum dapat mengambil kredensial akses sementara.
Nilai yang valid: 1 hingga 21600. Satuan: detik. Untuk informasi selengkapnya, lihat Instance metadata.
<instance_RAM_role_name>: Ganti ini dengan nama instance RAM role Anda. Contohnya, EcsRamRole.
Jika Anda menggunakan Cloud Assistant untuk menjalankan perintah di atas, pastikan Cloud Assistant Agent memenuhi persyaratan versi minimum berikut:
Platform | Cloud Assistant Agent version number |
windows | 2.1.3.857 |
linux | 2.2.3.857 |
linux arm | 2.4.3.857 |
freebsd | 2.3.3.857 |
NAT mode
Instans Linux
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>Instans Windows (PowerShell)
Invoke-RestMethod http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>Ganti
<instance_RAM_role_name>dengan nama instance RAM role Anda. Contohnya, EcsRamRoleDocumentTesting.
Berikut ini contoh respons:
Kredensial 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" }
Method 3: Use the Alibaba Cloud CLI
Antarmuka baris perintah (CLI) mendukung pemanggilan ECS IMDS untuk memperoleh token STS serta penyegaran 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 prompt untuk memasukkan informasi yang diperlukan. Untuk informasi selengkapnya, lihat Configure credentials.
Panggil operasi API.
Contohnya, gunakan CLI untuk mengkueri daftar instans ECS.
aliyun ecs DescribeInstancesUntuk informasi selengkapnya tentang perintah CLI, lihat Command structure.
Use an instance RAM role to call an API
Contoh berikut menunjukkan cara menggunakan instance RAM role. Aplikasi Python yang dideploy pada instans 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 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 citra ke instans lokal.
bucket.get_object_to_file(object_key, local_file)
print("Image downloaded successfully")
if __name__ == "__main__":
# Definisikan variabel global.
role_name = 'role_name' # Ganti dengan nama instance RAM role 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 path lengkap citra yang ingin Anda unduh dari OSS. Jangan sertakan nama bucket.
local_file = '/localpath/to/image.png' # Ganti dengan path root pada instans ECS tempat Anda ingin menyimpan citra, dan tentukan nama citra tersebut.
download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name)
Other operations
Detach or change the instance RAM role of an ECS instance
Detach or change a role in the console
Buka ECS console - Instances. Di bilah navigasi atas, pilih wilayah dan kelompok sumber daya yang dituju.
Temukan instans ECS yang ingin Anda kelola, lalu pilih .
Untuk melepas instance RAM role, pilih Detach untuk Operation Type lalu klik OK.
Untuk mengganti instance RAM role, atur Operation Type menjadi Attach, pilih instance RAM role yang diperlukan, lalu klik OK.
Detach or change a role using the API
Untuk melepas instance RAM role, panggil operasi DetachInstanceRamRole.
Untuk mengganti instance RAM role:
Panggil operasi DetachInstanceRamRole untuk melepas instance RAM role saat ini.
Panggil operasi AttachInstanceRamRole untuk menyambungkan peran RAM baru ke instans tersebut.
References
Jika aplikasi kustom Anda dideploy pada instans Alibaba Cloud ECS dan perlu mengakses KMS, lihat Use an instance RAM role to securely access KMS.
Jika instans ECS tidak lagi memerlukan izin tertentu, Anda dapat revoke permissions from a RAM role.
Saat Anda mengakses Alibaba Cloud OpenAPI, jangan hard-code AccessKey dalam teks biasa. Pengelolaan izin repositori kode yang tidak tepat dapat mengekspos AccessKey Anda. Sebagai gantinya, konfigurasikan aplikasi Anda untuk use access credentials to access Alibaba Cloud OpenAPI.
> Instance Settings > Attach/Detach RAM Role